【AWS】 IAMで特権ポリシーを操作(アタッチ、デタッチ)できないように制御する

一つのAWSアカウントを複数の部署やチームで共有している場合、権限制御をするために、IAMの管理が必須となります。
今回は、AWがマネージドポリシーとして用意している特権相当のポリシーについて、権限制御するようなIAMポリシーを作成しました。

権限制御をする際にすべてのIAMの操作を制御してしまうとIAM ロールなどの作成ができず開発スピードが落ちてしまうことがあるので、そういう場面で特権のみ制御したIAMの払い出しをできると思います。

やったこと

このIAMポリシーをアタッチしたIAMリソースは、特権IAMポリシーに関する操作が拒否される。

  • 制御アクション
    • IAM User への特権IAMポリシーのアタッチ、デタッチ
    • IAM Role への特権IAMポリシーのアタッチ、デタッチ
    • IAM Group への特権IAMポリシーのアタッチ、デタッチ
  • 制御対象特権IAMポリシー
    • AdministratorAccess
    • PowerUserAccess

IAM Policy

以下のポリシーを制御したいIAM User、Group、Roleのいずれかにアタッチしてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LimitedAttachmentPermissions",
            "Effect": "Deny",
            "Action": [
                "iam:DetachRolePolicy",
                "iam:AttachGroupPolicy",
                "iam:AttachUserPolicy",
                "iam:AttachRolePolicy",
                "iam:DetachGroupPolicy",
                "iam:DetachUserPolicy"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "iam:PolicyArn": [
                        "arn:aws:iam::aws:policy/AdministratorAccess",
                        "arn:aws:iam::aws:policy/PowerUserAccess"
                    ]
                }
            }
        }
    ]
}

テスト

IAM ロールに「PowerUserAccess」をアタッチしようとすると以下のように権限エラーとなります。

f:id:ykoomaru:20191008075157p:plain

最後に

予めアタッチを許可するIAMポリシーが決まっている場合は、今回 "Effect": "Deny" とした箇所を "Effect": "Allow" に変更することで、特定のIAMポリシーのみアタッチさせるよう制御できます。
開発スピードを失わせないようなIAM制御をすることが大切ですね!