KMS キーのアクセスポリシーの確認

キー使用権限を制限し、管理できる経路を維持してください。

説明

KMS キーポリシーで必要以上の主体や操作を許可すると、復号やキー管理の権限が過剰になる可能性があります。キーの使用と管理を分離し、IAM ポリシーや grants と合わせて実際のアクセスを確認してください。

キーポリシーを省略すると、AWS はアカウントが IAM を通じて権限を委任できる既定ポリシーを適用します。これはすべての主体への公開許可とは異なります。キーポリシーの Resource: "*" は、そのポリシーを関連付けたキーを指します。

想定される影響

  • 不要な復号権限によって、そのキーで保護したデータが漏えいするおそれがあります。
  • 過剰なポリシー変更・キー無効化権限や、管理権限の誤った削除により、データアクセスや復旧が停止する可能性があります。

対処方法

  • キー利用者を必要な主体と暗号操作に限定し、管理権限は信頼できる別の経路で統制してください。
  • 実際のサービスに合う条件を検討し、キーポリシー、IAM ポリシー、grants を合わせて確認してください。
  • 変更前にキー管理者とデプロイ主体の管理権限を維持し、必要な暗号化・復号と不要なアクセスの拒否をテストしてください。

例

キーポリシーの比較です。例示アカウント ID とユーザー ARN を実際に承認された値に置き換えてください。アカウントの IAM 委任文は管理経路を維持するため、それを使う IAM ポリシーも最小権限で管理してください。

変更前

hcl
resource "aws_kms_key" "kms_key" {
  description             = "KMS key 1"
  deletion_window_in_days = 10

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

ワイルドカードの主体に kms:* を許可します。実際のリクエストに適用される他の権限制御も確認し、このような広範な許可は削除・縮小してください。

変更後

hcl
resource "aws_kms_key" "kms_key" {
  description             = "KMS key 1"
  deletion_window_in_days = 10

  policy = <<POLICY
  {
    "Version": "2012-10-17",
    "Statement":[
      {
        "Sid": "EnableAccountIAMPermissions",
        "Effect": "Allow",
        "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
        "Action": "kms:*",
        "Resource": "*"
      },
      {
        "Effect":"Allow",
        "Principal": {"AWS": [
          "arn:aws:iam::111122223333:user/CMKUser"
        ]},
        "Action": [
          "kms:Encrypt",
          "kms:Decrypt",
          "kms:ReEncrypt*",
          "kms:GenerateDataKey*",
          "kms:DescribeKey"
        ],
        "Resource":"*"
      }
    ]
  }
  POLICY
}

アカウントの IAM 委任を維持し、指定したユーザーに列挙したキー使用操作を許可します。列挙した操作も実際の要件に合わせて絞ってください。

参考資料