설명
KMS 키 정책이 필요하지 않은 주체에게 복호화나 키 관리 권한을 허용하면 데이터 보호와 키 가용성에 영향을 줄 수 있습니다. 필요한 키 사용 작업과 관리 작업을 구분하고 실제 정책, IAM 권한과 KMS 권한 부여(grant)를 함께 검토하세요.
키 정책의 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 경유 사용으로 제한합니다. 필요한 사용·관리 권한과 기존 정책의 다른 문을 함께 검토하세요.