説明
ロールに広い iam:AttachRolePolicy を許可すると、そのロールを使う主体が同じロールや他のロールに強い管理ポリシーをアタッチできる場合があります。許可対象と利用できるロールによっては、権限が拡大するおそれがあります。
アタッチしても、明示的な拒否、アクセス許可の境界、組織ポリシーを自動的に回避できるわけではありません。他のロールを使うには、その信頼設定と呼び出し元の権限要件も満たす必要があります。
想定される影響
- 使用中のロールに不要な管理権限が追加される可能性があります。
- 共有ロールの変更は、複数のサービスやユーザーセッションに影響することがあります。
対処方法
不要な iam:AttachRolePolicy を削除してください。管理が必要な場合は、Resource の対象ロール ARN と iam:PolicyARN 条件の承認済みポリシーで制限してください。自身の権限を変更できる範囲と他の制限を確認し、正常な管理操作と未承認のアタッチの拒否を確認してください。
例
同じロールのインラインポリシーを変更する抜粋です。省略した信頼ポリシーは、実際のデプロイ構成に別途含めてください。
変更前
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:AttachRolePolicy",
]
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 の参照操作に置き換えます。他のポリシーから得ているアタッチ権限も確認してください。