嘗試建立或更新 AWS CloudFormation 堆疊時,我收到 "MalformedPolicyDocument" 錯誤訊息。即使在驗證範本之後,我仍然收到錯誤。
簡短說明
AWS CloudFormation 中的 ValidateTemplate API 僅能驗證範本的語法。API 無法驗證您為資源指定的內容值。由於政策文件設定為內容值的一部分,因此不會驗證政策的有效性。
根據政策語言的文法,當政策文件在文法上或語意上不正確時,您會收到 "MalformedPolicyDocument" 錯誤。
若要解決此錯誤,您必須確認政策文件對其所屬的特定資源類型有效。
解決方案
在堆疊事件中尋找錯誤訊息詳細資料
- 開啟 AWS CloudFormation 主控台。
- 從導覽窗格中,選擇「堆疊」。
- 選擇傳回錯誤的堆疊,然後選擇「事件」索引標籤。
- 在「狀態原因」資料欄中搜尋解釋錯誤原因的訊息。
如果仍然找不到錯誤原因,請完成「取得導致錯誤的 AWS CloudTrail 事件的相關資訊」區段中的步驟。
取得導致錯誤的 AWS CloudTrail 事件的相關資訊
您可以透過檢查 CloudTrail 事件的 errorMessage 內容來取得相關資訊,以對導致錯誤的資源類型進行作業。
例如,如果 "MalformedPolicyDocument" 是肇因於連接至 AWS Identity and Access Management (IAM) 角色的內嵌政策中的錯誤,請完成下列步驟:
- 開啟 AWS CloudTrail 主控台。
- 從導覽窗格中,選擇「事件歷史記錄」。
- 在「篩選器」搜尋欄位中,選取「事件名稱」作為查詢屬性,然後在對應的文字欄位中輸入 PutRolePolicy。
- 針對「時間範圍」,將 CloudTrail 事件的時間設為您顯示於 AWS CloudFormation 事件的錯誤訊息中看到的時間。
- 在「事件名稱」資料欄中,選擇您的事件。
- 從「事件記錄」中,檢查 errorMessage 內容值以取得詳細訊息。
驗證 CloudTrail 事件中傳遞的政策
對導致錯誤的資源執行 API 層級動作的 CloudTrail 事件通常包含政策文件的已解決表單。您可以複製這個已解決的政策文件,然後在 AWS 管理主控台中直接為該特定資源建立新政策。
例如,如果 "MalformedPolicyDocument" 是肇因於連接至 IAM 角色的內嵌政策中的錯誤,請完成下列步驟:
- 開啟 CloudTrail 主控台。
- 從導覽窗格中,選擇「事件歷史記錄」。
- 在「篩選器」搜尋欄位中,選取「事件名稱」作為查詢屬性,然後在對應的文字欄位中輸入 PutRolePolicy。
- 針對「時間範圍」,將 CloudTrail 事件的時間設為您顯示於 AWS CloudFormation 事件的錯誤訊息中看到的時間。
- 在「事件名稱」資料欄中,選擇您的事件。
- 從「事件記錄」中,複製 requestParameters 下的 policyDocument 內容值。
- 在文字編輯器中,移除政策文件中的所有 "" 逸出字元。
- 開啟 IAM 主控台。
- 從導覽窗格中,選擇「政策」。
- 選擇「建立政策」,然後選擇 JSON 索引標籤。
- 輸入您從步驟 6 中複製的政策文件,然後選擇「檢閱政策」。
- 檢查頁面開頭紅色對話方塊中顯示的錯誤訊息內容。錯誤訊息提供了政策驗證失敗更多詳細說明。
相關資訊
IAM JSON 政策語言的文法
IAM JSON 政策元素參考