はじめに
IAMユーザを作成する権限を委譲したい。けど、IAM周りの強い権限を与えたくない。
特定のユーザーグループに所属しているIAMのみ作らせることが出来れば良い。
そういった場合、Permissions Boundaryが検討されると思いますが、IAMポリシーのみで似たようなことを実現する方法を教えてもらったので、ここに残します。
TL;DR
こちらのポリシーをIAM管理ユーザーにアタッチしましょう
{
"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)を作成する
作成できました。※ポリシーを何もアタッチしていないので警告が出ていますが気にしないでください
IAM管理ユーザ(testuser)にアタッチするポリシーを作成する
IAM管理ユーザ(testuser)を作成する
既存のポリシーを直接アタッチより、先ほど作成したポリシーをアタッチする
動作確認
特定のユーザーグループ(yu-yama-testgroup)に所属するIAMユーザを作成してみる
続いて特定のユーザーグループ(yu-yama-testgroup)以外に所属するIAMユーザを作成しようとしてみます
エラーが発生し、グループ(Endusers)に所属するIAMユーザーを作成することはできませんでした。いいですね。
続いて適当なポリシーをアタッチしてIAMユーザを作成しようとしてみます
エラーが発生し、適当なポリシーをアタッチしたIAMユーザーを作成することはできませんでした。いいですね。
まとめ
IAMポリシーを使用して特定のユーザーグループに所属するIAMユーザしか作ることができないIAMユーザを作成することができました。
許可されていないポリシー、ユーザグループに所属させようとしてIAMユーザーを作った場合、IAMユーザ自体は作成されてしまうなどやや微妙なところはありますが、必要以上に強い権限を与えずIAM作成を委譲できるので、頭の片隅に置いておくと良いことがあるかもしれません。
こちらの記事が誰かの役に立てば幸いです。