如何解決 AWS CloudFormation 中的 "MalformedPolicyDocument" 錯誤?

1 分的閱讀內容
0

嘗試建立或更新 AWS CloudFormation 堆疊時,我收到 "MalformedPolicyDocument" 錯誤訊息。即使在驗證範本之後,我仍然收到錯誤。

簡短說明

AWS CloudFormation 中的 ValidateTemplate API 僅能驗證範本的語法。API 無法驗證您為資源指定的內容值。由於政策文件設定為內容值的一部分,因此不會驗證政策的有效性。

根據政策語言的文法,當政策文件在文法上或語意上不正確時,您會收到 "MalformedPolicyDocument" 錯誤。

若要解決此錯誤,您必須確認政策文件對其所屬的特定資源類型有效。

解決方案

在堆疊事件中尋找錯誤訊息詳細資料

  1. 開啟 AWS CloudFormation 主控台
  2. 從導覽窗格中,選擇「堆疊」。
  3. 選擇傳回錯誤的堆疊,然後選擇「事件」索引標籤。
  4. 在「狀態原因」資料欄中搜尋解釋錯誤原因的訊息。

如果仍然找不到錯誤原因,請完成「取得導致錯誤的 AWS CloudTrail 事件的相關資訊」區段中的步驟。

取得導致錯誤的 AWS CloudTrail 事件的相關資訊

您可以透過檢查 CloudTrail 事件的 errorMessage 內容來取得相關資訊,以對導致錯誤的資源類型進行作業。

例如,如果 "MalformedPolicyDocument" 是肇因於連接至 AWS Identity and Access Management (IAM) 角色的內嵌政策中的錯誤,請完成下列步驟:

  1. 開啟 AWS CloudTrail 主控台
  2. 從導覽窗格中,選擇「事件歷史記錄」。
  3. 在「篩選器」搜尋欄位中,選取「事件名稱」作為查詢屬性,然後在對應的文字欄位中輸入 PutRolePolicy
  4. 針對「時間範圍」,將 CloudTrail 事件的時間設為您顯示於 AWS CloudFormation 事件的錯誤訊息中看到的時間。
  5. 在「事件名稱」資料欄中,選擇您的事件。
  6. 從「事件記錄」中,檢查 errorMessage 內容值以取得詳細訊息。

驗證 CloudTrail 事件中傳遞的政策

對導致錯誤的資源執行 API 層級動作的 CloudTrail 事件通常包含政策文件的已解決表單。您可以複製這個已解決的政策文件,然後在 AWS 管理主控台中直接為該特定資源建立新政策。

例如,如果 "MalformedPolicyDocument" 是肇因於連接至 IAM 角色的內嵌政策中的錯誤,請完成下列步驟:

  1. 開啟 CloudTrail 主控台
  2. 從導覽窗格中,選擇「事件歷史記錄」。
  3. 在「篩選器」搜尋欄位中,選取「事件名稱」作為查詢屬性,然後在對應的文字欄位中輸入 PutRolePolicy
  4. 針對「時間範圍」,將 CloudTrail 事件的時間設為您顯示於 AWS CloudFormation 事件的錯誤訊息中看到的時間。
  5. 在「事件名稱」資料欄中,選擇您的事件。
  6. 從「事件記錄」中,複製 requestParameters 下的 policyDocument 內容值。
  7. 在文字編輯器中,移除政策文件中的所有 "" 逸出字元。
  8. 開啟 IAM 主控台
  9. 從導覽窗格中,選擇「政策」。
  10. 選擇「建立政策」,然後選擇 JSON 索引標籤。
  11. 輸入您從步驟 6 中複製的政策文件,然後選擇「檢閱政策」。
  12. 檢查頁面開頭紅色對話方塊中顯示的錯誤訊息內容。錯誤訊息提供了政策驗證失敗更多詳細說明。

相關資訊

IAM JSON 政策語言的文法

IAM JSON 政策元素參考

AWS 官方
AWS 官方已更新 2 年前