説明
iam:PutUserPolicy を持つロールを使う主体は、IAM ユーザーのインラインポリシーを追加・上書きして、その権限を拡大できます。この操作は対象ユーザーの権限を変え、呼び出し元ロール自身の権限を直接増やすものではありません。
ポリシーを変更する権限があっても、対象ユーザーとしてサインインできるわけではありません。影響は、そのユーザーを利用できる経路と、境界、組織ポリシー、明示的な拒否などの制御によって変わります。
想定される影響
- 自動化ロールによる誤った変更で、ユーザーに不要な管理権限が付与されるおそれがあります。
- ユーザーごとの例外が増えると、権限の把握や変更の確認が難しくなる可能性があります。
対処方法
ロールに不要な iam:PutUserPolicy を削除してください。必要な場合は専用の管理ロールと承認手続きを使い、Resource を対象ユーザー ARN に限定してください。ポリシー内容と変更履歴を確認し、正常な作業が成功し、未承認の変更が阻止されることを試験してください。
例
同じロールとインラインポリシーの抜粋です。省略した信頼ポリシーは、実際の構成に別途定義してください。
変更前
hcl
resource "aws_iam_role" "example" {
name = "cosmic"
}
resource "aws_iam_role_policy" "example" {
name = "test_inline_policy"
role = aws_iam_role.example.name
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"iam:PutUserPolicy",
]
Effect = "Allow"
Resource = "*"
},
]
})
}
このロールを使う主体が、ユーザー全体のインラインポリシーを追加・更新できます。
変更後
hcl
resource "aws_iam_role" "example" {
name = "cosmic"
}
resource "aws_iam_role_policy" "example" {
name = "test_inline_policy"
role = aws_iam_role.example.name
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"ec2:Describe*",
]
Effect = "Allow"
Resource = "*"
},
]
})
}
この許可文を EC2 の参照操作に絞ります。他のポリシーに同じユーザーポリシー変更権限が残っていないかも確認してください。