범용 버킷의 네임스페이스 - Amazon Simple Storage Service

범용 버킷의 네임스페이스

기본적으로 범용 버킷은 글로벌 네임스페이스에 존재합니다. 즉, 각 버킷 이름은 파티션 내 모든 AWS 리전의 모든 AWS 계정에서 고유해야 합니다. 파티션은 리전 그룹입니다. 현재 AWS에는 aws(표준 리전), aws-cn(중국 리전), aws-us-gov(AWS GovCloud(미국)) 및 aws-eusc(European Sovereign Cloud)의 4가지 파티션이 있습니다. 범용 버킷을 생성할 때 공유 글로벌 네임스페이스에 버킷을 생성하거나 계정 리전 네임스페이스에 버킷을 생성하도록 선택할 수 있습니다. 계정 리전 네임스페이스는 글로벌 네임스페이스의 하위 영역으로, 해당 사용자 계정만 버킷을 생성할 수 있습니다.

글로벌 범용 버킷

기본적으로 공유 글로벌 네임스페이스에 글로벌 범용 버킷을 생성하게 됩니다. 공유 글로벌 네임스페이스에 범용 버킷을 생성한 후에는 해당 버킷 이름을 사용하여 파티션 내에서 다른 사용자가 버킷을 생성할 수 없습니다. 글로벌 범용 버킷을 삭제하면 해당 버킷 이름은 글로벌 네임스페이스에서 다시 사용 가능해져서 누구나 다시 생성할 수 있습니다.

글로벌 범용 버킷을 생성할 때 버킷 이름 지정 규칙을 준수하는 한 어떤 이름도 요청할 수 있습니다. 이러한 규칙에는 3(최소)~63(최대)자 길이의 이름을 지정하는 것이 포함됩니다. 이름에는 소문자, 숫자, 마침표(.), 하이픈(-)만 포함할 수 있습니다. 버킷 이름은 문자 또는 숫자로 시작하고 끝나야 하며 연속된 마침표 2개를 포함할 수 없습니다. 버킷 이름 지정 규칙에 대한 자세한 내용은 범용 버킷 이름 지정 규칙 섹션을 참조하세요.

글로벌 범용 버킷 이름을 지정할 때는 파티션에 아직 사용되지 않은 고유한 이름을 선택해야 합니다. 이미 존재하며 다른 사람이 소유한 버킷을 생성하려고 하면 HTTP 409 BucketAlreadyExists 오류가 발생합니다. 이미 존재하며 사용자 본인이 소유한 버킷을 생성하려고 하면 HTTP 409 BucketAlreadyOwnedByYou 오류가 발생합니다.

글로벌 범용 버킷을 생성하면 요청한 버킷 이름을 가장 유연하게 선택할 수 있습니다. 공유 글로벌 네임스페이스이므로 다른 계정에서도 유사한 버킷 이름을 생성할 수 있습니다. 또한 이전에 삭제한 버킷 이름을 다른 계정에서 다시 생성할 수 있습니다. 가용성 또는 보안 확인 목적을 위해 특정 버킷 명명 규칙에 의존하면 안 됩니다. 이미 버킷을 생성한 경우가 아니라면 선택한 버킷 이름을 사용할 수 있다고 가정하고 코드를 작성하지 마세요. 예측할 수 없는 버킷 이름을 생성하는 한 가지 방법은 버킷에 전역 고유 식별자(GUID)를 추가하는 것입니다. 예를 들어 amzn-s3-demo-bucket-a1b2c3d4-5678-90ab-cdef-example11111입니다. 자세한 내용은 버킷 이름에 GUID를 사용하는 버킷 생성 섹션을 참조하세요.

계정 리전 네임스페이스 범용 버킷

Amazon S3 범용 버킷은 공유 글로벌 네임스페이스에 존재하지만 선택적으로 계정 리전 네임스페이스에 버킷을 생성할 수 있습니다. 계정 리전 네임스페이스는 글로벌 버킷 네임스페이스의 예약된 하위 영역입니다. 해당 사용자 계정만 이 네임스페이스에 범용 버킷을 생성할 수 있습니다. 계정 리전 네임스페이스에 생성된 새로운 범용 버킷은 사용자의 계정에 고유합니다. 이러한 버킷은 다른 계정에서 다시 생성할 수 없습니다. 이러한 버킷은 공유 글로벌 네임스페이스의 범용 버킷이 이미 지원하는 모든 S3 기능 및 AWS 서비스를 지원합니다. 애플리케이션은 계정 리전 네임스페이스의 버킷과 상호 작용하기 위해 변경할 필요가 없습니다.

참고

중동(바레인) 및 중동(UAE)를 제외한 모든 AWS 리전의 계정 리전 네임스페이스에 버킷을 생성할 수 있습니다.

계정 리전 네임스페이스에 버킷을 생성하는 것이 보안 모범 사례입니다. 이러한 버킷 이름은 해당 사용자 계정에서만 사용할 수 있습니다. 계정 리전 네임스페이스에 버킷을 생성하면 여러 AWS 리전에 걸쳐 범용 버킷 이름을 쉽게 템플릿화할 수 있습니다. 다른 계정은 해당 네임스페이스에 버킷 이름을 생성할 수 없습니다. 다른 계정이 계정 리전 접미사를 사용하여 버킷을 생성하려고 하면 CreateBucket 요청이 거부됩니다.

계정 리전 네임스페이스 이름 지정 규칙

계정 리전 네임스페이스의 범용 버킷은 특정 이름 지정 규칙을 따라야 합니다. 이러한 버킷은 생성한 버킷 이름 접두사와 12자리 AWS 계정 ID, AWS 리전 코드를 포함하며 -an로 끝나는 접미사로 구성됩니다.

bucket-name-prefix-accountId-region-an

예를 들어, us-west-2 리전에 있는 AWS 계정 111122223333의 계정 리전 네임스페이스에는 다음과 같은 범용 버킷이 있습니다.

amzn-s3-demo-bucket-111122223333-us-west-2-an

계정 리전 네임스페이스에 버킷을 생성하려면 CreateBucket 요청을 수행합니다. 값이 account-regional로 설정된 x-amz-bucket-namespace 요청 헤더를 지정합니다. 또한 계정 리전 네임스페이스 형식의 버킷 이름 <customer-chosen-name>-<AWS-Account-ID>-<AWS-Region>-an을 지정합니다.

참고

콘솔을 사용하여 계정 리전 네임스페이스에 범용 버킷을 생성하면 제공한 버킷 이름 접두사에 접미사가 자동으로 추가됩니다. 이 접미사에는 AWS 계정 ID와 버킷을 생성하기 위해 선택한 AWS 리전이 포함됩니다. CreateBucket API를 사용하여 계정 리전 네임스페이스에 범용 버킷을 생성하는 경우 전체 접미사를 제공해야 합니다. 여기에는 요청의 AWS 계정 ID와 AWS 리전이 포함됩니다. AWS 리전 코드 목록은 AWS 리전 코드 형식 섹션을 참조하세요.

계정 리전 네임스페이스를 CloudFormation 템플릿에 통합

CloudFormation과 같은 코드형 인프라 도구를 업데이트하여 계정 리전 네임스페이스에서 버킷 생성을 간소화할 수 있습니다. CloudFormation은 가상 파라미터 AWS::AccountIdAWS::Region을 제공합니다. 이러한 파라미터를 사용하면 계정 리전 네임스페이스 버킷을 생성하는 CloudFormation 템플릿을 쉽게 빌드할 수 있습니다. 자세한 내용은 가상 파라미터를 사용하여 AWS 값 가져오기를 참조하세요.

Sub와 함께 BucketName을 사용하는 예제 1:

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

BucketNamePrefix를 사용하는 예제 2:

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

또는 BucketNamePrefix 속성을 사용하여 CloudFormation 템플릿을 업데이트할 수도 있습니다. BucketNamePrefix를 사용하면 버킷 이름에서 고객이 정의하는 부분을 간단히 지정할 수 있습니다. 그러면 지정된 요청하는 AWS 계정 및 AWS 리전을 기반으로 계정 리전 네임스페이스 접미사가 자동으로 추가됩니다.

이러한 옵션을 사용하면 사용자 지정 CloudFormation 템플릿을 빌드하여 계정 리전 네임스페이스에 범용 버킷을 쉽게 생성할 수 있습니다. 자세한 내용은 CloudFormation 사용 설명서의 AWS::S3::Bucket을 참조하세요.

제한 및 고려 사항

공유 글로벌 네임스페이스에 버킷을 생성할 때는 다음 고려 사항이 적용됩니다.

  • 동일한 파티션의 다른 AWS 계정은 버킷이 삭제될 때까지 공유 글로벌 네임스페이스의 버킷 이름을 사용할 수 없습니다. 공유 글로벌 네임스페이스에서 버킷을 삭제한 후에는 동일한 파티션의 다른 AWS 계정이 삭제된 버킷 이름을 사용하여 새 버킷을 생성할 수 있습니다. 따라서 다른 계정이 삭제된 버킷에 대한 요청을 수신할 수도 있다는 점에 유의하세요.

  • 공유 글로벌 네임스페이스에 버킷을 생성할 애플리케이션을 빌드할 때는 원하는 버킷 이름이 다른 계정에서 이미 사용 중일 수 있고 다른 계정에서 유사한 버킷 이름을 사용하고 있을 수 있다는 점을 고려해야 합니다.

  • Amazon S3는 버킷 이름을 기반으로 버킷을 식별하기 때문에 요청에 잘못된 버킷 이름을 사용할 경우 애플리케이션이 실수로 예상과 다른 버킷에 대해 작업을 수행할 수 있습니다. 이와 같은 상황에서 의도하지 않은 버킷 상호 작용을 피하기 위해 버킷 소유자 조건을 사용할 수 있습니다. 자세한 내용은 버킷 소유자 조건을 사용하여 버킷 소유권 확인 섹션을 참조하세요.

계정 리전 네임스페이스에 버킷을 생성할 때는 다음과 같은 제한 및 고려 사항이 적용됩니다.

  • AWS 리전에서 이미 소유한 계정 리전 네임스페이스 버킷을 다시 생성하려고 하면 HTTP 409 BucketAlreadyOwnedByYou 오류가 반환됩니다.

  • 계정 리전 네임스페이스에 버킷을 생성하려면 S3 리전 엔드포인트를 사용해야 합니다. 미국 동부(버지니아 북부) 리전의 경우 계정 리전 네임스페이스에 버킷을 생성할 때 이전 버전과의 호환성을 위해 레거시 글로벌 엔드포인트를 사용할 수 있습니다.

  • 계정 리전 접미사는 범용 버킷 이름에 허용되는 최대 63자 수에 포함됩니다. 따라서 계정 리전 접미사가 -012345678910-us-east-1-an인 경우 버킷 이름 접두사에 37자를 사용할 수 있습니다.

AWS 리전 코드 형식

계정 리전 네임스페이스에 버킷을 생성하려면 범용 버킷을 생성할 AWS 리전을 접미사에 포함해야 합니다. 접미사에 전체 AWS 리전 코드(예: us-west-2)를 지정해야 합니다. AWS 리전 코드의 전체 목록은 AWS 리전을 참조하세요. 다음 버킷 이름은 계정 리전 네임스페이스에 버킷을 생성할 때 사용해야 하는 AWS 리전 코드 형식의 두 가지 예를 보여줍니다.

  • amzn-s3-demo-bucket-012345678910-ap-southeast-1-an

  • amzn-s3-demo-bucket-987654321012-eu-north-1-an

계정 리전 네임스페이스에 버킷을 생성하도록 지정

IAM 위탁자가 계정 리전 네임스페이스에만 버킷을 생성하도록 강제할 수 있습니다. s3:x-amz-bucket-namespace 조건 키를 사용합니다. 다음 예제에서는 IAM 정책, 리소스 제어 정책 또는 서비스 제어 정책에서 계정 리전 버킷 생성을 적용하는 방법을 보여줍니다.

IAM 정책

다음 IAM 정책은 요청에 x-amz-bucket-namespace 헤더가 account-regional로 설정되어 있지 않으면 IAM 위탁자에 대한 s3:CreateBucket 권한 부여를 거부합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAccountRegionalBucketCreation", "Effect": "Deny", "Action": "s3:CreateBucket", "Resource": "*", "Condition": { "StringNotEquals": { "s3:x-amz-bucket-namespace": "account-regional" } } } ] }

리소스 제어 정책

다음 리소스 제어 정책은 요청에 x-amz-bucket-namespace 헤더가 account-regional로 설정되어 있지 않으면 모든 사용자에 대한 s3:CreateBucket 권한 부여를 거부합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "OnlyCreateBucketsInAccountRegionalNamespace", "Effect": "Deny", "Principal": "*", "Action": "s3:CreateBucket", "Resource": "*", "Condition": { "StringNotEquals": { "s3:x-amz-bucket-namespace": "account-regional" } } } ] }

서비스 제어 정책

다음 서비스 제어 정책은 요청에 x-amz-bucket-namespace 헤더가 account-regional로 설정되어 있지 않으면 모든 사용자에 대한 s3:CreateBucket 권한 부여를 거부합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAccountRegionalBucketCreation", "Effect": "Deny", "Action": "s3:CreateBucket", "Resource": "*", "Condition": { "StringNotEquals": { "s3:x-amz-bucket-namespace": "account-regional" } } } ] }

계정 리전 네임스페이스에 버킷 생성

다음 예제에서는 계정 리전 네임스페이스에 범용 버킷을 생성하는 방법을 보여줍니다.

AWS CLI 사용

다음 AWS CLI 예제에서는 미국 서부(캘리포니아 북부) 리전(us-west-1)에 있는 AWS 계정 012345678910의 계정 리전 네임스페이스에 범용 버킷을 생성합니다. 이 예 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

aws s3api create-bucket \ --bucket amzn-s3-demo-bucket-012345678910-us-west-1-an \ --bucket-namespace account-regional --region us-west-1 \ --create-bucket-configuration LocationConstraint=us-west-1