はじめに
- IAMユーザグループにIAMポリシーをアタッチして運用したい
- IAMユーザにはポリシーをアタッチしない
- スイッチロールするIAMロールは制限したい
こんな場合のIAMユーザグループ・IAMロール・IAMポリシーの設定例を紹介します。
IAMユーザーグループの運用
IAMユーザグループは、複数のIAMユーザーにポリシーを効率よく適用するために使用します。
しかし、IAMポリシーでリソースへのアクセス権を定義する際、Principal要素にIAMユーザーグループのARNを指定することはできません。
その代わり、アクセスを許可するユーザーやロールを個別に指定する必要があります。
スイッチロールの基本
スイッチロールとは、一定のIAMユーザーが他のIAMロールを一時的に引き受け、そのロールに設定された権限でアクションを実行できる機能です。
これは、特に異なるAWSアカウント間でリソースへのアクセスを委任する場合に有用です。
スイッチロールの設定例
以下は、他アカウントのIAMロールへスイッチロールを許可するための信頼ポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<IAMユーザグループが存在するアカウントID>:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true" ## MFA必須とする場合
}
}
}
]
}
このポリシーでは、Multi-Factor Authentication(MFA)が有効であることを条件に設定しています。
これは、セキュリティをさらに強化するための一般的な手法です。
ポリシーの明示的な拒否
信頼ポリシーによって権限を与えることができますが、意図せずスイッチロールされることを防ぐためには、Denyポリシーの使用が効果的です。
これは、IAMユーザーグループにアタッチされ、特定のロールへのスイッチを明示的に禁止します。
例えば、ユーザーグループAがアカウントCのIAM Role Cへスイッチロールすることを拒否したい場合、以下のようなDenyポリシーを設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true" ## MFA必須の場合
}
},
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::<アカウントC>:role/<IAM Role C>"
],
"Effect": "Deny"
}
]
}
ユーザーグループ間のポリシー競合
IAMユーザーが複数のIAMユーザーグループに属することは可能ですが、ポリシーが競合すると問題が生じることがあります。
そのため、各ユーザーグループには特定のDenyポリシーを割り当てることで、一貫性を保ち、セキュリティを確保することが推奨されます。

まとめ
AWS IAMの設定は、適切なセキュリティと運用効率のバランスを取る必要があります。
本記事で紹介したようなユーザーグループとスイッチロールのポリシー設定を適切に行うことで、安全かつ柔軟なクラウド環境の運用が可能になります。