설명
KMS 키 정책에서 필요 이상의 주체나 작업을 허용하면 데이터 복호화나 키 관리 권한이 과도하게 부여될 수 있습니다. 키 사용 권한과 관리 권한을 구분하고 IAM 정책·권한 부여와 함께 실제 접근을 확인하세요.
키 정책을 생략하면 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 권한 위임을 유지하고 지정한 사용자에게 열거한 키 사용 작업을 허용합니다. 열거한 작업도 실제 요구에 맞게 줄여야 합니다.