カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

インラインポリシーがアタッチされたIAMグループをCloudformationで作成する

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


感想及び所感

インラインポリシーを使う運用が良いかどうかは別として試してみました。

佐々木さんのこの本にデザインパターンとか書いてあるので、IAMをまともに設計するのが初めてという方にはお勧めです。
booth.pm