使用 開始使用 Amazon S3 AWS CLI - Amazon Simple Storage Service

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

使用 開始使用 Amazon S3 AWS CLI

您可以使用 AWS Command Line Interface (AWS CLI) 來使用一般用途儲存貯體和物件,以開始使用 Amazon S3。儲存貯體是物件的容器。物件是一個檔案和任何描述該檔案的中繼資料。

若要將物件存放在 Amazon S3 中,您需要建立儲存貯體,然後將物件上傳到儲存貯體。當物件在儲存貯體中時,您可以開啟、下載和移動它。當您不再需要物件或儲存貯體時,可以清理這些資源。

使用 Amazon S3,您只需按實際用量付費。如需 Amazon S3 功能和定價的詳細資訊,請參閱 Amazon S3。若您是 Amazon S3 新客戶,可以免費試用 Amazon S3。如需詳細資訊,請參閱 AWS 免費方案

注意

如需將 Amazon S3 Express One Zone 儲存類別與目錄儲存貯體搭配使用的詳細資訊,請參閱 教學課程:開始使用 S3 Express One Zone使用目錄儲存貯體

設定

開始 AWS CLI 搭配 Amazon S3 使用 之前,請確定您已:

若要驗證 AWS CLI 是否已正確設定,請執行下列命令:

aws sts get-caller-identity

如需詳細資訊,請參閱《 AWS CLI 命令參考》中的 get-caller-identity

如果 AWS CLI 已正確安裝和設定,此命令會顯示可用的 Amazon S3 命令清單。

步驟 1:建立您的第一個 Amazon S3 儲存貯體

設定 之後 AWS CLI,您就可以在 Amazon S3 中建立儲存貯體。Amazon S3 中的每個物件都會存放在儲存貯體中。您必須先建立儲存貯體,才能將資料存放至 Amazon S3。

注意

不會向您收取儲存貯體建立費用。只會向您收取在儲存貯體中存放物件以及物件進出儲存貯體的費用。遵循本指南中範例而產生的費用極小 (低於 1 USD)。如需儲存成本的詳細資訊,請參閱 Amazon S3 定價

建立儲存貯體
  1. 使用 s3api create-bucket命令建立儲存貯體。amzn-s3-demo-bucket 將 取代為唯一的儲存貯體名稱,並將 取代us-east-1為您想要的區域:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1

    對於 us-east-1 以外的區域,您需要指定位置限制條件:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2
    注意
    • 建立儲存貯體後,您無法變更其區域。

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

    • 儲存貯體名稱必須;

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

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

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

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

    • 建立儲存貯體後,便無法變更其名稱。

    • 請勿在儲存貯體名稱中包含敏感資訊。在指向儲存貯體中之物件的 URL 中,會顯示儲存貯體名稱。

  2. 透過列出所有儲存貯體,確認您的儲存貯體已建立:

    aws s3 ls
  3. 對於物件擁有權,您可以停用或啟用 ACLs並控制上傳到儲存貯體的物件擁有權。

    已停用 ACLs

    若要設定儲存貯體擁有者強制執行 (預設) – ACLs已停用,且儲存貯體擁有者會自動擁有並完全控制一般用途儲存貯體中的每個物件:

    aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"
    注意

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

    已啟用 ACLs

    • 若要設定儲存貯體擁有者偏好 – 儲存貯體擁有者擁有並完全控制其他帳戶使用bucket-owner-full-control標準 ACL 寫入儲存貯體的新物件:

      aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerPreferred}]"

      如果您套用儲存貯體擁有者偏好設定,並想要要求所有 Amazon S3 上傳包含bucket-owner-full-control標準 ACL,則只能需要適用於 Amazon S3 PUT 操作的 bucket-owner-full-control 固定 ACL (儲存貯體擁有者偏好)允許使用此 ACL 的物件上傳。

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

      aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"
    注意

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

    若要檢查儲存貯體目前的物件擁有權設定:

    aws s3api get-bucket-ownership-controls --bucket amzn-s3-demo-bucket
  4. 若要確認已啟用封鎖公開存取 (新儲存貯體預設為啟用):

    aws s3api get-public-access-block --bucket amzn-s3-demo-bucket

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

    如果您需要啟用封鎖公開存取,請使用下列命令:

    aws s3api put-public-access-block --bucket amzn-s3-demo-bucket --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
    注意

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

  5. 若要啟用儲存貯體的版本控制:

    aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket --versioning-configuration Status=Enabled

    根據預設,儲存貯體版本控制已停用。版本控制是在相同儲存貯體中保留多個物件版本的方式。您可以使用版本控制功能來保留、擷取和恢復在 儲存貯體中所存放每個物件的各個版本。透過版本控制,您可以更輕鬆地復原失誤的使用者動作和故障的應用程式。如需版本控制的詳細資訊,請參閱「使用 S3 版本控制保留多個版本的物件」。

  6. Amazon S3 物件鎖定有助於保護新物件免遭刪除或覆寫。如需詳細資訊,請參閱使用物件鎖定來鎖定物件。若要啟用 使用物件鎖定來鎖定物件(需要儲存貯體版本控制):

    對於新的儲存貯體:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1 --object-lock-enabled-for-bucket

    對於現有的儲存貯體:

    aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled": "Enabled"}'

    如果您想要設定預設值使用物件鎖定來鎖定物件並啟用物件鎖定,您可以使用:

    aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled":"Enabled","Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":30}}}'

    對於限制較少的模式,您可以將 "COMPLIANCE" 取代"GOVERNANCE"為 ,並視需要調整天數。

    注意

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

  7. 您可以將標籤新增至儲存貯體。透過 AWS 成本分配,您可以使用儲存貯體標籤來註釋使用儲存貯體的帳單。標籤為一組金鑰/值對,代表指派給儲存貯體的標籤。如需詳細資訊,請參閱使用成本分配 S3 儲存貯體標籤

    若要將標籤新增至儲存貯體:

    aws s3api put-bucket-tagging --bucket amzn-s3-demo-bucket --tagging 'TagSet=[{Key=Purpose,Value=Testing},{Key=Environment,Value=Development}]'
  8. 儲存貯體和新物件會使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) 做為加密組態的基本層級來加密。若要驗證儲存貯體的預設加密,請使用下列命令:

    aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket

    您也可以為儲存貯體設定使用 AWS KMS 金鑰 (SSE-KMS) 的伺服器端加密,以及使用 AWS KMS 金鑰 (DSSE-KMS) 的雙層伺服器端加密。 AWS 受管金鑰 (aws/s3) 和您的客戶受管金鑰都可以用作 SSE-KMSDSSE-KMS加密組態的 AWS KMS 金鑰。如需客戶受管金鑰的詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的客戶金鑰和 AWS 金鑰。如需建立 AWS KMS 金鑰的詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的建立金鑰

    重要

    AWS KMS 金鑰必須與 Amazon S3 儲存貯體位於相同的 AWS 區域。Amazon S3 儲存貯體加密不支援跨區域 KMS 金鑰。

    當您將儲存貯體設定為搭配 SSE-KMS 使用預設加密時,您也可以使用 Amazon S3 儲存貯體金鑰。Amazon S3 儲存貯體金鑰透過減少來自 Amazon S3 的請求流量來降低加密成本 AWS KMS。如需詳細資訊,請參閱使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本。DSSE-KMS 不支援 Amazon S3 儲存貯體金鑰。在 中 AWS CLI,Amazon S3 儲存貯體金鑰在建立新儲存貯體時預設不會啟用。這與主控台行為不同,主控台行為預設為啟用。

    若要設定SSE-KMS和啟用 Amazon S3 儲存貯體金鑰:

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration "{\"Rules\":[{\"ApplyServerSideEncryptionByDefault\":{\"SSEAlgorithm\":\"aws:kms\",\"KMSMasterKeyID\":\"YOUR-KMS-KEY-ARN\"},\"BucketKeyEnabled\":true}]}"

    若要檢查儲存貯體是否已啟用 Amazon S3 儲存貯體金鑰:

    aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket

    輸出將包含設定為 trueBucketKeyEnabled的欄位false

    若要設定 DSSE-KMS,請使用下列命令:

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms:dsse","KMSMasterKeyID":"YOUR-KMS-KEY-ARN"}}]}'

    如需預設加密的詳細資訊,請參閱對 Amazon S3 儲存貯體設定預設伺服器端加密行為。如需 SSE-S3 的詳細資訊,請參閱 使用 Amazon S3 受管金鑰 (SSE-S3) 進行伺服器端加密

    重要

    如果您使用 SSE-KMS 或 DSSE-KMS 選項進行預設加密組態,則需遵守 的每秒請求數 (RPS) 配額 AWS KMS。您可以啟用 Amazon S3 儲存貯體金鑰來減少 KMS API 呼叫,這會減少傳送的請求數量 AWS KMS。如需 AWS KMS 配額以及如何請求提高配額的詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的配額

您已在 Amazon S3 中建立儲存貯體。下一步是將物件上傳至您的儲存貯體。

步驟 2:將物件上傳至您的儲存貯體

在 Amazon S3 中建立儲存貯體後,即可將物件上傳至儲存貯體。物件可以是任何類型的檔案:文字檔、相片、影片等等。

將物件上傳至儲存貯體
  1. 建立要上傳的簡單文字檔案。您可以使用任何文字編輯器或執行下列命令:

    echo 'Hello, Amazon S3!' > example.txt
  2. 使用 s3 cp 命令將檔案上傳至您的儲存貯體:

    aws s3 cp example.txt s3://amzn-s3-demo-bucket/

    如果上傳成功,您會看到類似以下的輸出:

    upload: ./example.txt to s3://amzn-s3-demo-bucket/example.txt
  3. 透過列出儲存貯體的內容,確認物件已上傳:

    aws s3 ls s3://amzn-s3-demo-bucket/

您已經成功將物件上傳至您的儲存貯體中。下一步是下載 物件。

步驟 3:下載物件

上傳物件到儲存貯體後,您可以檢視物件的相關資訊,並將物件下載至您的本機電腦。

從 Amazon S3 儲存貯體下載物件
  1. 若要取得物件的相關資訊:

    aws s3api head-object --bucket amzn-s3-demo-bucket --key example.txt

    此命令會傳回物件的中繼資料,包括其內容類型、內容長度和上次修改的日期。

  2. 將物件下載到您的本機電腦:

    aws s3 cp s3://amzn-s3-demo-bucket/example.txt downloaded-example.txt

    如果下載成功,您會看到類似以下的輸出:

    download: s3://amzn-s3-demo-bucket/example.txt to ./downloaded-example.txt
  3. 驗證下載檔案的內容:

    cat downloaded-example.txt
注意
  • 與 主控台不同, AWS CLI 可以使用萬用字元或 --recursive旗標一次下載多個物件。

  • 下載具有 的物件時 AWS CLI,會保留物件金鑰名稱結尾的句點 (.),與移除物件的主控台不同。如果您的物件金鑰以句點結尾,這很重要。

下載多個物件的範例:

若要從具有特定副檔名的 Amazon S3 儲存貯體下載多個物件,請使用遞迴複製命令搭配 excludeinclude篩選條件,如範例所示。

aws s3 cp s3://amzn-s3-demo-bucket/ . --recursive --exclude "*" --include "*.txt"

您已成功下載您的物件。下一步是將物件複製到資料夾。

步驟 4:將物件複製到資料夾

您已將物件新增至儲存貯體,並已下載了物件。現在,您可以建立資料夾,並將物件複製到資料夾。

將物件複製到資料夾
  1. 在 Amazon S3 中,資料夾會以物件索引鍵中的字首表示。透過複製字首為 的物件來建立「資料夾」:

    aws s3 cp s3://amzn-s3-demo-source-bucket/example.txt s3://amzn-s3-demo-destination-bucket/favorite-files/example.txt

    如果複製成功,您會看到類似以下的輸出:

    copy: s3://amzn-s3-demo-source-bucket/example.txt to s3://amzn-s3-demo-destination-bucket/favorite-files/example.txt
  2. 透過列出資料夾的內容來確認物件已複製:

    aws s3 ls s3://amzn-s3-demo-destination-bucket/favorite-files/

您已成功將物件複製到資料夾。下一步是刪除物件和儲存貯體。

步驟 5:刪除物件和儲存貯體

當您不再需要物件或儲存貯體時,我們建議您將其刪除,以免繼續產生費用。如果您已完成此入門演練作為學習練習,但不打算使用儲存貯體或物件,建議您將其刪除,以免繼續產生費用。

刪除儲存貯體之前,必須清空儲存貯體或刪除儲存貯體中的物件。刪除物件和儲存貯體後,就無法再使用這些物件。

如果您想要繼續使用相同的儲存貯體名稱,建議您刪除物件或清空儲存貯體,但不要刪除該儲存貯體。刪除儲存貯體之後,該名稱就可以重複使用。不過,在您有機會重複使用儲存貯體之前,另一個 AWS 帳戶可能會建立同名的儲存貯體。

刪除物件

如果您想要選擇刪除的物件,而不清空儲存貯體中的所有物件,則可以刪除物件。

刪除特定物件:

aws s3 rm s3://amzn-s3-demo-bucket/example.txt

如果刪除成功,您會看到類似以下的輸出:

delete: s3://amzn-s3-demo-bucket/example.txt

將儲存貯體清空

如果您打算刪除儲存貯體,您必須先清空儲存貯體,這會刪除儲存貯體中的所有物件、版本和刪除標記。

清空儲存貯體
重要

清空儲存貯體無法復原。清空儲存貯體動作正在進行時在儲存貯體中新增的物件將會遭到刪除。

  1. 選項 1:對於較小的儲存貯體,請使用 rm命令搭配 --recursive旗標來刪除儲存貯體中的所有物件:

    aws s3 rm s3://amzn-s3-demo-bucket --recursive

    此命令會刪除儲存貯體中的所有物件,包括資料夾中的物件。

    注意

    如果您的儲存貯體包含許多物件或大型物件,此命令可能會逾時。對於具有大量資料的儲存貯體,請使用 Amazon S3 生命週期規則來使儲存貯體中的物件過期。

    選項 2:使用 Amazon S3 生命週期規則 (建議用於大型儲存貯體)

    對於具有許多物件或大型物件的儲存貯體,請使用 Amazon S3 生命週期規則來自動過期和刪除所有物件。等待生命週期規則處理 (最多可能需要 24 小時)。如需使用生命週期規則清空儲存貯體的詳細資訊,請參閱如何使用生命週期組態規則清空 Amazon S3 儲存貯體?

  2. 確認儲存貯體是空的:

    aws s3 ls s3://amzn-s3-demo-bucket
  3. 如果您的儲存貯體已啟用版本控制,請使用下列命令來刪除版本控制的物件和刪除標記。

    移除版本控制的物件:

    aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"

    移除刪除標記:

    aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}')"
  4. 確認儲存貯體沒有所有物件版本,並刪除標記:

    aws s3api list-object-versions --bucket amzn-s3-demo-bucket

    輸出不應顯示任何剩餘的版本或刪除標記。

刪除儲存貯體

清空儲存貯體或刪除儲存貯體中的所有物件後,您就可以刪除儲存貯體。

重要

刪除儲存貯體無法復原。儲存貯體名稱是唯一的。如果您刪除儲存貯體,其他 AWS 使用者可以使用該名稱。若希望繼續使用相同的儲存貯體名稱,請勿刪除該儲存貯體。反之,請清空並保留儲存貯體。

刪除儲存貯體
  1. 刪除您的儲存貯體:

    aws s3api delete-bucket --bucket amzn-s3-demo-bucket
  2. 透過列出所有儲存貯體,確認儲存貯體已刪除:

    aws s3 ls

後續步驟

在上述範例中,您已了解如何使用 執行一些基本的 Amazon S3 任務 AWS CLI。

下列各主題說明您可用於更深入了解 Amazon S3 以在應用程式中進行實作的學習路徑。

下列清單顯示 Amazon S3 的常見 AWS CLI 命令:

  • cp – 在本機檔案系統和 Amazon S3 之間或在 Amazon S3 位置之間複製檔案或物件

  • ls – 列出指定儲存貯體和字首下的 Amazon S3 物件和常見字首

  • mb – 建立 Amazon S3 儲存貯體

  • mv – 在本機檔案系統和 Amazon S3 之間或在 Amazon S3 位置之間移動檔案或物件

  • 預先簽章 – 產生 Amazon S3 物件的預先簽章 URL,允許在沒有 AWS 登入資料的情況下進行臨時存取

  • rb – 移除空的 Amazon S3 儲存貯體。您可以使用 --force旗標自動清空,並在單一命令中刪除包含內容的儲存貯體。這個動作無法復原。

  • rm – 從 Amazon S3 刪除物件

  • 同步 – 透過遞迴將新的和更新的檔案從來源目錄複製到目的地,來同步目錄和 Amazon S3 字首。

  • 網站 – 將儲存貯體設定為靜態網站

如需 Amazon S3 AWS CLI 命令的詳細資訊,請參閱下列資源:

  • s3 – 簡化常見操作的高階 Amazon S3 命令

  • s3api – 直接存取所有 Amazon S3 API 操作

  • s3control – 直接存取所有 Amazon S3 Control API 操作