説明
運用 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
}
ストレージ暗号化を要求します。既存インスタンスにこの差分を適用する前に、データ移行と置き換えの計画を確認してください。