AWS 特定のユーザーグループに所属するIAMユーザしか作ることができないIAMユーザを作成する

## はじめに

![20221220_qiita.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/2f33385f-8666-d83a-0bd7-0758c1958faf.png)

IAMユーザを作成する権限を委譲したい。けど、IAM周りの強い権限を与えたくない。
**特定のユーザーグループに所属しているIAMのみ作らせる**ことが出来れば良い。
そういった場合、[Permissions Boundary](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_boundaries.html)が検討されると思いますが、IAMポリシーのみで似たようなことを実現する方法を教えてもらったので、ここに残します。

## TL;DR

こちらのポリシーをIAM管理ユーザーにアタッチしましょう

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:AttachUserPolicy",
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "iam:PolicyARN": "arn:aws:iam::aws:policy/IAMUserChangePassword"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateLoginProfile",
                "iam:GetAccountPasswordPolicy",
                "iam:List*",
                "iam:GetPolicy",
                "iam:GetAccessKeyLastUsed",
                "iam:CreateUser",
                "iam:GetGroup",
                "iam:TagUser",
                "iam:GetLoginProfile",
                "iam:GetAccountSummary"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AddUserToGroup",
                "iam:RemoveUserFromGroup"
            ],
            "Resource": "所属させることが出来るユーザーグループのARN"
        }
    ]
}
```

> "Action": "iam:AttachUserPolicy" ブロック

ユーザー作成時に "パスワードのリセットが必要" を有効にするを選択した場合、IAMUserChangePassword のポリシーが必要となるため定義

## やってみる

特定のユーザーグループ(yu-yama-testgroup)に所属させるIAMユーザのみを作成できるポリシー(yu-yama-testpolicy)をアタッチしたIAM管理ユーザ(testuser)を作成する

### 特定のユーザーグループ(yu-yama-testgroup)を作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/455298d2-0e7a-67ed-59ff-cedeaecd9c43.png)

作成できました。※ポリシーを何もアタッチしていないので警告が出ていますが気にしないでください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/dcbe7eb7-b339-a065-35a6-52eaf52f5696.png)

### IAM管理ユーザ(testuser)にアタッチするポリシーを作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/c6865719-ecb8-1f31-8a6a-f438e52ddf37.png)

### IAM管理ユーザ(testuser)を作成する

ユーザーを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/6c7a3724-f56c-355d-1881-0074f1e2e6e8.png)

ユーザー名を設定し、次のステップ：アクセス権限へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/26723223-0b4f-11b6-b66b-59cd09cfe7d5.png)

既存のポリシーを直接アタッチより、先ほど作成したポリシーをアタッチする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/34ae57ce-c43c-e5a2-b512-76772400d442.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/82b73df3-fdc4-42cf-52a8-ff07a11a8975.png)

ユーザーを作成できました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/57cd289e-c012-d276-bfdf-dda989c7844c.png)

## 動作確認

作成したIAM管理ユーザー(testuser)でサインイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/ce7f331f-c8d8-7e95-9717-455bcf2ffc83.png)

特定のユーザーグループ(yu-yama-testgroup)に所属するIAMユーザを作成してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/92b782ca-ff39-b2cb-7969-69197463fc2c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/f869cec3-a20c-4919-6277-7edb5226871f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/09db3855-7bca-ee02-fea6-94e709bae47b.png)

作成できましたね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/22edc18b-109f-c2b3-3536-12ad925dcbb9.png)

---

続いて特定のユーザーグループ(yu-yama-testgroup)以外に所属するIAMユーザを作成しようとしてみます

許可されていないグループ(Endusers)を選択し...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/3cdf244e-af55-3a7a-464b-12f8bbb46872.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/307891c8-d379-f1f2-8cc2-2d6544878e38.png)

エラーが発生し、グループ(Endusers)に所属するIAMユーザーを作成することはできませんでした。いいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/48d73419-b881-fece-b346-8c960c0b9f22.png)

---

続いて適当なポリシーをアタッチしてIAMユーザを作成しようとしてみます

AdministratorAccessを選択し...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/f5a55b11-8065-2595-2911-6bece31fb15e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/310a5391-4352-b3a6-60c7-c5b55ff75c8b.png)

エラーが発生し、適当なポリシーをアタッチしたIAMユーザーを作成することはできませんでした。いいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534812/60bc3b20-5364-c34b-a0d0-db5b52c8c00d.png)

## まとめ

IAMポリシーを使用して特定のユーザーグループに所属するIAMユーザしか作ることができないIAMユーザを作成することができました。
許可されていないポリシー、ユーザグループに所属させようとしてIAMユーザーを作った場合、IAMユーザ自体は作成されてしまうなどやや微妙なところはありますが、必要以上に強い権限を与えずIAM作成を委譲できるので、頭の片隅に置いておくと良いことがあるかもしれません。
こちらの記事が誰かの役に立てば幸いです。