버킷 생성 - Amazon Simple Storage Service

버킷 생성

Amazon S3에 데이터를 업로드하려면 먼저 AWS 리전 중 하나에서 Amazon S3 버킷을 생성해야 합니다. 버킷을 생성할 때 버킷 이름과 리전을 선택해야 합니다. 버킷에 대해 다른 스토리지 관리 옵션을 선택할 수도 있습니다. 버킷을 생성한 후에는 버킷 이름 또는 리전을 변경할 수 없습니다. 버킷 이름 지정에 대한 자세한 내용은 버킷 이름 지정 규칙을 참조하세요.

버킷을 생성하는 AWS 계정이 해당 버킷을 소유합니다. 이 버킷에 원하는 수의 객체를 업로드할 수 있습니다. 기본적으로 AWS 계정 각각에 대해 최대 100개의 버킷을 만들 수 있습니다. 버킷이 더 필요한 경우 서비스 한도 증가를 제출하여 계정버킷 한도 를 최대 1,000개의 버킷 으로 늘릴 수 있습니다. 버킷 한도 증가 요청을 제출하는 방법은 AWS 일반 참조AWS 서비스 할당량을 참조하세요. 버킷에 저장할 수 있는 객체 수에는 제한이 없습니다.

S3 객체 소유권은 버킷에 업로드되는 객체의 소유권을 제어하고 액세스 제어 목록(ACL)을 비활성화 또는 활성화하는 데 사용할 수 있는 Amazon S3 버킷 수준 설정입니다. 기본적으로 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 모든 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 정책을 사용하여 데이터에 대한 액세스를 독점적으로 관리합니다.

자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 단원을 참조하십시오.

Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화가 Amazon S3 내 모든 버킷의 기본 수준 암호화 구성입니다. S3 버킷에 업로드된 모든 새 객체는 SSE-S3를 기본 암호화 설정으로 사용하여 자동으로 암호화됩니다. 다른 유형의 기본 암호화를 사용하려는 경우 AWS Key Management Service(AWS KMS) 키(SSE-KMS) 또는 고객 제공 키(SSE-C)를 사용한 서버 측 암호화를 지정하여 데이터를 암호화할 수도 있습니다. 자세한 내용은 Amazon S3 버킷에 대한 기본 서버 측 암호화 동작 설정 단원을 참조하십시오.

Amazon S3 콘솔, Amazon S3 API, AWS CLI 또는 AWS SDK를 사용하여 버킷을 생성할 수 있습니다. 버킷을 생성하는 데 필요한 권한에 대한 자세한 내용은 Amazon Simple Storage Service API ReferenceCreateBucket을 참조하세요.

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 페이지 상단의 탐색 모음에서 현재 표시된 AWS 리전의 이름을 선택합니다. 그런 다음 버킷을 생성하려는 리전을 선택합니다.

    참고

    지연 시간과 요금을 최소화하고 규제 요건을 충족하려면 가장 가까운 리전을 선택하십시오. 특정 리전에 저장된 객체는 사용자가 명시적으로 객체를 다른 리전으로 전송하지 않는 한 해당 리전을 벗어나지 않습니다. Amazon S3 AWS 리전 목록은 Amazon Web Services 일반 참조의 AWS 서비스 엔드포인트를 참조하십시오.

  3. 왼쪽 탐색 창에서 버킷(Buckets)을 선택합니다.

  4. 버킷 만들기를 선택합니다.

    버킷 만들기 페이지가 열립니다.

  5. 일반 구성에서 버킷이 생성될 AWS 리전을 확인합니다.

  6. 버킷 유형에서 범용을 선택합니다.

  7. [Bucket Name]에서 버킷 이름을 입력합니다.

    버킷 이름은 다음과 같아야 합니다.

    • 파티션 내에서 고유해야 합니다. 파티션은 리전 그룹입니다. AWS에는 aws(표준 리전), aws-cn(중국 리전) 및 aws-us-gov(AWS GovCloud (US) Regions)의 세 가지 파티션이 있습니다.

    • 3~63자 이내여야 합니다.

    • 소문자, 숫자, 점(.) 및 하이픈(-)만 포함해야 합니다. 최상의 호환성을 위해 정적 웹 사이트 호스팅에만 사용되는 버킷을 제외하고 버킷 이름에 점(.)을 사용하지 않는 것이 좋습니다.

    • 문자나 숫자로 시작하고 끝나야 합니다.

    버킷을 생성한 후에는 해당 이름을 변경할 수 없습니다. 버킷 이름 지정에 대한 자세한 내용은 버킷 이름 지정 규칙 섹션을 참조하십시오.

    중요

    버킷 이름에 계정 번호와 같은 중요한 정보를 포함하지 마십시오. 버킷 이름은 버킷의 객체를 가리키는 URL에 표시됩니다.

  8. AWS Management Console을 사용하면 기존 버킷의 설정을 새 버킷에 복사할 수 있습니다. 기존 버킷의 설정을 복사하지 않으려면 다음 단계로 건너뛰세요.

    참고

    이 옵션:

    • AWS CLI에서는 사용할 수 없으며 콘솔에서만 사용할 수 있습니다.

    • 디렉터리 버킷에는 사용할 수 없습니다.

    • 기존 버킷의 버킷 정책을 새 버킷으로 복사하지 않습니다.

    기존 버킷의 설정을 복사하려면 기존 버킷에서 설정 복사 아래에서 버킷 선택을 선택합니다. 버킷 선택 창이 열립니다. 복사하려는 설정이 있는 버킷을 찾아 버킷 선택을 선택합니다. 버킷 선택 창이 닫히고 버킷 생성 창이 다시 열립니다.

    이제 기존 버킷에서 설정 복사 아래에 선택한 버킷의 이름이 표시됩니다. 복사한 버킷 설정을 제거하는 데 사용할 수 있는 기본값 복원 옵션도 표시됩니다. 버킷 생성 페이지에서 나머지 버킷 설정을 검토하세요. 선택한 버킷의 설정과 일치하는 것을 확인할 수 있습니다. 마지막 단계로 건너뛸 수 있습니다.

  9. 객체 소유권(Object Ownership)에서 ACL을 사용 중지 또는 사용 설정하고 버킷에 업로드된 객체의 소유권을 제어하려면 다음 설정 중 하나를 선택합니다.

    ACL 사용 중지됨
    • 버킷 소유자 적용(기본값) – ACL이 비활성화되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하고 완전히 제어합니다. ACL은 더 이상 S3 버킷의 데이터에 대한 권한에 영향을 주지 않습니다. 버킷은 정책을 독점적으로 사용하여 액세스 제어를 정의합니다.

      기본적으로 ACL은 비활성화되어 있습니다. Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다. 각 객체에 대해 액세스를 개별적으로 제어해야 하는 드문 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다. 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 단원을 참조하십시오.

    ACL 사용됨
    • 버킷 소유자 기본(Bucket owner preferred) – 버킷 소유자가 bucket-owner-full-control 미리 제공 ACL을 사용하여 다른 계정이 버킷에 작성하는 새 객체를 소유하고 완전히 제어합니다.

      버킷 소유자 선호 설정을 적용하는 경우 모든 Amazon S3 업로드에 bucket-owner-full-control 미리 제공된 ACL을 포함하도록 요구하려면 이 ACL을 사용하는 객체 업로드만 허용하는 버킷 정책을 추가할 수 있습니다.

    • 객체 작성자(Object writer) – 객체를 업로드하는 AWS 계정은 객체를 소유하고 완전히 제어하며 ACL을 통해 다른 사용자에게 이에 대한 액세스 권한을 부여할 수 있습니다.

    참고

    기본 설정은 버킷 소유자 적용입니다. 기본 설정을 적용하고 ACL을 비활성화된 상태로 유지하려면 s3:CreateBucket 권한만 있으면 됩니다. ACL을 활성화하려면 s3:PutBucketOwnershipControls 권한이 있어야 합니다.

  10. 퍼블릭 액세스 차단을 위한 버킷 설정에서 버킷에 적용할 퍼블릭 액세스 차단 설정을 선택합니다.

    기본적으로, 네 개의 퍼블릭 액세스 차단 설정이 모두 활성화되어 있습니다. 특정 사용 사례에 대해 하나 이상의 설정을 해제해야 하는 경우가 아니라면 모든 설정을 활성화된 상태로 유지하는 것이 좋습니다. 퍼블릭 액세스 차단에 대한 자세한 내용은 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단 섹션을 참조하십시오.

    참고

    모든 퍼블릭 액세스 차단 설정을 활성화하려면 s3:CreateBucket 권한만 있으면 됩니다. 퍼블릭 액세스 차단 설정을 해제하려면 s3:PutBucketPublicAccessBlock 권한이 있어야 합니다.

  11. (선택 사항) Bucket Versioning(버킷 버전 관리)에서 객체 변형을 버킷에 보관할지 여부를 선택할 수 있습니다. 버전 관리에 대한 자세한 내용은 S3 버킷에서 버전 관리 사용 섹션을 참조하십시오.

    버킷의 버전 관리를 비활성화하거나 활성화하려면 Disable(비활성화) 또는 Enable(활성화)을 선택합니다.

  12. (선택 사항) Tags(태그)에서 버킷에 태그를 추가할 수 있습니다. 태그는 스토리지를 분류하는 데 사용되는 키 값 쌍입니다.

    버킷 태그를 추가하려면 Key(키) 및 원하는 경우 Value(값)를 입력하고 Add Tag(태그 추가)를 선택합니다.

  13. 기본 암호화에서 편집을 선택합니다.

  14. 기본 암호화를 구성하려면 암호화 유형에서 다음 중 하나를 선택합니다.

    • Amazon S3 관리형 키(SSE-S3)

    • AWS Key Management Service 키(SSE-KMS)

      중요

      기본 암호화 구성에 대해 SSE-KMS 옵션을 사용할 경우 AWS KMS의 초당 요청 수(RPS) 제한이 적용됩니다. AWS KMS 할당량과 할당량 증대를 요청하는 방법에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 할당량을 참조하십시오.

    버킷과 새 객체는 Amazon S3 관리형 키를 암호화 구성의 기본 수준으로 사용하는 서버 측 암호화로 암호화됩니다. 기본 암호화에 대한 자세한 내용은 Amazon S3 버킷에 대한 기본 서버 측 암호화 동작 설정 섹션을 참조하십시오.

    Amazon S3 서버 측 암호화를 사용하는 데이터 암호화에 대한 자세한 내용은 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 사용 섹션을 참조하십시오.

  15. AWS Key Management Service 키(SSE-KMS)를 선택한 경우 다음을 수행합니다.

    1. AWS KMS 키에서 다음 방법 중 하나로 KMS 키를 지정합니다.

      • 사용 가능한 KMS 키 목록에서 AWS KMS keys 중에서 선택을 선택하고 사용 가능한 키 목록에서 KMS 키를 선택합니다.

        AWS 관리형 키(aws/s3)와 고객 관리형 키가 모두 목록에 표시됩니다. 고객 관리형 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 고객 키 및 AWS 키를 참조하십시오.

      • KMS 키 ARN을 입력하려면 AWS KMS key ARN 입력을 선택하고 나타나는 필드에 KMS 키 ARN을 입력합니다.

      • AWS KMS 콘솔에서 고객 관리형 키를 생성하려면 KMS 키 생성을 선택합니다.

        AWS KMS key 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드키 생성을 참조하십시오.

      중요

      버킷과 동일한 AWS 리전에서 사용할 수 있는 KMS 키만 사용 가능합니다. Amazon S3 콘솔은 버킷과 동일한 리전에 있는 처음 100개의 KMS 키만 나열합니다. 목록에 없는 KMS 키를 사용하려면 KMS 키 ARN을 입력해야 합니다. 다른 계정에서 소유한 KMS 키를 사용하려면 먼저 해당 키에 대한 사용 권한이 있어야 하고, 다음 단계로 KMS 키 ARN을 입력해야 합니다. KMS 키의 크로스 계정 권한에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다른 계정에서 사용할 수 있는 KMS 키 만들기를 참조하십시오. SSE-KMS에 대한 자세한 내용은 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정 섹션을 참조하십시오.

      Amazon S3에서 서버 측 암호화에 AWS KMS key을 사용하는 경우 대칭 암호화 KMS 키를 선택해야 합니다. Amazon S3는 대칭 암호화 KMS 키만 지원하며 비대칭 KMS 키는 지원하지 않습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 대칭 및 비대칭 KMS 키 식별을 참조하십시오.

      AWS KMS key 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드키 생성을 참조하십시오. Amazon S3에서 AWS KMS을(를) 사용하는 방법에 대한 자세한 내용은 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용 단원을 참조하십시오.

    2. SSE-KMS와 함께 기본 암호화를 사용하도록 버킷을 구성할 때 S3 버킷 키를 활성화할 수도 있습니다. S3 버킷 키를 사용하면 Amazon S3에서 AWS KMS로의 요청 트래픽이 줄어 암호화 비용이 절감됩니다. 자세한 내용은 Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감 단원을 참조하십시오.

      S3 버킷 키를 사용하려면 [버킷 키(Bucket Key)]에서 [사용(Enable)]을 선택합니다.

  16. (선택 사항) S3 객체 잠금을 사용 설정하려면 다음을 수행합니다.

    1. 고급 설정(Advanced Settings)을 선택합니다.

      중요

      객체 잠금을 사용 설정하면 버킷의 버전 관리도 사용 설정됩니다. 활성화한 후 새 객체를 삭제하거나 덮어쓰지 않도록 객체 잠금 기본 보존 및 법적 보존 설정을 구성해야 합니다.

    2. 객체 잠금을 활성화하려면 Enable(활성화)을 선택하고 표시되는 경고를 읽고 확인합니다.

    자세한 내용은 S3 객체 잠금 사용 단원을 참조하십시오.

    참고

    객체 잠금을 사용하는 버킷을 생성하려면 s3:CreateBucket, s3:PutBucketVersionings3:PutBucketObjectLockConfiguration 권한이 있어야 합니다.

  17. 버킷 만들기를 선택합니다.

AWS SDK를 사용하여 버킷을 생성하는 경우, 클라이언트를 생성한 다음 이 클라이언트를 사용하여 버킷 생성 요청을 보냅니다. 모범 사례로서, 동일한 AWS 리전에 클라이언트 및 버킷을 만들어야 합니다. 클라이언트나 버킷을 생성할 때 리전을 지정하지 않으면 Amazon S3는 기본 리전인 미국 동부(버지니아 북부)를 사용합니다. 버킷 생성을 특정 AWS 리전 리전으로 제한하려면 LocationConstraint 조건 키를 사용하세요.

클라이언트를 생성하여 듀얼 스택 엔드포인트에 액세스하려면 AWS 리전을 지정해야 합니다. 자세한 내용은 듀얼 스택 엔드포인트 단원을 참조하십시오. 사용할 수 있는 AWS 리전 목록은 AWS 일반 참조의 리전 및 엔드포인트를 참조하세요.

클라이언트를 만들면 리전은 리전별 엔드포인트로 매핑됩니다. 클라이언트는 s3.region.amazonaws.com 엔드포인트를 사용하여 Amazon S3와 통신합니다. 2019년 3월 20일 이후에 리전이 시작된 경우 클라이언트와 버킷이 동일한 리전에 있어야 합니다. 다만 미국 동부(버지니아 북부) 리전의 클라이언트를 사용하면 2019년 3월 20일 이전에 시작된 모든 리전에 버킷을 생성할 수 있습니다. 자세한 내용은 레거시 엔드포인트 섹션을 참조하세요.

이 AWS SDK 코드 예제는 다음 태스크를 수행합니다.

  • AWS 리전을 명시적으로 지정하여 클라이언트 생성 - 이 예에서 클라이언트는 s3.us-west-2.amazonaws.com 엔드포인트를 사용하여 Amazon S3와 통신합니다. AWS 리전을 지정할 수 있습니다. AWS 리전 목록은 AWS 일반 참조의 리전 및 엔드포인트를 참조하세요.

  • 버킷 이름만 지정하여 버킷 생성 요청 전송 - 클라이언트는 Amazon S3로 요청을 전송하여 클라이언트가 생성된 리전에 버킷을 생성합니다.

  • 버킷의 위치에 대한 정보 검색 - Amazon S3는 버킷과 연결된 location 하위 리소스에 버킷 위치 정보를 저장합니다.

Java

이 예제에서는 AWS SDK for Java를 사용하여 Amazon S3 버킷을 생성하는 방법을 보여 줍니다. 실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 Amazon S3 Java 코드 예제 테스트 섹션을 참조하세요.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.CreateBucketRequest; import com.amazonaws.services.s3.model.GetBucketLocationRequest; import java.io.IOException; public class CreateBucket2 { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); if (!s3Client.doesBucketExistV2(bucketName)) { // Because the CreateBucketRequest object doesn't specify a region, the // bucket is created in the region specified in the client. s3Client.createBucket(new CreateBucketRequest(bucketName)); // Verify that the bucket was created by retrieving it and checking its // location. String bucketLocation = s3Client.getBucketLocation(new GetBucketLocationRequest(bucketName)); System.out.println("Bucket location: " + bucketLocation); } } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it and returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예제 실행 섹션을 참조하세요.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using Amazon.S3.Util; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class CreateBucketTest { private const string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); CreateBucketAsync().Wait(); } static async Task CreateBucketAsync() { try { if (!(await AmazonS3Util.DoesS3BucketExistAsync(s3Client, bucketName))) { var putBucketRequest = new PutBucketRequest { BucketName = bucketName, UseClientRegion = true }; PutBucketResponse putBucketResponse = await s3Client.PutBucketAsync(putBucketRequest); } // Retrieve the bucket location. string bucketLocation = await FindBucketLocationAsync(s3Client); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } static async Task<string> FindBucketLocationAsync(IAmazonS3 client) { string bucketLocation; var request = new GetBucketLocationRequest() { BucketName = bucketName }; GetBucketLocationResponse response = await client.GetBucketLocationAsync(request); bucketLocation = response.Location.ToString(); return bucketLocation; } } }
Ruby

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 AWS SDK for Ruby 버전 3 사용 섹션을 참조하세요.

require "aws-sdk-s3" # Wraps Amazon S3 bucket actions. class BucketCreateWrapper attr_reader :bucket # @param bucket [Aws::S3::Bucket] An Amazon S3 bucket initialized with a name. This is a client-side object until # create is called. def initialize(bucket) @bucket = bucket end # Creates an Amazon S3 bucket in the specified AWS Region. # # @param region [String] The Region where the bucket is created. # @return [Boolean] True when the bucket is created; otherwise, false. def create?(region) @bucket.create(create_bucket_configuration: { location_constraint: region }) true rescue Aws::Errors::ServiceError => e puts "Couldn't create bucket. Here's why: #{e.message}" false end # Gets the Region where the bucket is located. # # @return [String] The location of the bucket. def location if @bucket.nil? "None. You must create a bucket before you can get its location!" else @bucket.client.get_bucket_location(bucket: @bucket.name).location_constraint end rescue Aws::Errors::ServiceError => e "Couldn't get the location of #{@bucket.name}. Here's why: #{e.message}" end end # Example usage: def run_demo region = "us-west-2" wrapper = BucketCreateWrapper.new(Aws::S3::Bucket.new("doc-example-bucket-#{Random.uuid}")) return unless wrapper.create?(region) puts "Created bucket #{wrapper.bucket.name}." puts "Your bucket's region is: #{wrapper.location}" end run_demo if $PROGRAM_NAME == __FILE__

또한, AWS Command Line Interface(AWS CLI)를 사용하여 S3 버킷을 생성할 수도 있습니다. 자세한 내용은 AWS CLI 명령 참조의 create-bucket을 참조하세요.

AWS CLI에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서AWS Command Line Interface란 무엇입니까?를 참조하세요.