説明
KMSキーポリシーで不要な主体に復号やキー管理の権限を与えると、データ保護やキーの可用性に影響する可能性があります。キーの利用と管理を分け、実際のキーポリシー、IAM権限、KMSグラントを併せて確認してください。
キーポリシーのResource: "*"は、すべてのキーではなく、そのポリシーを関連付けたキーを表します。APIでポリシーを省略して新しいキーを作ると、所有アカウントがIAMポリシーで権限を委任できるデフォルトポリシーが適用されます。ワイルドカードを使うという理由だけで、この委任や必要な管理権限を削除しないでください。
想定される影響
- 不要な復号・管理権限が実際に付与されると、データへのアクセスが広がったり、キーを使うサービスが中断したりする可能性があります。
- 必要な管理権限を削除すると、以後キーポリシーを変更できなくなる場合があります。形式的に条件を追加するだけではアクセスを制限できません。
対処方法
- 実際のポリシーと必要なユーザー・ロール・サービスを確認し、利用と管理の権限をそれぞれ最小限にしてください。
amazon.aws11.4.0では、既存キーの管理時にポリシーを省略すると現在のポリシーが維持されます。 - 必要な主体・操作と有効な条件にアクセスを限定してください。
kms:CallerAccountは要求を開始したアカウント、kms:ViaServiceは主体に代わって要求する対応AWSサービスを制限します。実際のアカウント、リージョン、サービス経路に合わせて許可・拒否をテストしてください。 - 今後
kms:PutKeyPolicyを呼び出すための管理経路を維持し、ロックアウト安全性チェックを回避しないでください。変更後にキーの管理、復旧、必要なサービスアクセスを確認してください。
例
my-kms-keyは実際のエイリアスに置き換えてください。変更後のkey_account_idはキーの所有アカウント、aws_regionはEC2/EBSがキーを使うリージョンです。既存ポリシーの必要なステートメントを残し、デプロイ主体がIAM権限を通じて引き続きポリシーを管理できることを適用前に確認してください。
変更前
yaml
- name: Update IAM policy on an existing KMS key
amazon.aws.kms_key:
alias: my-kms-key
policy:
Version: "2012-10-17"
Id: auto-ebs-2
Statement:
- Action:
- "kms:*"
Effect: Allow
Principal:
AWS: "*"
Resource: "*"
Sid: Allow access through EBS for all principals
state: present
アカウントやサービスの条件を設けず、主体と操作を広く許可しています。実際に適用されるほかの制御も確認する必要があります。
変更後
yaml
- name: Update IAM policy on an existing KMS key
amazon.aws.kms_key:
alias: my-kms-key
policy: |
{
"Id": "auto-ebs-2",
"Statement": [
{
"Sid": "EnableIAMUserPermissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::{{ key_account_id }}:root"},
"Action": "kms:*",
"Resource": "*"
},
{
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:CreateGrant",
"kms:DescribeKey"
],
"Condition": {
"StringEquals": {
"kms:CallerAccount": "{{ key_account_id }}",
"kms:ViaService": "ec2.{{ aws_region }}.amazonaws.com"
}
},
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Resource": "*",
"Sid": "Allow controlled access through EBS"
}
],
"Version": "2012-10-17"
}
state: present
最初のステートメントは、所有アカウントのIAMポリシーによる委任を維持します。二つ目は、指定アカウントのEC2/EBSを経由する利用に限定します。必要な利用・管理権限と、既存ポリシーのほかのステートメントを併せて確認してください。