Amazon Web Services 한국 블로그

Amazon S3 범용 버킷용 계정 리전별 네임스페이스 소개

오늘은 자체 계정의 리전 네임스페이스에서 범용 버킷을 만들어 데이터 스토리지 크기와 범위 요구 사항이 늘어남에 따라 버킷 생성과 관리를 간소화해 주는 Amazon Simple Storage Service(Amazon S3) 새 기능을 발표합니다. 여러 AWS 리전에서 범용 버킷 이름을 생성하면서도 원하는 버킷 이름을 항상 사용할 수 있도록 보장할 수 있습니다.

이 기능을 사용하면 요청한 버킷 이름에 계정의 고유한 접미사를 첨부해 본인 계정의 리전 네임스페이스에 예측 가능한 형태로 이름을 지정하고 범용 버킷을 생성할 수 있습니다. 예를 들어 제 계정의 리전 네임스페이스에 버킷 mybucket-123456789012-us-east-1-an을 생성할 수 있습니다. 여기서 mybucket이 제가 지정한 버킷 이름 접두사이고, 그 뒤에 요청한 버킷 이름에 계정 리전 접미사 -123456789012-us-east-1-an을 추가합니다. 다른 계정이 제 계정의 접미사를 사용해 버킷을 생성하려 하면 해당 요청은 자동으로 거부됩니다.

보안 팀에서 AWS Identity and Access Management(AWS IAM) 정책과 AWS Organizations 서비스 제어 정책을 사용해 직원들이 새로운 s3:x-amz-bucket-namespace 조건 키를 사용해 본인 계정의 리전 네임스페이스에서만 버킷을 생성하도록 할 수 있습니다. 이렇게 하면 조직 전체에서 계정 리전 네임스페이스를 채택하는 데 도움이 됩니다.

계정 리전 네임스페이스로 S3 버킷 생성 실제 사례
시작하려면, Amazon S3 콘솔에서 버킷 생성을 선택합니다. 계정 리전 네임스페이스에서 버킷을 생성하려면 계정 리전 네임스페이스를 선택합니다. 이 옵션을 선택하면 해당 계정과 리전에만 고유한 아무 이름으로나 버킷을 생성할 수 있습니다.

이 구성은 글로벌 네임스페이스의 범용 버킷으로도 같은 기능을 모두 지원합니다. 유일한 차이점은 계정의 접미사를 포함한 버킷 이름은 해당 계정만 사용할 수 있다는 점입니다. 버킷 이름 접두사와 계정 리전 접미사를 합한 길이는 3~63자여야 합니다.

AWS Command Line Interface(AWS CLI)를 사용하여 x-amz-bucket-namespace:account-regional 요청 헤더를 지정하고 호환되는 버킷 이름을 입력해 계정 리전 네임스페이스를 사용한 버킷을 생성할 수 있습니다.

$ aws s3api create-bucket --bucket mybucket-123456789012-us-east-1-an \
   --bucket-namespace account-regional \
   --region us-east-1

AWS SDK for Python(Boto3)을 사용해 CreateBucket API 요청으로 계정 리전 네임스페이스를 사용한 버킷을 생성할 수 있습니다.

import boto3

class AccountRegionalBucketCreator:
    """Creates S3 buckets using account-regional namespace feature."""
    
    ACCOUNT_REGIONAL_SUFFIX = "-an"
    
    def __init__(self, s3_client, sts_client):
        self.s3_client = s3_client
        self.sts_client = sts_client
    
    def create_account_regional_bucket(self, prefix):
        """
        Creates an account-regional S3 bucket with the specified prefix.
        Resolves caller AWS account ID using the STS GetCallerIdentity API.
        Format: ---an
        """
        account_id = self.sts_client.get_caller_identity()['Account']
        region = self.s3_client.meta.region_name
        bucket_name = self._generate_account_regional_bucket_name(
            prefix, account_id, region
        )
        
        params = {
            "Bucket": bucket_name,
            "BucketNamespace": "account-regional"
        }
        if region != "us-east-1":
            params["CreateBucketConfiguration"] = {
                "LocationConstraint": region
            }
        
        return self.s3_client.create_bucket(**params)
    
    def _generate_account_regional_bucket_name(self, prefix, account_id, region):
        return f"{prefix}-{account_id}-{region}{self.ACCOUNT_REGIONAL_SUFFIX}"


if __name__ == '__main__':
    s3_client = boto3.client('s3')
    sts_client = boto3.client('sts')
    
    creator = AccountRegionalBucketCreator(s3_client, sts_client)
    response = creator.create_account_regional_bucket('test-python-sdk')
    
    print(f"Bucket created: {response}")

AWS CloudFormation과 같은 코드형 인프라(IaC) 도구를 업데이트해 계정 리전 네임스페이스에서 버킷 생성을 간소화할 수 있습니다. AWS CloudFormation은 AWS::AccountIdAWS::Region과 같은 의사 파라미터를 제공해 계정 리전 네임스페이스 버킷을 생성하는 CloudFormation 템플릿을 간편하게 빌드할 수 있습니다.

다음 예시는 기존 CloudFormation 템플릿을 업데이트해 계정 리전 네임스페이스에서 버킷을 생성하는 방법을 설명한 것입니다.

BucketName: !Sub "amzn-s3-demo-bucket-${AWS::AccountId}-${AWS::Region}-an"
BucketNamespace: "account-regional"

아니면, BucketNamePrefix 속성을 사용해서도 CloudFormation 템플릿을 업데이트할 수 있습니다. BucketNamePrefix를 사용하면 버킷 이름에서 고객이 정의한 부분만 입력할 수 있고, 그러면 요청하는 AWS 계정과 지정된 리전에 따라 계정 리전 네임스페이스 접미사가 자동으로 추가됩니다.

BucketNamePrefix: 'amzn-s3-demo-bucket'
BucketNamespace: "account-regional"

이러한 옵션을 사용해 사용자 지정 CloudFormation 템플릿을 구축해 계정 리전 네임스페이스에서 간편하게 범용 버킷을 생성할 수 있습니다.

알아야 할 사항
기존의 글로벌 버킷 이름을 계정 리전 네임스페이스를 포함한 버킷 이름으로 바꿀 수는 없지만, 계정 리전 네임스페이스에서 새로 범용 버킷을 생성할 수는 있습니다. 또한, 계정 리전 네임스페이스는 범용 버킷에만 지원됩니다. S3 테이블 버킷 및 벡터 버킷은 이미 계정 수준 네임스페이스에 존재하며, S3 디렉터리 버킷은 영역 네임스페이스에 존재합니다.

자세한 내용은 Amazon S3 사용 설명서의 범용 버킷 네임스페이스를 참조하세요.

정식 출시
이제 AWS 중국 및 AWS GovCloud(미국) 리전 등 37개 AWS 리전의 Amazon S3에서, 계정 리전 네임스페이스에서 범용 버킷 생성을 사용할 수 있습니다. 계정 리전 네임스페이스에서 범용 버킷을 생성하는 데는 추가 비용이 부과되지 않습니다.

지금 바로 Amazon S3 콘솔에서 사용해 보고 AWS re:Post for Amazon S3 또는 평소 이용하는 AWS Support 연락처로 피드백을 보내주세요.

Channy