説明
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 委任を維持し、指定したユーザーに列挙したキー使用操作を許可します。列挙した操作も実際の要件に合わせて絞ってください。