AWS CloudFormation の「MalformedPolicyDocument」エラーの解決方法を教えてください。

最終更新日: 2020 年 8 月 6 日

AWS CloudFormation スタックを作成または更新しようとすると、次の「MalformedPolicyDocument」エラーメッセージが表示されます。テンプレートを検証した後でも、エラーが表示されます。

簡単な説明

AWS CloudFormation の ValidateTemplate API は、テンプレートの構文のみを検証できます。API は、リソースに対して指定したプロパティ値を検証できません。ポリシードキュメントはプロパティ値の一部として設定されているため、ポリシーの有効性は検証されません。

ポリシー言語の文法に従って、ポリシードキュメントが構文上または意味的に正しくない場合、「MalformedPolicyDocument」エラーが発生します。

このエラーを解決するには、ポリシードキュメントが一部となっている特定のリソースタイプに対して、当該ポリシードキュメントが有効であることを確認する必要があります。

解決方法

スタックイベントでエラーメッセージの詳細を確認する

  1. AWS CloudFormation コンソールを開きます。
  2. ナビゲーションペインで、[Stacks] (スタック) を選択します。
  3. エラーを返したスタックを選択し、[Events] (イベント) タブを選択します。
  4. [Status reason] (状況の理由) 列で、エラーの原因を説明するメッセージを検索します。

それでもエラーの原因が見つからない場合は、[Get more information on the AWS CloudTrail event the error] (AWS CloudTrail のイベントエラーについての詳細情報を取得) のセクションのステップを完了します。

エラーの原因となった AWS CloudTrail イベントの詳細情報を入手する

詳細については、CloudTrail イベントの errorMessage プロパティで、エラーの原因となったリソースタイプのオペレーションを確認します。

たとえば、「MalformedPolicyDocument」が AWS Identity and Access Management (IAM) ロールにアタッチされたインラインポリシーのエラーから生じている場合は、次のステップを実行します。

  1. CloudTrail コンソールを開きます。
  2. ナビゲーションペインで [Event history] (イベント履歴) をクリックします。
  3. [Filter] (フィルター) 検索ボックスで、ルックアップ属性として [Event name] (イベント名) を選択し、対応するテキストボックスに PutRolePolicy と入力します。
  4. [Time range] (時間範囲) で、AWS CloudFormation イベントに表示されるエラーメッセージに従って CloudTrail イベントの時間を設定します。
  5. [Event name] (イベント名) 列で、イベントを選択します。
  6. [Event record] (イベントレコード) から、errorMessage プロパティの値を調べて、詳細なメッセージを確認します。

CloudTrail イベントで渡されたポリシーを検証する

エラーを引き起こしているリソースに対する API レベルのアクションの CloudTrail イベントには、通常、解決された形式のポリシードキュメントが含まれます。この解決されたポリシードキュメントをコピーし、その特定のリソースに対して直接 AWS マネジメントコンソールで新しいポリシーを作成できます。

たとえば、「MalformedPolicyDocument」が IAM ロールにアタッチされたインラインポリシーのエラーから生じている場合は、以下のステップを実行します。

  1. AWS CloudTrail コンソールを開きます。
  2. ナビゲーションペインで [Event history] (イベント履歴) をクリックします。
  3. [Filter] (フィルター) 検索ボックスで、ルックアップ属性として [Event name] (イベント名) を選択し、対応するテキストボックスに PutRolePolicy と入力します。
  4. [Time range] (時間範囲) で、AWS CloudFormation イベントに表示されるエラーメッセージに従って CloudTrail イベントの時間を設定します。
  5. [Event name] (イベント名) 列で、イベントを選択します。 
  6. [Event record] (イベントレコード) から、requestParameters の下の policyDocument プロパティの値をコピーします。
  7. テキストエディタで、ポリシードキュメントから「\」エスケープ文字を削除します。
  8. IAM コンソールを開きます。
  9. ナビゲーションペインで [Policies] (ポリシー) を選択します。
  10. [Create policy] (ポリシーの作成) を選び、次に [JSON] タブを選択します。
  11. ステップ 6 でコピーしたポリシードキュメントを入力し、[Review policy] (ポリシーの確認) を選択します。
  12. ページの先頭にある赤いダイアログボックスに表示されるエラーメッセージの内容を確認します。エラーメッセージには、ポリシーの検証失敗の詳細な説明が表示されます。

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?