설명
GCP KMS Crypto Key의 IAM 정책에 allUsers 또는 allAuthenticatedUsers 같은 광범위한 주체를 포함하면 필요한 범위를 넘어 키 사용 권한이 부여될 수 있습니다. 실제 영향은 부여한 역할에 따라 달라지며, 복호화 권한과 해당 암호문에 대한 접근이 함께 있으면 데이터 기밀성이 손상될 수 있습니다.
키의 IAM 권한은 키 재료를 공개한다는 뜻이 아닙니다. 예제의 roles/cloudkms.cryptoKeyEncrypter는 암호화를 허용하며, 그 자체로 복호화 권한을 부여하지 않습니다. 요청에는 서비스의 인증 요건과 적용되는 정책도 영향을 줍니다.
잠재적 영향
- 의도하지 않은 주체가 허용된 키 작업을 수행할 수 있습니다.
- 과도한 복호화·관리 권한은 민감한 데이터나 키를 사용하는 서비스에 영향을 줄 수 있습니다.
해결 방법
allUsers와 allAuthenticatedUsers에 대한 불필요한 권한을 제거하고, 실제로 키를 사용하는 승인된 주체만 지정하세요. 암호화·복호화·관리 역할을 필요에 따라 분리하고 가능한 한 개별 키 범위로 제한하세요. 정책 변경 시 필요한 서비스 계정의 권한을 유지하고 정상 작업과 미승인 요청의 거부를 확인하세요.
예시
IAM 정책 문서를 생성하는 발췌입니다. 이 문서를 실제 KMS 키에 적용하는 설정은 생략했으며, 예시 사용자 주소는 승인된 실제 주체로 바꾸세요.
변경 전
hcl
data "google_iam_policy" "kms_policy" {
binding {
role = "roles/cloudkms.cryptoKeyEncrypter"
members = ["allUsers"]
}
}
allUsers에 암호화 역할을 부여하는 정책 문서입니다. 이러한 광범위한 주체를 키 정책에 포함하지 마세요.
변경 후
hcl
data "google_iam_policy" "kms_policy" {
binding {
role = "roles/cloudkms.cryptoKeyEncrypter"
members = [
"user:jane@example.com"
]
}
}
암호화 역할의 대상을 지정한 사용자로 제한합니다. 다른 역할이나 상위 정책을 통해 부여된 권한도 함께 검토하세요.