最近CloudFormationをいじっているのだけど、いろいろと詰まることが多い。今日はIAMのPolicy作成でつまった。
以下のAWS::IAM::Policy を利用してポリシー作成したらインラインポリシーになってしまった。思いっきり最初の文章にかいてあるのだけど、読まずにさわっていた。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html#cfn-iam-policy-roles
どうやら管理ポリシーとして作成する場合はAWS::IAM::ManagedPolicyを利用するらしい。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html#cfn-iam-managedpolicy-policydocument
インラインポリシーの場合はロール側にVersionがあれば正常とみなされたが、ManagedPolicyはそれ自体にVersionが必須となるので注意。あと、名前もPolicyNameでなくManagedPolicyNameを指定する必要がある。
開発途中で気が付いたのだけど、手元でcfn-lintを利用していて、マネジメントコンソールのエラー表示よりも前者の方が親切なエラーを吐いてくれる。
下のエラーはManagedPolicy のバージョン指定において間違えた文字列を指定した場合のエラーだがcfn-lintの方が間違いが特定しやすい。
cfn-lint
E2507 IAM Policy Version needs to be one of (2012-10-17, 2008-10-17).
マネジメントコンソール
AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument;
明日は今日作成したロールをEC2のインスタンスプロファイルに付与できるように実装を進めたい。