AWS CloudFormation スタックを作成または更新しようとすると、「MalformedPolicyDocument」エラーメッセージが表示されます。テンプレートを検証した後でも、エラーが表示されます。
簡単な説明
AWS CloudFormation の ValidateTemplate API は、テンプレートの構文のみを検証できます。API は、リソースに対して指定したプロパティ値を検証できません。ポリシードキュメントはプロパティ値の一部として設定されているため、ポリシーの有効性は検証されません。
ポリシー言語の文法に従って、ポリシードキュメントが構文上または意味的に正しくない場合、「MalformedPolicyDocument」エラーが発生します。
このエラーを解決するには、ポリシードキュメントが一部となっている特定のリソースタイプに対して、当該ポリシードキュメントが有効であることを確認する必要があります。
解決方法
スタックイベントでエラーメッセージの詳細を確認する
- AWS CloudFormation コンソールを開きます。
- ナビゲーションペインで、[Stacks] (スタック) を選択します。
- エラーを返したスタックを選択し、[Events] (イベント) タブを選択します。
- [状況の理由] 列で、エラーの原因を説明するメッセージを検索します。
それでもエラーの原因が見つからない場合は、エラーの原因となった AWS CloudTrail イベントの詳細情報を入手するセクションの手順を完了します。
エラーの原因となった AWS CloudTrail イベントの詳細情報を入手する
詳細については、CloudTrail イベントの errorMessage プロパティで、エラーの原因となったリソースタイプのオペレーションを確認します。
たとえば、「MalformedPolicyDocument」が AWS Identity and Access Management (IAM) ロールにアタッチされたインラインポリシーのエラーから生じている場合は、次のステップを実行します。
- AWS CloudTrail コンソールを開きます。
- ナビゲーションペインで [Event history] (イベント履歴) をクリックします。
- [Filter] (フィルター) 検索ボックスで、ルックアップ属性として [Event name] (イベント名) を選択し、対応するテキストボックスに PutRolePolicy と入力します。
- [時間範囲] で、CloudTrail イベントの時刻を、AWS CloudFormation イベントに表示されるエラーメッセージが示す時刻に設定します。
- [イベント名] 列で、イベントを選択します。
- [Event record] (イベントレコード) から、errorMessage プロパティの値を調べて、詳細なメッセージを確認します。
CloudTrail イベントで渡されたポリシーを検証する
エラーを引き起こしているリソースに対する API レベルのアクションの CloudTrail イベントには、通常、解決された形式のポリシードキュメントが含まれます。この解決されたポリシードキュメントをコピーし、その特定のリソースに対して直接 AWS マネジメントコンソールで新しいポリシーを作成できます。
たとえば、「MalformedPolicyDocument」が IAM ロールにアタッチされたインラインポリシーのエラーから生じている場合は、以下のステップを実行します。
- CloudTrail コンソールを開きます。
- ナビゲーションペインで [Event history] (イベント履歴) をクリックします。
- [Filter] (フィルター) 検索ボックスで、ルックアップ属性として [Event name] (イベント名) を選択し、対応するテキストボックスに PutRolePolicy と入力します。
- [時間範囲] で、CloudTrail イベントの時刻を、AWS CloudFormation イベントに表示されるエラーメッセージが示す時刻に設定します。
- [イベント名] 列で、イベントを選択します。
- [Event record] (イベントレコード) から、requestParameters の下の policyDocument プロパティの値をコピーします。
- テキストエディタで、ポリシードキュメントから「\」エスケープ文字を削除します。
- IAM コンソールを開きます。
- ナビゲーションペインで [Policies] (ポリシー) を選択します。
- [Create policy] (ポリシーの作成) を選び、次に [JSON] タブを選択します。
- ステップ 6 でコピーしたポリシードキュメントを入力し、[Review policy] (ポリシーの確認) を選択します。
- ページの先頭にある赤いダイアログボックスに表示されるエラーメッセージの内容を確認します。エラーメッセージには、ポリシーの検証失敗の詳細な説明が表示されます。
関連情報
IAM JSON ポリシー言語の文法
IAM JSON ポリシー要素の参考資料