IAM ポリシーの広すぎる管理権限の確認

IAM 権限を、業務に必要な操作とリソースに限定してください。

説明

全リソースに Action: * を許可する IAM ポリシーは、サービス全体に非常に広い権限を与える可能性があります。iam:* は IAM 管理操作全体を表し、悪用されると権限拡大につながりますが、それ自体が全 AWS サービスの操作ではありません。

実際の権限には、明示的な拒否、アクセス許可の境界、組織ポリシーなどの制限も適用されます。

想定される影響

  • 過剰な権限の悪用は、リソースの変更・削除や情報漏えいにつながるおそれがあります。
  • IAM 管理権限が悪用されると、信頼する主体やポリシーの変更によって被害が広がる可能性があります。

対処方法

  • 全操作の許可を、業務に必要な操作に絞ってください。
  • リソース単位の制限に対応する操作は必要な ARN に限定し、Resource: * が必要な操作は別のステートメントに分けてください。
  • 管理者権限は承認済みの専用ロールで管理し、変更後も必要な操作が成功して未承認の操作が拒否されることを確認してください。

例

同じロールのインラインポリシーをログストリームへの書き込みに絞る抜粋です。ロールとロググループは別途用意し、ARN のリージョン・アカウント・グループ名を実際の値に置き換えてください。API Gateway のロギング設定全体は別途確認してください。

変更前

hcl
resource "aws_iam_role_policy" "example" {
  name = "apigateway-cloudwatch-logging"
  role = aws_iam_role.apigateway_cloudwatch_logging.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["*"],
      "Resource": "*"
    }
  ]
}
EOF
}

すべての操作とリソースへの広い許可を追加します。他の制御が適用されても、不要な権限は減らしてください。

変更後

hcl
resource "aws_iam_role_policy" "example" {
  name = "apigateway-cloudwatch-logging"
  role = aws_iam_role.apigateway_cloudwatch_logging.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["logs:CreateLogStream", "logs:PutLogEvents"],
      "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:/aws/apigateway/example:log-stream:*"
    }
  ]
}
EOF
}

指定ロググループでのストリーム作成とイベント記録だけを許可します。必要なログ参照・設定権限は別途確認してください。

参考資料