설명
S3 객체에는 설정 파일, 백업, 정적 자산 등 보호해야 할 데이터가 저장될 수 있습니다. 객체에 실제 적용된 암호화 방식과 키가 조직의 요구사항에 맞는지 확인하세요.
현재 새 S3 객체는 기본적으로 서버 측 암호화를 사용합니다. 업로드에 server_side_encryption을 명시하지 않으면 버킷의 기본 암호화가 적용되므로, 이 옵션의 생략만으로 비암호화라고 볼 수 없습니다. 명시적인 업로드 암호화 방식은 버킷 기본값과 다를 수 있습니다.
잠재적 영향
KMS 키 사용이나 키 통제가 필요한 환경에서는 기본 AES256만으로 요구사항을 충족하지 못할 수 있습니다. 이전의 비암호화 객체는 기본 설정을 바꾸어도 자동으로 암호화되지 않습니다. 암호화는 객체 읽기 권한과 공개 접근 통제를 대신하지 않습니다.
해결 방법
- 버킷 기본 암호화와 실제 객체의 암호화 방식·키를 함께 확인하세요.
- 조직 기준에 따라
AES256또는aws:kms와 필요한 키를 사용하세요. KMS가 필요한 버킷에AES256을 명시해 요구사항을 우회하지 않도록 업로드 정책도 검토하세요. - 기존 비암호화 객체는 암호화를 적용한 복사를 계획하고 데이터·버전 보존과 읽기 동작을 검증하세요. 필요한 KMS 권한은 최소 범위로 부여하세요.
예시
버킷 이름은 전역에서 고유한 값으로 바꾸고 업로드할 index.html 파일을 준비하세요. 두 예시는 업로드 시 암호화 지정 여부를 비교하며, 고객 관리형 KMS 키를 요구하는 환경의 완성된 예시는 아닙니다.
버킷 기본 암호화 사용
hcl
resource "aws_s3_bucket" "artifact_bucket" {
bucket = "examplebuckettftest"
versioning {
enabled = true
}
}
resource "aws_s3_bucket_object" "artifact_file" {
key = "someobject"
bucket = aws_s3_bucket.artifact_bucket.id
source = "index.html"
}
업로드에 암호화를 따로 지정하지 않아 버킷 기본 암호화를 사용합니다. 새 객체의 평문 저장을 의미하지 않습니다.
SSE-S3 명시
hcl
resource "aws_s3_bucket" "artifact_bucket" {
bucket = "examplebuckettftest"
versioning {
enabled = true
}
}
resource "aws_s3_bucket_object" "artifact_file" {
key = "someobject"
bucket = aws_s3_bucket.artifact_bucket.id
source = "index.html"
server_side_encryption = "AES256"
}
이 업로드에 AES256을 명시합니다. 버킷이 KMS를 기본값으로 사용하더라도 이 요청은 SSE-S3를 선택하므로 조직의 키 요구사항에 맞는지 확인하세요.