DynamoDB テーブルの暗号化キー設定の確認

DynamoDB の既定の暗号化と、必要な KMS キーの管理方法を確認してください。

説明

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

参考資料