IAM ユーザーの iam:PutRolePolicy 権限の確認

ユーザーが変更できるロールのインラインポリシーを必要な対象に限定してください。

説明

IAM ユーザーが iam:PutRolePolicy でロールのインラインポリシーを追加・上書きすると、そのロールを使うサービスやセッションの権限が拡大する可能性があります。ユーザーがロールを引き受けるか、ロールを使うワークロードを制御できれば、拡大した権限を悪用できるおそれがあります。

ポリシーの編集は、ロールの信頼ポリシーを変更する権限や利用権限を得ることとは別です。境界、組織ポリシー、明示的な拒否も実際の操作を制限する場合があります。

想定される影響

  • アプリケーションの実行ロールが、必要以上のリソースにアクセスできる可能性があります。
  • 一つのロールの変更が、複数のサービスインスタンスの権限に影響するおそれがあります。

対処方法

一般ユーザーに不要な iam:PutRolePolicy を削除してください。必要な変更は承認済みのデプロイ用ロールや管理ロールで行い、Resource を対象ロール ARN に限定してください。ポリシー内容とロールを使う経路を確認し、正常な作業が成功し、未承認の変更が阻止されることを確認してください。

例

同じユーザーとインラインポリシーの比較です。別の管理ポリシーアタッチリソースを追加する必要はありません。

変更前

hcl
resource "aws_iam_user" "example" {
  name = "cosmic"
}

resource "aws_iam_user_policy" "example" {
  name = "test_inline_policy"
  user = aws_iam_user.example.name

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "iam:PutRolePolicy",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

ユーザーが、ロール全体のインラインポリシーを追加・更新できます。

変更後

hcl
resource "aws_iam_user" "example" {
  name = "cosmic"
}

resource "aws_iam_user_policy" "example" {
  name = "test_inline_policy"
  user = aws_iam_user.example.name

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "ec2:Describe*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

この許可文には EC2 の参照操作だけを残します。他のポリシーの変更権限と不要な参照権限も確認してください。

参考資料