일반 목적 버킷 명명 규칙
일반 목적 버킷 명명 규칙
일반 목적 버킷을 만들 때는 버킷 이름의 길이, 유효 문자, 형식, 고유성을 고려해야 해요. 다음 섹션들은 일반 목적 버킷 명명 규칙, 모범 사례, 그리고 계정 리전별 네임스페이스에 버킷을 만들거나 이름에 전역 고유 식별자(GUID)를 포함하는 버킷을 만드는 예시를 다뤄요.
객체 키 이름에 대한 정보는 "객체 키 이름 만들기" 문서를, 일반 목적 버킷 생성은 "일반 목적 버킷 생성" 문서를 참고하세요.
출처: 문서
본문
일반 목적 버킷 명명 규칙 (General purpose buckets naming rules)
일반 목적 버킷에는 다음 명명 규칙이 적용돼요.
- 버킷 이름은 최소 3자에서 최대 63자 사이여야 해요.
- 버킷 이름은 소문자, 숫자, 마침표(
.), 하이픈(-)만 사용할 수 있어요. - 버킷 이름은 문자 또는 숫자로 시작하고 끝나야 해요.
- 버킷 이름은 인접한 두 개의 마침표를 포함할 수 없어요.
- 버킷 이름은 IP 주소 형식(예:
192.168.5.4)이면 안 돼요. - 버킷 이름은
xn--접두사로 시작하면 안 돼요. - 버킷 이름은
sthree-접두사로 시작하면 안 돼요. - 버킷 이름은
amzn-s3-demo-접두사로 시작하면 안 돼요. - 버킷 이름은
-s3alias접미사로 끝나면 안 돼요. 이 접미사는 액세스 포인트 별칭 이름을 위해 예약되어 있어요. - 버킷 이름은
--ol-s3접미사로 끝나면 안 돼요. 이 접미사는 Object Lambda 액세스 포인트 별칭 이름을 위해 예약되어 있어요. - 버킷 이름은
.mrap접미사로 끝나면 안 돼요. 이 접미사는 Multi-Region 액세스 포인트 이름을 위해 예약되어 있어요. - 버킷 이름은
--x-s3접미사로 끝나면 안 돼요. 이 접미사는 디렉터리 버킷을 위해 예약되어 있어요. - 버킷 이름은
--table-s3접미사로 끝나면 안 돼요. 이 접미사는 S3 Tables 버킷을 위해 예약되어 있어요. -an접미사는 계정 리전별 네임스페이스에 버킷을 만들 때만 쓸 수 있어요.- Amazon S3 Transfer Acceleration과 함께 사용하는 버킷 이름에는 마침표(
.)가 있으면 안 돼요.
중요:
- 일반 목적 버킷은 전역 네임스페이스에 존재하므로, 파티션 안의 모든 AWS 리전과 모든 AWS 계정에 걸쳐 버킷 이름이 고유해야 해요. 공유 전역 네임스페이스에 버킷을 만든 후에는 파티션 안에서 다른 누구도 그 이름을 만들 수 없어요. 버킷 소유자가 버킷을 삭제하면 이름이 다시 사용 가능해질 수 있지만, 즉시 가능하지 않을 수도 있고 어떤 경우에는 전혀 다시 사용할 수 없을 수도 있어요.
- 공유 전역 네임스페이스의 버킷 이름은 버킷이 삭제되기 전까지 같은 파티션의 다른 AWS 계정이 쓸 수 없어요. 삭제한 후에는 같은 파티션의 다른 계정이 동일한 이름으로 새 버킷을 만들어 삭제된 버킷을 대상으로 한 요청을 받을 수도 있어요. 이를 막거나 같은 이름을 계속 쓰려면 버킷을 삭제하지 마세요. 버킷을 비우고 유지하면서 필요에 따라 요청을 차단하는 것을 권장해요. 더 이상 활발히 사용하지 않는 버킷은 비용을 최소화하기 위해 모든 객체를 비우되 버킷 자체는 유지하는 것을 권장해요.
- 오직 내 계정만 버킷 이름을 소유할 수 있다는 보장을 받으려면 계정 리전별 네임스페이스에 버킷을 만들 것을 권장해요.
- 버킷을 만들 때 이름과 AWS 리전을 선택하며, 만든 후에는 이름과 리전을 변경할 수 없어요.
- 버킷 이름에 민감한 정보를 포함하지 마세요. 버킷 이름은 버킷 안 객체를 가리키는 URL에 표시돼요.
참고: 2018년 3월 1일 이전에 US East (N. Virginia) 리전에서 만든 버킷은 최대 255자, 대문자와 밑줄 포함이 허용됐어요. 2018년 3월 1일부터는 다른 모든 리전과 동일한 규칙을 따라야 해요.
계정 리전별 네임스페이스 명명 규칙 (Account regional namespace naming rules)
일반 목적 버킷이 공유 전역 네임스페이스에 존재하지만, 계정 리전별 네임스페이스에 버킷을 만들 수도 있어요. 여기서는 내 계정만 일반 목적 버킷을 만들 수 있어요. 계정 리전별 네임스페이스의 버킷은 내 계정에만 고유하며 다른 계정이 다시 만들 수 없어요. 이런 버킷은 공유 전역 네임스페이스의 버킷이 지원하는 모든 S3 기능과 AWS 서비스를 지원해요.
계정 리전별 네임스페이스의 일반 목적 버킷은 특정 명명 규칙을 따라야 해요. 내가 만드는 접두사와 12자리 AWS 계정 ID, AWS 리전 코드가 들어가고 -an으로 끝나는 접미사로 구성돼요.
bucket-name-prefix-accountId-region-an
예를 들어, AWS 계정 111122223333의 us-west-2 리전 계정 리전별 네임스페이스에 존재하는 버킷은 다음과 같아요:
amzn-s3-demo-bucket-111122223333-us-west-2-an
CreateBucket 요청을 하고 x-amz-bucket-namespace 헤더 값에 account-regional을 지정하면 계정 리전별 네임스페이스에 버킷을 만들 수 있어요. 이름 형식은 고객-선택-이름-AWS-계정-ID-AWS-리전-an이에요. 예를 들어 amzn-s3-demo-bucket-111122223333-us-east-1-an처럼 만들 수 있어요.
예시 일반 목적 버킷 이름 (Example general purpose bucket names)
허용되는 문자(a-z, 0-9, 하이픈)를 사용한 예시:
amzn-s3-demo-bucket1-a1b2c3d4-5678-90ab-cdef-example11111amzn-s3-demo-bucket
계정 리전별 네임스페이스 버킷 예시:
amzn-s3-demo-bucket-111122223333-us-west-2-anamzn-s3-demo-bucket-012345678910-ap-southeast-2-an
유효하지만 정적 웹사이트 호스팅 외에는 권장되지 않는 이름(마침표 포함):
example.comwww.example.commy.example.s3.bucket
유효하지 않은 이름:
amzn_s3_demo_bucket(밑줄 포함)AmznS3DemoBucket(대문자 포함)amzn-s3-demo-bucket-(amzn-s3-demo-로 시작하고 하이픈으로 끝남)example..com(연속된 마침표 2개)192.168.5.4(IP 주소 형식)
모범 사례 (Best practices)
버킷 이름을 정할 때 다음 모범 사례를 고려하세요.
- 오직 내 계정만 버킷 이름을 소유할 수 있다는 보장을 받으려면 계정 리전별 네임스페이스에 버킷을 만들 것을 권장해요. 여러 AWS 리전에 걸쳐 예측 가능한 버킷 이름을 만들 수 있고, 다른 계정은 내 네임스페이스에 버킷 이름을 만들 수 없어요.
- 애플리케이션이 자동으로 버킷을 만든다면 이름 충돌 가능성이 낮은 명명 체계를 선택하고, 이름이 이미 사용 중이면 다른 이름을 선택하도록 애플리케이션 로직을 구성하세요.
- 예측 불가능한 버킷 이름을 만들 것을 권장해요. 버킷 이름에 GUID를 붙이는 방법이 있어요(예:
amzn-s3-demo-bucket-a1b2c3d4-5678-90ab-cdef-example11111). - 최상의 호환성을 위해 정적 웹사이트 호스팅 전용 버킷을 제외하고는 버킷 이름에 마침표(
.)를 사용하지 않는 것을 권장해요. 이름에 마침표가 있으면 HTTPS에서 가상 호스트 스타일 주소 지정을 사용할 수 없어요(직접 인증서 검증을 하지 않는 한). 버킷 가상 호스팅에 사용되는 보안 인증서는 이름에 마침표가 있는 버킷에는 적용되지 않아요. - 이 제한은 HTTP에서만 정적 웹사이트 호스팅이 가능하므로 정적 웹사이트 호스팅 버킷에는 영향을 주지 않아요.
- 나나 내 비즈니스와 관련 있는 이름을 선택하고, 남의 이름과 연관된 이름(예: 이름에 AWS, Amazon 포함)은 피하세요.
- 빈 버킷은 삭제할 수 있고, 삭제 후에는 이름을 재사용할 수 있어요. 다만 즉시 또는 완전히 재사용할 수 있다는 보장은 없어요. 삭제 후 이름을 재사용하려면 어느 정도 시간이 지나야 할 수 있고, 다른 AWS 계정이 먼저 같은 이름으로 버킷을 만들 수도 있어요.
- 공유 전역 네임스페이스의 버킷을 삭제하면 같은 파티션의 다른 계정이 그 이름으로 새 버킷을 만들어 삭제된 버킷을 대상으로 한 요청을 받을 수도 있어요. 이를 막거나 같은 이름을 쓰려면 버킷을 삭제하지 말고 비워서 유지하세요.
이름에 GUID를 사용하는 버킷 만들기
AWS CLI로 이름 끝에 GUID를 사용하는 일반 목적 버킷을 US West (N. California) 리전(us-west-1)에 만들 수 있어요:
aws s3api create-bucket \
--bucket amzn-s3-demo-bucket1 $(uuidgen | tr -d - | tr '[:upper:]' '[:lower:]') \
--region us-west-1 \
--create-bucket-configuration LocationConstraint=us-west-1
AWS SDK for Java로 US East (N. Virginia) 리전(us-east-1)에 GUID를 사용한 버킷을 만들 수도 있어요:
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import java.util.List;
import java.util.UUID;
public class CreateBucketWithUUID {
public static void main(String[] args) {
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
String bucketName = "amzn-s3-demo-bucket" + UUID.randomUUID().toString().replace("-", "");
CreateBucketRequest createRequest = new CreateBucketRequest(bucketName);
System.out.println(bucketName);
s3.createBucket(createRequest);
}
}
계정 리전별 네임스페이스에 버킷 만들기
AWS CLI로 AWS 계정 012345678910의 US West (N. California) 리전(us-west-1) 계정 리전별 네임스페이스에 일반 목적 버킷을 만들 수 있어요:
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