설명
EBS 기반 AMI의 스냅샷에는 운영체제와 애플리케이션 데이터가 저장됩니다. 비암호화 스냅샷에는 저장 암호화 보호가 없으며, 같은 이미지를 여러 배포에 재사용하면 암호화 기준을 충족하지 못하는 구성이 확산될 수 있습니다.
스냅샷을 참조하는 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를 덧붙여 기존 스냅샷을 변환하는 방식은 지원되지 않습니다.