建立儲存貯體 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立儲存貯體

若要將資料上傳到 Amazon S3,您必須先在其中一個 AWS 區域中建立 Amazon S3 儲存貯體。建立儲存貯體時,必須選擇儲存貯體名稱與區域。您可以選擇性地為儲存貯體選擇其他儲存管理選項。建立儲存貯體後,便無法變更儲存貯體名稱或區域。如需命名儲存貯體的資訊,請參閱「儲存貯體命名規則」。

AWS 帳戶 建立儲存貯體的 擁有它。然後可以上傳任意數目的物件到儲存貯體。根據預設,您在每個 中最多可以建立 100 個儲存貯體 AWS 帳戶。如果您需要更多儲存貯體,您可以為您的帳戶提交配額增加請求。若要了解如何提交增加,請參閱 AWS 一般參考 中的AWS 服務 配額

您可以在每個儲存貯體內存放任意物件數量。如需與 Amazon S3 儲存貯體相關的限制和限制清單,請參閱 儲存貯體配額、限制和限制

S3 物件擁有權是 Amazon S3 儲存貯體層級設定,您可以使用兩者來控制上傳至儲存貯體的物件擁有權,以及停用或啟用存取控制清單 (ACLs)。根據預設,物件擁有權會設定為儲存貯體擁有者強制執行設定,且全部ACLs都會停用。在ACLs停用的情況下,儲存貯體擁有者會擁有儲存貯體中的每個物件,並僅使用 政策管理對資料的存取。

如需詳細資訊,請參閱控制物件的擁有權,並ACLs停用儲存貯體

使用 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 APIs AWS CLI或 AWS SDKs 來建立儲存貯體。如需建立儲存貯體所需許可的詳細資訊,請參閱 Amazon Simple Storage Service 參考 CreateBucket 中的 。 API

  1. 登入 AWS Management Console 並在 開啟 Amazon S3 主控台https://console.aws.amazon.com/s3/

  2. 在頁面頂端的導覽列中,選擇目前顯示的 名稱 AWS 區域。接下來,選擇您要在其中建立儲存貯體的區域。

    注意

    請選擇接近您的區域,以充分降低延遲及成本,並因應法規要求。除非您明確地將存放在區域中的物件傳輸到其他區域,否則物件絕對不會離開該區域。如需 Amazon S3 AWS 區域的清單,請參閱 中的AWS 服務 端點Amazon Web Services 一般參考

  3. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  4. 選擇 Create bucket (建立儲存貯體)。

    Create bucket (建立儲存貯體) 頁面隨即開啟。

  5. 一般組態 下,檢視要建立儲存貯體 AWS 區域 的 。

  6. 儲存貯體類型 下,選擇一般用途

  7. 針對 Bucket name (儲存貯體名稱),輸入儲存貯體的名稱。

    儲存貯體名稱必須;

    • 在分割區內不重複。分割區是區域的群組。 AWS 目前有三個分割區:aws(標準區域)、aws-cn(中國區域) 和 aws-us-gov (AWS GovCloud (US) Regions)。

    • 長度必須介於 3 與 63 個字元之間。

    • 只能由小寫字母、數字、句點 (.) 和連字號 (-) 組成。為了獲得最佳相容性,建議您避免在儲存貯體名稱中使用句點 (.),但僅用於靜態網站託管的儲存貯體除外。

    • 開頭和結尾為字母或數字。

    建立儲存貯體後,便無法變更其名稱。 AWS 帳戶 建立儲存貯體的 擁有它。如需儲存貯體命名的詳細資訊,請參閱 儲存貯體命名規則

    重要

    避免在儲存貯體名稱中包含敏感資訊,例如帳戶號碼。儲存貯體名稱會在URLs指向儲存貯體中物件的 中顯示。

  8. AWS Management Console 可讓您將現有儲存貯體的設定複製到新的儲存貯體。如果您不想複製現有儲存貯體的設定,請跳至下一個步驟。

    注意

    此選項:

    • 無法在 中使用, AWS CLI 且只能在主控台中使用

    • 不適用於目錄儲存貯體

    • 不會將儲存貯體政策從現有儲存貯體複製到新儲存貯體

    若要複製現有儲存貯體的設定,請在從現有儲存貯體 複製設定下,選取選擇儲存貯體 選擇儲存貯體視窗隨即開啟。使用您要複製的設定尋找儲存貯體,然後選取選擇儲存貯體 選擇儲存貯體視窗會關閉,而建立儲存貯體視窗會重新開啟。

    從現有儲存貯體 複製設定下,您現在將看到所選儲存貯體的名稱。您也會看到還原預設值選項,可用來移除複製的儲存貯體設定。在建立儲存貯體頁面上檢閱剩餘的儲存貯體設定。您會看到它們現在與您選取的儲存貯體的設定相符。您可以跳至最後一個步驟。

  9. 物件擁有權 下,若要停用或啟用ACLs和控制在儲存貯體中上傳之物件的擁有權,請選擇下列其中一項設定:

    ACLs 已停用
    • 已強制執行儲存貯體擁有者 (預設) – ACLs 已停用,且儲存貯體擁有者會自動擁有並完全控制儲存貯體中的每個物件。ACLs 不再影響對 S3 儲存貯體中資料的存取許可。儲存貯體單獨使用政策來定義存取控制。

      預設為ACLs停用。Amazon S3 中的大多數現代使用案例不再需要使用 ACLs。建議您保持ACLs停用狀態,除非在異常情況下,您必須個別控制每個物件的存取。如需詳細資訊,請參閱控制物件的擁有權,並ACLs停用儲存貯體

    ACLs 已啟用
    • 儲存貯體擁有者優先 – 儲存貯體擁有者擁有並完全控制其他帳戶使用bucket-owner-full-control固定 寫入儲存貯體的新物件ACL。

      如果您套用儲存貯體擁有者偏好設定,若要要求所有 Amazon S3 上傳都包含bucket-owner-full-control固定 ACL,您可以新增僅允許使用此 的物件上傳的儲存貯體政策ACL。

    • 物件寫入器 – 上傳物件 AWS 帳戶 的 擁有物件,擁有物件的完整控制權,並可透過 授予其他使用者存取權ACLs。

    注意

    預設設定為儲存貯體擁有者強制執行。若要套用預設設定並保持ACLs停用,只需要 s3:CreateBucket許可。若要啟用 ACLs,您必須擁有 s3:PutBucketOwnershipControls許可。

  10. 封鎖此儲存貯體的公開存取設定之下,選擇要套用至儲存貯體的封鎖公開存取設定。

    根據預設,會啟用全部四個「封鎖公開存取」設定。建議您將所有設定保持啟用狀態,除非您知道需要針對特定使用案例關閉其中一或多個設定。如需封鎖公開存取的詳細資訊,請參閱 封鎖對 Amazon S3 儲存體的公開存取權

    注意

    若要啟用所有「封鎖公用存取」設定,只需要 s3:CreateBucket 許可。若要關閉任何「封鎖公開存取」設定,您必須具有 s3:PutBucketPublicAccessBlock 許可。

  11. (選用) 在 Bucket Versioning (儲存貯體版本控制) 下,您可以選擇是否要在儲存貯體中保留物件的變體。如需版本控制的詳細資訊,請參閱「使用 S3 版本控制保留多個版本的物件」。

    若要對儲存貯體停用或啟用版本控制,請選擇 Disable (停用) 或 Enable (啟用)。

  12. (選用) 在 Tags (標籤) 下,您可以選擇新增標籤至儲存貯體。標籤是用來分類儲存的鍵值對。

    若要新增儲存貯體標籤,請輸入 Key (金鑰) 並選擇性地輸入 Value (值),然後選擇 Add tag (新增標籤)。

  13. Default encryption (預設加密) 底下,選擇 Edit (編輯)

  14. 若要設定預設加密,請在加密類型下,選擇下列其中一項:

    • Amazon S3 受管金鑰 (SSE-S3)

    • AWS Key Management Service 金鑰 (SSE-KMS)

      重要

      如果您將 SSE-KMS 選項用於預設加密組態,則您每秒會受到 (RPS) 配額的請求 AWS KMS。如需 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,然後在出現ARN的欄位中輸入您的KMS金鑰。

      • 若要在 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 開發人員指南 中的建立金鑰。如需 AWS KMS 搭配 Amazon S3 使用 的詳細資訊,請參閱 使用伺服器端加密與 AWS KMS 金鑰 (SSE-KMS)

    2. 當您將儲存貯體設定為搭配 SSE- 使用預設加密時KMS,您也可以啟用 S3 儲存貯體金鑰。S3 儲存貯體金鑰透過將請求流量從 Amazon S3 減少到 來降低加密成本 AWS KMS。如需詳細資訊,請參閱SSE使用 Amazon S3 儲存貯體金鑰降低 KMS的成本

      若要使用 S3 儲存貯體金鑰,在 Bucket Key (儲存貯體金鑰) 下選擇 Enable (啟用)

  16. (選用) 如果您想要啟用 S3 物件鎖定,請執行下列動作:

    1. 選擇 Advanced settings (進階設定)

      重要

      啟用物件鎖定也會啟用儲存貯體的版本控制。啟用後,您必須設定「物件鎖定」預設保留和合法保留設定,以防止新物件遭到刪除或覆寫。

    2. 如果想要啟用物件鎖定,請選擇 Enable (啟用)、讀取出現的警告並確認。

    如需詳細資訊,請參閱使用物件鎖定鎖定物件

    注意

    若要建立已啟用物件鎖定的儲存貯體,您必須具備下列許可:s3:CreateBuckets3:PutBucketVersionings3:PutBucketObjectLockConfiguration

  17. 選擇建立儲存貯體

使用 AWS SDKs建立儲存貯體時,您必須建立用戶端,然後使用用戶端傳送建立儲存貯體的請求。最佳實務是,您應該在同一個 AWS 區域中建立用戶端和儲存貯體。如果您在建立用戶端或儲存貯體時未指定區域,則 Amazon S3 會使用預設的美國東部 (維吉尼亞北部) 區域。如果您將儲存貯體建立限於特定  AWS 區域,請使用 LocationConstraint 條件金鑰。

若要建立用戶端來存取雙堆疊端點,您必須指定 AWS 區域。如需詳細資訊,請參閱 Amazon S3 參考 中的使用 Amazon S3 雙堆疊端點Amazon S3 API 如需可用 的清單 AWS 區域,請參閱中的區域和端點AWS 一般參考

建立用戶端時,區域會對應至區域特定的端點。用戶端會使用此端點來與 Amazon S3:s3.region.amazonaws.com 通訊。如果您的區域在 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 儲存貯體。如需建立和測試工作範例的指示,請參閱 AWS SDK for 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

如需有關如何建立和測試工作範例的資訊,請參閱 AWS SDK for 。NET 第 3 版API參考

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("amzn-s3-demo-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