前回に引き続きIAMグループをCloudformationで作成します。
今回は前回の管理ポリシーに追加でインラインポリシーをアタッチします。
作成物は以下に置いています。
github.com
実施作業
yamlファイル作成
以下の公式ドキュメントを参考に、請求権限を拒否するインラインポリシーを追加します。
Billing and Cost Management でのアイデンティティベースのポリシー (IAM ポリシー) の使用 - AWS Billing and Cost Management
前回のyamlファイルにPolicies以下の設定を追記します。
AWSTemplateFormatVersion: "2010-09-09" Resources: IAMGroup: Type: AWS::IAM::Group Properties: GroupName: TestIAMGroup ManagedPolicyArns: - arn:aws:iam::aws:policy/AdministratorAccess Policies: - PolicyName: BillingDenyPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Deny Action: - AWS-portal:* - budgets:* - cur:* - ce:* - pricing:* - purchase-orders:* - awsbillingconsole:* Resource: *
修正後デプロイ
前回作成したデプロイバッチを使用して修正後のyamlファイルをデプロイします。
引数はcreateからupdateに変更しています。
$ .\deplay_cfn.ps1 update XXXXXXXXXXXXX iam-cfn default aws cloudformation update-stack --template-body file://iam-cfn.yaml --role-arn arn:aws:iam::XXXXXXXXXXXXX :role/CloudformationExecuteRole --capabilities CAPABILITY_NAMED_IAM --profile default --stack-name iam-cfn { "StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXXX :stack/iam-cfn/3ec67e00-4fdb-11eb-9447-0a4c2e79e972" } True
「UPDATE_COMPLETE」となっていることが確認できます。
> aws cloudformation list-stacks { "StackSummaries": [ { "StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXXX:stack/iam-cfn/3ec67e00-4fdb-11eb-9447-0a4c2e79e972", "StackName": "iam-cfn", "CreationTime": "2021-01-06T04:54:23.558000+00:00", "LastUpdatedTime": "2021-01-06T05:57:12.793000+00:00", "StackStatus": "UPDATE_COMPLETE", "DriftInformation": { "StackDriftStatus": "NOT_CHECKED" } },
更新結果確認
前回使用した「aws iam list-attached-group-policies」コマンドはアタッチされている管理ポリシーを確認するためのコマンドのため、IAMグループにアタッチされているインラインポリシーを確認するときは「aws iam list-group-policies 」を使用します。
$ aws iam list-group-policies --group-name TestIAMGroup { "PolicyNames": [ "BillingDenyPolicy" ] }
以下のコマンドでIAMグループにアタッチされているインラインポリシーの中身を確認することができます。
yamlファイルで記載した通りに設定されていることが確認できました。
$ aws iam get-group-policy --group-name TestIAMGroup --policy-name BillingDenyPolicy { "GroupName": "TestIAMGroup", "PolicyName": "BillingDenyPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-portal:*", "budgets:*", "cur:*", "ce:*", "pricing:*", "purchase-orders:*", "awsbillingconsole:*" ], "Resource": "*", "Effect": "Deny" } ] } }