iam:CreateAccessKey による権限昇格のおそれがある IAM ロール

他の IAM ユーザーのアクセスキー作成権限を、承認済みの管理作業に限定してください。

説明

広範な iam:CreateAccessKey 権限があると、ロールの利用者が他の IAM ユーザーのアクセスキーを発行し、そのユーザーの権限で API を呼び出せる場合があります。発行と使用には、対象ユーザーや実効ポリシーの制限が適用されます。

特に、より強い権限を持つユーザーのキーを作成できると、新たな長期認証情報を通じた権限の悪用につながります。

想定される影響

  • 高権限ユーザーへのなりすまし: 発行したキーで、そのユーザーに許可された操作を行える場合があります。
  • 長期認証情報の生成: キーが長期間残り、継続的に悪用されるおそれがあります。
  • 発見の遅れ: 未承認の発行を通常の管理作業と区別しにくい場合があります。

対処方法

  • キー管理を行わないロールから iam:CreateAccessKey を削除してください。
  • 必要な発行権限を専用管理者と承認済みの対象ユーザーに限定してください。
  • キー作成イベントを監視し、可能な場合はロールによる一時認証情報へ切り替えてください。

例

権限ポリシーの抜粋です。ロールの信頼ポリシーは別途設定してください。

変更前

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:CreateAccessKey",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

変更後

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

resource "aws_iam_role_policy" "example" {
  name = "inline_policy_run_instances"
  role = aws_iam_role.example.name

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

変更後は、同じロールのこのポリシーからキー発行権限を削除し、EC2 の情報取得権限だけを残します。他の関連付けられたポリシーと発行済みキーは別途確認してください。

参考資料