ストレージ暗号化がない AWS DB インスタンス

RDS インスタンスのストレージ暗号化を確認し、既存データの安全な移行を計画してください。

説明

運用 DB にはアプリケーションの中核となるデータや顧客情報が保存されます。RDS のストレージ暗号化はデータ、ログ、自動バックアップ、スナップショットを保護するため、実際のインスタンスの暗号化状態を確認してください。

暗号化はデータベースの権限やネットワークのアクセス制御の代わりにはなりません。復元や複製で作成するインスタンスでは、元のデータの暗号化と作成方法も確認してください。

想定される影響

実際に暗号化されていないストレージやバックアップを不正に取得されると、機密情報が漏えいするおそれがあります。組織のデータベース暗号化基準を満たせない場合もあります。

対処方法

  • 新規インスタンスに storage_encrypted = true を明示し、独自のキー管理が必要なら適切な kms_key_id も指定してください。
  • 既存の非暗号化インスタンスは、暗号化したスナップショットのコピーから復元して移行してください。フラグの変更だけで既存ストレージが暗号化されるわけではありません。
  • Terraform の置き換え、データの整合性、接続先の切り替えを検討し、実際の DB とスナップショットの暗号化、KMS 権限を確認してください。

例

新規 MySQL インスタンス設定の抜粋です。対象リージョンでエンジンバージョンとインスタンスの組み合わせがサポートされるか確認してください。パスワードは安全に供給して Terraform の状態を保護し、ネットワークとバックアップは別途構成してください。

変更前

hcl
resource "aws_db_instance" "db_instance" {
  allocated_storage = 20
  storage_type      = "gp2"
  engine            = "mysql"
  engine_version    = "5.7"
  instance_class    = "db.t2.micro"
  db_name           = "mydb"
  username          = "foo"
  password          = var.db_password
  storage_encrypted = false
}

新規インスタンスのストレージ暗号化を有効にしていません。

変更後

hcl
resource "aws_db_instance" "db_instance" {
  allocated_storage = 20
  storage_type      = "gp2"
  engine            = "mysql"
  engine_version    = "5.7"
  instance_class    = "db.t2.micro"
  db_name           = "mydb"
  username          = "foo"
  password          = var.db_password
  storage_encrypted = true
}

ストレージ暗号化を要求します。既存インスタンスにこの差分を適用する前に、データ移行と置き換えの計画を確認してください。

参考資料