はじめに

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