將物件從 或 複製到目錄儲存貯體 - Amazon Simple Storage Service

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

將物件從 或 複製到目錄儲存貯體

該複製操作會為已存放在 Amazon S3 中的物件建立複本。您可以在目錄儲存貯體和一般用途儲存貯體之間複製物件。您也可以在儲存貯體內以及相同類型的儲存貯體之間複製物件,例如從目錄儲存貯體複製到目錄儲存貯體。

您可以在單一原子操作中建立高達 5 GB 的物件複本。不過,若要複製大於 5 GB 的物件,您必須使用分段上傳 API 操作。如需詳細資訊,請參閱將分段上傳與目錄儲存貯體搭配使用

許可

若要複製物件,您必須具有下列許可:

  • 若要在目錄儲存貯體之間複製物件,您必須具有 s3express:CreateSession 許可。

  • 若要將物件從目錄儲存貯體複製到一般用途儲存貯體,您必須具有 s3express:CreateSession 許可和 s3:PutObject 許可,以將複製的物件寫入目的地儲存貯體。

  • 若要將物件從一般用途儲存貯體複製到目錄儲存貯體,您必須具有讀取所複製來源物件的s3express:CreateSession許可和s3:GetObject許可。

    如需詳細資訊,請參閱 CopyObjectAmazon Simple Storage Service API 參考中。

加密

Amazon S3 會自動加密上傳到 S3 儲存貯體的所有新物件。S3 儲存貯體的預設加密組態一律啟用,且至少設定為使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密。

對於目錄儲存貯體,支援使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 的 SSE-S3 和伺服器端加密。當目的地儲存貯體是目錄儲存貯體時,我們建議您使用所需的加密組態來使用目的地儲存貯體的預設加密,並且不要覆寫儲存貯體的預設加密。然後,使用所需的加密設定自動加密新物件。此外,當您將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體,或在目錄儲存貯體之間,透過 ,不支援 S3 儲存貯體金鑰。 CopyObject。 在此情況下,Amazon S3 AWS KMS 每次針對 KMS 加密的物件提出複製請求時,都會呼叫 。如需在目錄儲存貯體中覆寫加密行為的詳細資訊,請參閱使用 指定伺服器端加密 AWS KMS 以進行新物件上傳

對於一般用途儲存貯體,您可以使用 SSE-S3 (預設值)、伺服器端加密與 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS)、雙層伺服器端加密與 AWS KMS 金鑰 (DSSE-KMS),或使用客戶提供金鑰 (SSE-C) 的伺服器端加密。

如果您提出複製請求,指定 將 DSSE-KMS 或 SSE-C 用於目錄儲存貯體 (來源或目的地儲存貯體),回應會傳回錯誤。

標籤

目錄儲存貯體不支援標籤。如果您將具有標籤的物件從一般用途儲存貯體複製到目錄儲存貯體,則會收到 HTTP 501 (Not Implemented)回應。如需詳細資訊,請參閱 CopyObjectAmazon Simple Storage Service API 參考中。

ETags

S3 Express One Zone 的實體標籤 (ETags) 是隨機英數字串,不是 MD5 總和檢查碼。若要協助確保物件完整性,請使用其他總和檢查碼。

其他檢查總和

S3 Express One Zone 可讓您選擇用於在上傳或下載過程中驗證資料的檢查總和演算法選項。您可以選取下列其中一個安全雜湊演算法 (SHA) 或循環冗餘檢查 (CRC) 資料完整性檢查演算法:CRC32、CRC32C、SHA-1 和 SHA-256。S3 Express One Zone 儲存類別不支援以MD5為基礎的檢查總和。

如需詳細資訊,請參閱S3 其他檢查總和最佳實務

支援的功能

如需 Amazon S3 S3 功能的詳細資訊,請參閱 目錄儲存貯體的差異

注意

使用主控台將物件複製到目錄儲存貯體時的限制如下:

  • Copy動作會套用至指定資料夾 (字首) 中的所有物件。動作進行中時新增至這些資料夾的物件可能會受到影響。

  • 使用客戶提供的加密金鑰 (SSE-C) 加密的物件無法使用 S3 主控台複製。若要複製使用 SSE-C 加密的物件,請使用 AWS CLI、 AWS SDK 或 Amazon S3 RESTAPI。

  • 複製的物件不會保留原始物件的物件鎖定設定。

  • 如果您要從 複製物件的儲存貯體使用 S3 物件擁有權的儲存貯體擁有者強制執行設定,則物件 ACLs 將不會複製到指定的目的地。

  • 如果您想要將物件複製到使用 S3 物件擁有權之儲存貯體擁有者強制執行設定的儲存貯體,請確定來源儲存貯體也使用儲存貯體擁有者強制執行設定,或移除 ACL 授予其他 AWS 帳戶和群組的任何物件。

  • 從一般用途儲存貯體複製到目錄儲存貯體的物件不會保留物件標籤、ACLs 或 Etag 值。總和檢查值可以複製,但與 Etag 不同。相較於新增時的檢查總和值,總和值可能會變更。

  • 複製到目錄儲存貯體的所有物件都會使用 S3 物件擁有權的儲存貯體擁有者強制執行設定。

將物件從一般用途儲存貯體或目錄儲存貯體複製到目錄儲存貯體
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

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

  3. 選擇您要從中複製物件的儲存貯體:

    • 若要從一般用途儲存貯體複製,請選擇一般用途儲存貯體標籤。

    • 若要從目錄儲存貯體複製,請選擇目錄儲存貯體標籤。

  4. 選擇包含您要複製之物件的一般用途儲存貯體或目錄儲存貯體。

  5. 選擇 Objects (物件) 索引標籤。在物件頁面上,選取您要複製之物件名稱左側的核取方塊。

  6. Actions (動作) 功能表上,選擇 Copy (複製)

    複製頁面隨即出現。

  7. 目的地下,選擇目的地類型的目錄儲存貯體。若要指定目的地路徑,請選擇瀏覽 S3、導覽至目的地,然後選擇目的地左側的選項按鈕。選擇右下角的 Choose destination (選擇目的地)。

    或者,輸入目的地路徑。

  8. 其他複製設定下,選擇您要複製來源設定不指定設定指定設定複製來源設定是預設選項。如果您只想要在沒有來源設定屬性的情況下複製物件,請選擇不指定設定。選擇指定設定以指定伺服器端加密、檢查總和和和中繼資料的設定。

  9. 選擇右下角的 Copy (複製)。Amazon S3 會將您的物件複製到目的地。

注意

使用主控台將物件複製到一般用途儲存貯體時的限制如下:

  • Copy動作會套用至指定資料夾 (字首) 中的所有物件。動作進行中時新增至這些資料夾的物件可能會受到影響。

  • 使用客戶提供的加密金鑰 (SSE-C) 加密的物件無法使用 S3 主控台複製。若要複製使用 SSE-C 加密的物件,請使用 AWS CLI、 AWS SDK 或 Amazon S3 RESTAPI。

  • 複製的物件不會保留原始物件的物件鎖定設定。

  • 如果您要從 複製物件的儲存貯體使用 S3 物件擁有權的儲存貯體擁有者強制執行設定,則物件 ACLs 將不會複製到指定的目的地。

  • 如果您想要將物件複製到使用 S3 物件擁有權之儲存貯體擁有者強制執行設定的儲存貯體,請確定來源儲存貯體也使用儲存貯體擁有者強制執行設定,或移除 ACL 授予其他 AWS 帳戶和群組的任何物件。

將物件從目錄儲存貯體複製到一般用途儲存貯體
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

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

  3. 選擇目錄儲存貯體標籤。

  4. 選擇包含您要複製之物件的目錄儲存貯體。

  5. 選擇 Objects (物件) 索引標籤。在物件頁面上,選取您要複製之物件名稱左側的核取方塊。

  6. Actions (動作) 功能表上,選擇 Copy (複製)

  7. 目的地下,為您的目的地類型選擇一般用途儲存貯體。若要指定目的地路徑,請選擇瀏覽 S3、導覽至目的地,然後選擇目的地左側的選項按鈕。選擇右下角的 Choose destination (選擇目的地)。

    或者,輸入目的地路徑。

  8. 其他複製設定下,選擇您要複製來源設定不指定設定指定設定複製來源設定是預設選項。如果您只想要在沒有來源設定屬性的情況下複製物件,請選擇不指定設定。選擇指定設定以指定儲存體類別、ACLs、物件標籤、中繼資料、伺服器端加密和其他檢查總和的設定。

  9. 選擇右下角的 Copy (複製)。Amazon S3 會將您的物件複製到目的地。

SDK for Java 2.x
public static void copyBucketObject (S3Client s3, String sourceBucket, String objectKey, String targetBucket) { CopyObjectRequest copyReq = CopyObjectRequest.builder() .sourceBucket(sourceBucket) .sourceKey(objectKey) .destinationBucket(targetBucket) .destinationKey(objectKey) .build(); String temp = ""; try { CopyObjectResponse copyRes = s3.copyObject(copyReq); System.out.println("Successfully copied " + objectKey +" from bucket " + sourceBucket +" into bucket "+targetBucket); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

下列copy-object範例命令說明如何使用 AWS CLI 將物件從一個儲存貯體複製到另一個儲存貯體。您可以在儲存貯體類型之間複製物件。若要執行此命令,請以您自己的資訊取代使用者輸入預留位置。

aws s3api copy-object --copy-source SOURCE_BUCKET/SOURCE_KEY_NAME --key TARGET_KEY_NAME --bucket TARGET_BUCKET_NAME

如需詳細資訊,請參閱 copy-objectAWS CLI 命令參考 中。