설명
DynamoDB에는 애플리케이션 상태, 사용자 데이터와 세션 정보가 저장될 수 있습니다. DynamoDB 테이블은 항상 저장 시 암호화되며 기본적으로 AWS 소유 키를 사용합니다.
Terraform에서 server_side_encryption.enabled = false는 암호화를 끄는 설정이 아니라 AWS 소유 키를 선택합니다. true이면서 kms_key_arn이 없으면 AWS 관리형 키를 사용하고, 고객 관리형 키는 ARN으로 별도 지정합니다.
잠재적 영향
기본 키가 조직의 키 정책이나 수명주기 통제 요구를 충족하지 못할 수 있습니다. 필요한 키 권한을 잃으면 데이터 접근이나 복구에 영향을 줄 수 있습니다. 암호화가 테이블과 스트림의 접근 권한을 대신하지는 않습니다.
해결 방법
- 요구사항에 따라 AWS 소유 키, AWS 관리형 키 또는 고객 관리형 키를 선택하세요.
- 별도 고객 관리형 키가 필요하면
enabled = true와 실제kms_key_arn을 지정하고 필요한 권한을 유지하세요. - 적용 후 실제 사용 키와 정상적인 데이터 접근을 확인하세요. 기존 백업 복구에 필요한 키도 사용할 수 있게 유지하세요.
예시
두 예시는 모두 암호화된 테이블을 생성하며 사용하는 키 관리 방식이 다릅니다.
AWS 소유 키 사용
hcl
resource "aws_dynamodb_table" "orders_table" {
name = "example"
hash_key = "TestTableHashKey"
billing_mode = "PAY_PER_REQUEST"
stream_enabled = true
stream_view_type = "NEW_AND_OLD_IMAGES"
attribute {
name = "TestTableHashKey"
type = "S"
}
server_side_encryption {
enabled = false
}
}
AWS 소유 키로 암호화합니다.
AWS 관리형 키 사용
hcl
resource "aws_dynamodb_table" "orders_table" {
name = "example"
hash_key = "TestTableHashKey"
billing_mode = "PAY_PER_REQUEST"
stream_enabled = true
stream_view_type = "NEW_AND_OLD_IMAGES"
attribute {
name = "TestTableHashKey"
type = "S"
}
server_side_encryption {
enabled = true
}
}
기본 AWS 관리형 KMS 키를 선택합니다. 조직이 키 정책을 직접 관리해야 한다면 고객 관리형 키 ARN도 지정하세요.