⛳
【IAM】スイッチロール元のユーザをスイッチロール先で制御する
背景
- スイッチロール先のアカウント側にてスイッチ元のユーザごとに権限を制御したいこと、ありますよね。一般的にはロールを分割してしまえばいいかと思います。
- ただ今回はスイッチするロールは共通で、ロールにアタッチするポリシーにてスイッチ元のユーザを条件分岐させたいと思います。
- 具体的に利用できるシチュエーションは限られますが、例えば
- 一括してグループに紐づくユーザ全てを許可している。
- そんな時に、一部のユーザにのみ特定の上位権限(IAMFullAccess)など上位権限をつけたい場合。
やりたいこと
- 上図のように
- AccoutA側
- User1と2には同じロールにスイッチする権限をアタッチしてある
- AccoutB側
- ロールにて以下のように権限のアタッチをする
- Policy a:User1のみが使えるように制限
- Policy b:条件なし(User1,2が使える)
- ロールにて以下のように権限のアタッチをする
- AccoutA側
方法
- Policy a側で以下のようなCondition文を実装する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "IamAdminOnlyUser1",
"Effect": "Allow",
"Action": "iam:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:userid": "<ロールXのユーザID>:<User1>"
}
}
}
]
}
- ユーザIDはAROAxxxxxxxxxxxxで表記されるロール固有ID。
- ロールにスイッチしてaws sts get-caller-identityを実行すると確認できます。
- 正確には前提としてIAMロールセッション名にユーザ名を強制することが必要です
その他トラシュー
- 以下の方法では実現できませんでした。
- スイッチ元のPrincipalを指定する方法
- 同じ方法でやっている方がいました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "IamAdminOnlyUser1",
"Effect": "Allow",
"Action": "iam:*",
"Resource": "*",
"Condition": {
"StringEquals": {"aws:PrincipalArn": "arn:aws:sts::XXXXXXXXXX:assumed-role/<role-name>/<User1Name>"}
}
}
]
}
- ArnEqualsで実行主体のArnを指定する方法
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "IamAdminOnlyUser1",
"Effect": "Allow",
"Action": "iam:*",
"Resource": "*",
"Condition": {
"ArnEquals": {"aws:PrincipalArn": "arn:aws:sts::XXXXXXXXX:assumed-role/<role-name>/fujiidik/<User1Name>"}
}
}
]
}
Discussion