Amazon Web Services 한국 블로그

Amazon S3 Express One Zone, 고객용 암호화 키를 위한 AWS KMS 지원 시작

고성능 단일 가용 영역(AZ) S3 스토리지 클래스인 Amazon S3 Express One Zone은 이제 AWS Key Management Service(KMS)(SSE-KMS)를 사용한 서버 측 암호화를 지원합니다. S3 Express One Zone은 기본적으로 Amazon S3 관리형 키(SSE-S3)를 사용하여 S3 디렉터리 버킷에 저장된 모든 객체를 이미 암호화합니다. 오늘부터 AWS KMS 고객 관리형 키를 사용하여 성능에 영향을 주지 않고 저장 데이터를 암호화할 수 있습니다. 이 새로운 암호화 기능은 S3 Express One Zone을 사용할 때 규정 준수 및 규제 요구 사항을 충족할 수 있는 추가 옵션을 제공합니다. S3 Express One Zone은 가장 자주 액세스하는 데이터와 지연 시간에 민감한 애플리케이션에 대해 일관된 10밀리초 이하의 데이터 액세스를 제공하도록 설계되었습니다.

S3 디렉터리 버킷을 사용하면 SSE-KMS 암호화에 버킷당 하나의 고객 관리형 키만 지정할 수 있습니다. 고객 관리형 키를 추가한 후에는 새 키를 사용하도록 편집할 수 없습니다. 반면, S3 범용 버킷의 경우 버킷의 기본 암호화 구성을 변경하거나 S3 PUT 요청 중에 여러 KMS 키를 사용할 수 있습니다. SSE-KMS를 S3 Express One Zone과 함께 사용하는 경우 S3 버킷 키는 항상 활성화됩니다. S3 버킷 키는 무료이며 AWS KMS에 대한 요청 수를 최대 99% 줄여 성능과 비용을 모두 최적화합니다.

Amazon S3 Express One Zone과 함께 SSE-KMS 사용
이 새로운 기능을 실제로 보여드리기 위해 S3 디렉터리 버킷을 생성하고 apne1-az4가용 영역으로 사용하는 단계에 따라 먼저 Amazon S3 콘솔에서 S3 디렉터리 버킷을 생성합니다 기본 이름s3express-kms를 입력하면 가용 영역 ID가 포함된 접미사가 자동으로 추가되어 최종 이름이 생성됩니다. 그런 다음 확인란을 선택하여 데이터가 단일 가용 영역에 저장되었음을 확인한 후 버킷 생성을 선택합니다.

이제 AWS Command Line Interface(AWS CLI)를 사용하여 방금 생성한 버킷에 암호화를 설정하는 방법을 살펴보겠습니다.

AWS CLI를 통해 S3 Express One Zone과 함께 SSE-KMS를 사용하려면 다음 정책을 준수하는 AWS Identity and Access Management(IAM) 사용자 또는 역할이 필요합니다. 이 정책은 암호화된 파일을 S3 디렉터리 버킷에 업로드하고 다운로드하는 데 필요한 CreateSession API 작업을 허용합니다.

{
   "Version": "2012-10-17",
   "Statement": [
	{
	   "Effect": "Allow",
	   "Action": [
		"s3express:CreateSession"
		 ],
	   "Resource": [
		"arn:aws:s3express:*:<account>:bucket/s3express-kms--apne1-az4--x-s3"
		]
		},
	    {
		"Effect": "Allow",
		"Action": [
			"kms:Decrypt",
			"kms:GenerateDataKey"
			],
		"Resource": [
			"arn:aws:kms:*:<account>:key/<keyId>"
			]
	    }
   ]
}

PutBucketEncryption API를 사용하여 기본 버킷 암호화를 SSE-KMS로 설정하겠습니다. 다음은 AWS CLI의 예입니다.

aws s3api put-bucket-encryption \
--bucket s3express-kms--apne1-az4--x-s3 \
--server-side-encryption-configuration \
  '{"Rules": [{"ApplyServerSideEncryptionByDefault":\
   {"SSEAlgorithm": "aws:kms", \
    "KMSMasterKeyID": "1234abcd-12ab-34cd-56ef-1234567890ab"\
   },\
  "BucketKeyEnabled":true}]}'

이 S3 디렉터리 버킷에 업로드하는 모든 새 객체는 AWS KMS 키를 사용하여 자동으로 암호화됩니다. PutObject 명령을 사용하여 S3 디렉터리 버킷confidential-doc.txt라는 새 파일을 업로드합니다

aws s3api put-object --bucket s3express-kms--apne1-az4--x-s3 \
--key confidential-doc.txt \
--body confidential-doc.txt

이전 명령이 성공하면 다음과 같은 결과가 출력됩니다.

{
    "ETag": "\"664469eeb92c4218bbdcf92ca559d03b\"",
    "ChecksumCRC32": "0duteA==",
    "ServerSideEncryption": "aws:kms",
    "SSEKMSKeyId": "arn:aws:kms:ap-northeast-1:<accountId>:key/<keyId>",
    "BucketKeyEnabled": true
}

HeadObject 명령으로 객체의 속성을 확인하면 이전에 생성한 키로 SSE-KMS를 사용하여 암호화된 것을 볼 수 있습니다.

aws s3api head-object --bucket s3express-kms--apne1-az4--x-s3 \
--key confidential-doc.txt

다음 출력이 반환됩니다.

 
{
    "AcceptRanges": "bytes",
    "LastModified": "2024-08-21T15:29:22+00:00",
    "ContentLength": 5,
    "ETag": "\"664469eeb92c4218bbdcf92ca559d03b\"",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "aws:kms",
    "Metadata": {},
    "SSEKMSKeyId": "arn:aws:kms:ap-northeast-1:<accountId>:key/<keyId>",
    "BucketKeyEnabled": true,
    "StorageClass": "EXPRESS_ONEZONE"
}

GetObject를 사용하여 암호화된 객체를 다운로드합니다.

aws s3api get-object --bucket s3express-kms--apne1-az4--x-s3 \
--key confidential-doc.txt output-confidential-doc.txt

내 세션에 필요한 권한이 있으므로 객체가 자동으로 다운로드되고 복호화됩니다.

{
    "AcceptRanges": "bytes",
    "LastModified": "2024-08-21T15:29:22+00:00",
    "ContentLength": 5,
    "ETag": "\"664469eeb92c4218bbdcf92ca559d03b\"",
    "ContentType": "binary/octet-stream",
    "ServerSideEncryption": "aws:kms",
    "Metadata": {},
    "SSEKMSKeyId": "arn:aws:kms:ap-northeast-1:<accountId>:key/<keyId>",
    "BucketKeyEnabled": true,
    "StorageClass": "EXPRESS_ONEZONE"
}

이 두 번째 테스트에서는 다른 IAM 사용자를 사용합니다. 이 IAM 사용자는 객체를 다운로드하는 데 필요한 KMS 키 권한이 부여되지 않은 정책을 사용합니다. 이 시도는 AccessDenied 오류와 함께 실패하며, 이는 SSE-KMS 암호화가 의도한 대로 작동하고 있음을 나타냅니다.

CreateSession 작업을 직접적으로 호출하는 동안 오류가 발생했습니다(액세스 거부). 액세스가 거부되었습니다.

이 데모에서는 SSE-KMS가 S3 Express One Zone과 원활하게 작동하여 인증된 사용자에게 사용 편의성을 유지하면서 추가 보안 계층을 제공하는 방법을 보여줍니다.

알아야 할 사항
시작하기 – AWS CLI 또는 AWS SDK를 사용하여 S3 Express One Zone에 SSE-KMS를 활성화할 수 있습니다. S3 디렉터리 버킷의 기본 암호화 구성을 SSE-KMS로 설정하고 AWS KMS 키를 지정합니다. 수명 기간 동안 S3 디렉터리 버킷당 하나의 고객 관리형 키만 사용할 수 있다는 점을 기억하세요.

리전 – 고객 관리형 키를 사용하는 SSE-KMS에 대한 S3 Express One Zone 지원은 현재 S3 Express One Zone을 사용할 수 있는 모든 AWS 리전에서 제공됩니다.

성능 – SSE-KMS를 S3 Express One Zone과 함께 사용해도 요청 지연 시간에는 영향을 주지 않습니다. 10밀리초 미만으로 데이터에 지속적으로 액세스할 수 있습니다.

요금 – 암호화 및 복호화에 사용되는 데이터 키를 생성하고 검색하는 데 발생한 AWS KMS 요금을 지불해야 합니다. 자세한 내용은 AWS KMS 요금 페이지를 참조하세요. 또한 SSE-KMS를 S3 Express One Zone과 함께 사용하는 경우 CopyObjectUploadPartCopy를 제외한 모든 데이터 플레인 작업에 대해 S3 버킷 키가 기본적으로 활성화되며 이 키는 비활성화할 수 없습니다. 이를 통해 AWS KMS에 대한 요청 수가 최대 99% 감소하여 성능과 비용을 모두 최적화합니다.

AWS CloudTrail 통합AWS CloudTrail을 사용하여 S3 Express One Zone 객체에서 SSE-KMS 작업을 감사할 수 있습니다. 이에 대한 자세한 내용은 이전 블로그 게시물에서 확인하세요.

– Eli.

2024년 9월 19일 업데이트 – 콘솔 대신 기존 버킷의 기본 암호화를 구성하도록 CLI 예제를 업데이트했습니다.