暗号化されていない AWS AMI

EBS ベース AMI の元となるスナップショットを確認し、暗号化されたイメージへ移行してください。

説明

EBS ベース AMI のスナップショットには、OS やアプリケーションのデータが保存されます。未暗号化のスナップショットには保存時暗号化による保護がなく、同じイメージを再利用すると暗号化要件を満たさない構成が広がる可能性があります。

スナップショットを参照する AMI では、そのスナップショットの実際の暗号化状態を確認する必要があります。encrypted の省略だけでは未暗号化とは判断できません。インスタンス起動時の EBS デフォルト暗号化も、既存の AMI スナップショットを遡って暗号化するものではありません。

想定される影響

スナップショットやディスクデータに不正アクセスされた場合、情報漏えいのリスクが高まる可能性があります。保存時暗号化は、AMI の共有権限やインスタンス内部のアクセス制御を代替しません。

対処方法

  • AMI に関連付けられたすべての EBS スナップショットについて、暗号化状態と必要な KMS 権限を確認してください。
  • 既存 AMI を暗号化オプション付きでコピーするか、暗号化済みスナップショットで新しい AMI を登録してください。aws_ami では snapshot_id と encrypted を同時に指定できません。
  • 新しいイメージの起動とアプリケーション動作をテストしてから、デプロイで参照する AMI を切り替えてください。既存インスタンスやスナップショットは自動で暗号化されないため、別途移行と保管を計画してください。

例

AMI 登録設定の抜粋です。snap-xxxxxxxx を実際のスナップショット ID に置き換えてください。指定したルートデバイスで起動でき、例のボリュームサイズである 8 GiB 以下のスナップショットが必要です。

スナップショットを参照

hcl
resource "aws_ami" "example" {
  name                = "terraform-example"
  virtualization_type = "hvm"
  root_device_name    = "/dev/xvda"

  ebs_block_device {
    device_name = "/dev/xvda"
    snapshot_id = "snap-xxxxxxxx"
    volume_size = 8
  }
}

参照先が未暗号化なら、そのスナップショットが AMI に関連付けられます。暗号化属性の省略だけでは元の状態は分かりません。

暗号化済みスナップショットを参照

hcl
resource "aws_ami" "example" {
  name                = "terraform-example"
  virtualization_type = "hvm"
  root_device_name    = "/dev/xvda"

  ebs_block_device {
    device_name = "/dev/xvda"
    snapshot_id = var.encrypted_snapshot_id
    volume_size = 8
  }
}

var.encrypted_snapshot_id に、事前に暗号化したスナップショットの実際の ID を渡してください。AMI 登録時に encrypted = true を追加して既存スナップショットを暗号化する方法はサポートされません。

参考資料