前回に引き続き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"
}
]
}
}