Amazon Web Services 한국 블로그

Amazon S3 업데이트 – 보안 및 액세스 제어 신규 기능 추가 (서울 리전 포함)

Amazon S3를 출시하고 1년여가 지난 후, 한 기술 컨퍼런스에서 엘리베이터를 타고 있다가 개발자 몇 명이 데이터 스토리지 관리에 어려움에 대해 이야기하면서 “그냥 S3에 넣어”라고 말하는 것을 들었습니다. 그 말의 어조가 무척 가벼웠고, 그 순간에 처음으로 S3가 얼마나 빠른 속도로 받아들여졌는지 온전히 실감했기 때문에 그 순간이 분명히 기억에 남았습니다.

출시 이후, Amazon S3에는 수백 가지 기능과 여러 가지 스토리지 클래스가 추가되었으며 그와 동시에 데이터 1기가바이트의 저장 비용이 거의 85%까지 인하되었습니다(Standard의 경우 0.15 USD에서 0.023 USD, S3 Glacier Deep Archive의 경우 무려 0.00099 USD까지 인하됨). 오늘날 우리 고객들은 데이터 레이크, 백업 및 복원, 재해 복구, 아카이빙클라우드 네이티브 애플리케이션 등에 S3를 다방면으로 이용하고 있습니다.

보안 및 액세스 제어
S3 사용 사례가 넓은 범위로 확대되면서 고객들이 미션 크리티컬 버킷과 객체에 대한 액세스를 규제할 새로운 방법이 없을지 문의하기 시작했습니다. 몇 년 전에 IAM 정책을 추가했고, 지난 2018년에는 Block Public Access를 추가했습니다. 작년에는 S3 액세스 지점(Amazon S3 액세스 지점을 사용하여 공유 데이터 세트를 손쉽게 관리)을 추가하여 수백 개의 애플리케이션과 페타바이트급 스토리지를 아우르는 대규모 환경에서 액세스를 간편하게 관리할 수 있도록 했습니다.

오늘은 이번 달 초에 출시한 다른 두 가지 S3 보안 및 액세스 제어 기능의 후속 조치인 S3 객체 소유권을 출시하게 되었습니다. 세 가지 기능 모두 사용자에게 더 많은 통제권과 유연성을 제공하기 위해 설계되었습니다.

객체 소유권 – 이제 버킷 내에 새로 생성한 객체는 버킷과 소유자가 같도록 보장할 수 있습니다.

버킷 소유자 조건 – 이제 새 객체를 생성할 때나 다른 S3 작업을 수행할 때 버킷의 소유권을 확인할 수 있습니다.

액세스 지점을 통해 API 복사 – 이제 액세스 지점을 통해 S3의 API 복사 기능을 이용할 수 있습니다.

이 모든 새로운 기능은 AWS 리전이라면 어디서나, 추가 요금 없이 이용할 수 있습니다. 이제 각각의 기능을 자세히 살펴보겠습니다!

객체 소유권
적절한 권한이 있는 S3에서는 이미 여러 개의 AWS 계정이 객체에 대한 소유권과 제어는 각각의 계정이 그대로 유지하면서 같은 버킷으로 객체를 업로드하는 작업을 허용하고 있습니다. 이와 같은 다대일(many-to-one) 업로드 모델은 버킷을 데이터 레이크나 기타 유형의 데이터 리포지토리로 활용할 때 편리합니다. 내부 팀원이나 외부 파트너 모두 중앙 집중식, 대규모 리소스를 만드는 데 기여할 수 있습니다. 이 모델의 경우, 버킷 내의 객체에 대하여 버킷 소유자가 전적으로 제어 권한을 갖고 있지 않으며 버킷 정책을 사용해 객체를 공유할 수 없어, 이로 인해 혼란을 초래할 수 있습니다.

하지만 이제부터는 새로 생긴 버킷별 설정을 사용하여 버킷 내에 단일한 객체 소유권을 적용할 수 있습니다. 이렇게 하면 수많은 애플리케이션이 간소화되고, 지금까지 이 작업에 보편적으로 사용된 Lambda 지원 자체 복사에 의존할 필요가 없어집니다. 이 설정은 업로드의 주체인 계정에 표시된 동작을 변경하기 때문에, PUT 요청에 반드시 bucket-owner-full-control ACL을 포함해야 합니다. 이 ACL을 포함해야 하는 버킷 정책을 사용하는 방법도 있습니다.

시작하려면, 우선 S3 콘솔을 열고 버킷의 위치를 찾아 [권한]을 확인한 다음 [객체 소유권]을 클릭하고 [편집]을 클릭합니다.

그런 다음 [버킷 소유자 기본 설정]을 선택하고 [저장]을 클릭합니다.

앞서 언급한 것과 같이, 버킷 정책을 사용하여 객체 소유권을 적용하는 방법도 있습니다(자세한 내용은 객체 소유권 관련 정보지식 센터 문서 참조).

대다수의 AWS 서비스는 사용자가 선택한 버킷으로 데이터를 전달하며, 이제는 이 기능을 활용할 수 있습니다. 이제 S3 서버 액세스 로깅, S3 인벤토리, S3 스토리지 클래스 분석, AWS CloudTrailAWS Config 등이 사용자가 소유한 데이터를 제공합니다. Amazon EMR에서도 이 기능을 사용하도록 설정할 수 있습니다. 클러스터 구성에서 fs.s.s3.canned.aclBucketOwnerFullControl로 설정할 수 있습니다(자세히 알아보기).

이 기능은 기존 객체의 소유권을 변경하는 것이 아니라는 점을 유의하세요. 또한, 이제 전보다 많은 S3 객체를 소유하게 되어 보고서 및 기타 지표에 표시되는 숫자도 변경될 수 있습니다.

AWS CloudFormation의 경우 객체 소유권 지원 기능을 현재 개발 중이며 AWS re:Invent 전까지는 준비를 마칠 것으로 예상됩니다.

버킷 소유자 조건
이 기능은 사용자 자신이 소유한 버킷에 쓰기 작업을 하고 있는지 확인해주는 기능입니다.

expectedBucketOwner 파라미터나 x-amz-expected-bucket-owner HTTP 헤더를 사용하여 간단히 숫자 AWS 계정 ID를 아무 S3 버킷이나 객체 API에 전달하기만 하면 됩니다. ID에 사용자가 생각하는, 대상 버킷을 소유한 AWS 계정이 표시됩니다. 일치하는 항목이 있으면 요청이 정상적으로 진행됩니다. 그렇지 않은 경우, 요청은 실패하며 403 상태 코드가 표시됩니다.

자세한 내용은 버킷 소유자 조건을 참조하세요.

액세스 지점을 통해 API 복사
S3 액세스 지점은 공유 데이터 세트에 세분화된 제어 기능을 제공합니다. 한 버킷에서 복잡한 단일 정책을 관리하는 대신, 애플리케이션마다 액세스 지점을 하나씩 만들어 해당 액세스 지점을 통해 만들어진 S3 작업을 규정하는 데 IAM 정책을 사용할 수 있습니다(이 작업의 원리를 알아보려면 Amazon S3 액세스 지점을 사용하여 공유 데이터 세트를 손쉽게 관리 참조).

이제 버킷 이름 대신 액세스 지점의 ARN을 사용하여 S3 액세스 지점을 S3 CopyObject API와 함께 사용할 수 있습니다(자세한 내용은 액세스 지점 사용 참조).

지금 바로 사용하기
이 모든 새로운 기능은 앞서 언급한 바와 같이 AWS 리전 전체에서, 추가 요금 없이 바로 이용할 수 있습니다.

Jeff