管理者権限を与えつつIAMユーザーまわりの操作だけ禁止するIAMポリシー

2021.03.29

はじめに

こんにちは。大阪オフィスの林です。

タイトルの通りなのですが本エントリは、AWS環境で各種リソースやサービスに対する管理者権限を与えつつも、IAMユーザーの作成や変更に関する操作を禁じたいというピンポイントのユースケースにお答えする内容となっています。 デフォルトのポリシーでIAMReadOnlyAccessもありますが、ロールやポリシーの操作にも制限が掛かってしまうので、IAMユーザーの作成、変更に対する操作だけを禁止したいというユースケースに本エントリを参考にして頂ければと思います。

やってみた

ポリシー作成

IAMのダッシュボード左メニューから「ポリシー」-「ポリシーの作成」を選択します。

「JSON」タブから下記のJOSNをコピペして次のステップに進みます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iam:AddUserToGroup",
                "iam:RemoveUserFromGroup",
                "iam:UpdateUser",
                "iam:PutUserPermissionsBoundary",
                "iam:PutUserPolicy",
                "iam:DeleteUserPolicy",
                "iam:AttachUserPolicy",
                "iam:DeleteUser",
                "iam:DeleteUserPermissionsBoundary",
                "iam:DetachUserPolicy",
                "iam:CreateUser"
            ],
            "Resource": "*"
        }
    ]
}

必要に応じてタグを設定し次のステップに進みます。

任意のポリシー名を入力後、「ポリシーの作成」を選択します。

作成したポリシーを割り当てたユーザーやロールから、ポリシー自体を変更されてしまうと元も子もないので、作成したポリシーの改変も抑止しておきます。作成したポリシーを選択しARNを控えておきます。その後「ポリシーの編集」を選択します。

下記のセクションを追加して「ポリシーの確認」を選択します。※「Resource」の中盤12桁の数字はAWSアカウントIDで、末尾はポリシー名です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iam:AddUserToGroup",
                "iam:RemoveUserFromGroup",
                "iam:UpdateUser",
                "iam:PutUserPermissionsBoundary",
                "iam:PutUserPolicy",
                "iam:DeleteUserPolicy",
                "iam:AttachUserPolicy",
                "iam:DeleteUser",
                "iam:DeleteUserPermissionsBoundary",
                "iam:DetachUserPolicy",
                "iam:CreateUser"
            ],
            "Resource": "*"
        }, //下記セクション追加時にカンマも忘れずに。
        {
            "Effect": "Deny",
            "Action": [
                "iam:CreatePolicyVersion"
            ],
            "Resource": "arn:aws:iam::123456789012:policy/not-iam-user-operation" 
            //「123456789012」はAWSアカウントID12桁です。
            //「not-iam-user-operation」はポリシー名です。
        }
    ]
}

「変更の保存」を選択します。

動作確認

上記で作成したIAMポリシーをIAMユーザーもしくはIAMロールに割り当てて動作を確認していきます。

IAMユーザーを作成してみる

上記で作成したIAMポリシーを割り当てたユーザー/ロールで、IAMユーザーを作成してみます。

権限がないため、IAMユーザーの作成が出来ませんでした。

IAMユーザーを削除してみる

本エントリ冒頭で作成したIAMポリシーを割り当てたユーザー/ロールで、IAMユーザーを削除してみます。

権限がないため、IAMユーザーの削除が出来ませんでした。

ポリシーを追加してみる

本エントリ冒頭で作成したIAMポリシーを割り当てたユーザー/ロールで、IAMユーザーにポリシーをアタッチしてみます。

権限がないため、IAMユーザーへのポリシー追加が出来ませんでした。

ポリシーを変更してみる

本エントリ冒頭で作成したIAMポリシーを割り当てたユーザー/ロールで、割り当てられているポリシー自体の変更をしてみます。

「Deny」のポリシーを外してみます。

権限がないため、ポリシーの改変が出来ませんでした。なお、割り当てられているポリシーに対して変更を抑止しているので、他のポリシーを新規に作成したり、新規で作成したポリシーを変更することは可能です。

ポリシーを削除してみる

本エントリ冒頭で作成したIAMポリシーを割り当てたユーザー/ロールで、IAMユーザーに割り当てられているポリシーを削除してみます。

権限がないため、IAMユーザーからポリシーの削除が出来ませんでした。

まとめ

小ネタのようなピンポイントなエントリとなりましたが、要件にフィットする方の参考になりましたら幸いです!

以上、大阪オフィスの林がお送りしました!