IAM ロールの iam:AttachRolePolicy 権限の確認

ロールが自身や他のロールに付与できる管理ポリシーを制限してください。

説明

ロールに広い 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 の参照操作に置き換えます。他のポリシーから得ているアタッチ権限も確認してください。

参考資料