説明
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 も指定してください。