AWS: 開発者グループのユーザ管理者を作る

特定のグループについて、ユーザの追加や削除を行えるAdminよりも下位のユーザー管理者を作りたい。ユーザー管理者グループとして次のような構成のInfraUserManagerGroupを作成する。

  • [UserGroup] InfraUserManagerGroup
    • [Policy(Customer)] InfraUserManagerGroup-SwitchRolePolicy
      • [Role] InfraUserManagerRole
        • [Policy(Customer)] InfraUserManagerRolePolicy

InfraUserManagerRolePolicyではGroup=Infraのタグを持つユーザーに関する操作とInfraグループ、リードオンリーグループへのユーザ追加、削除のみを行えるようにする。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateUser",
                "iam:CreateLoginProfile",
                "iam:TagUser",
                "iam:DeleteUser",
                "iam:UpdateUser"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Group": "Infra"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AddUserToGroup",
                "iam:RemoveUserFromGroup"
            ],
            "Resource": [
                "arn:aws:iam::*:group/Infra*",
                "arn:aws:iam::*:group/ReadOnlyUserGroup"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:List*"
            ],
            "Resource": "*"
        }
    ]
}

InfraUserManagerGroup-SwitchRolePolicyも作成しておく

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/InfraUserManagerRole"
            ]
        }
    ]
}

InfraUserGroupに所属するためにはGroup=Infraのタグが必要などの制限は行っていないため、別の管理者が作成したGroup=Appなどのタグを持つユーザーをInfraUserGroupに所属させることは可能となる。厳密な管理をする場合はもうちょっと考えないとダメかも。

ユーザー作成時に許可の無いグループへ所属させようとした場合は次のようなエラーになる。

また、Group=Infraのタグをつけずにユーザーを作成しようとした場合は次のようなエラーとなる。

ユーザーに直接ポリシーを紐づけようとすると次のようなエラーとなる。