View a markdown version of this page

使用 將資料從 Amazon S3 儲存貯體複製到另一個帳戶和區域 AWS CLI - AWS 方案指引

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

使用 將資料從 Amazon S3 儲存貯體複製到另一個帳戶和區域 AWS CLI

Appasaheb Bagali 和 Purushotham G K,Amazon Web Services

摘要

此模式說明如何將資料從 AWS 帳戶中的來源 Amazon Simple Storage Service (Amazon S3) 儲存貯體遷移到另一個 AWS 帳戶中的目的地 Amazon S3 儲存貯體,無論是在相同 AWS 區域 或不同區域中。

來源 Amazon S3 儲存貯體允許 AWS Identity and Access Management (IAM) 使用連接的資源政策進行存取。目的地帳戶中的使用者必須擔任具有來源儲存貯體PutObject 和 GetObject許可的角色。最後,您會執行 copysync命令,將資料從來源 Amazon S3 儲存貯體傳輸到目的地 Amazon S3 儲存貯體。

帳戶擁有上傳至 Amazon S3 儲存貯體的物件。如果您跨帳戶和區域複製物件,您可以授予所複製物件的目的地帳戶擁有權。您可以將物件的存取控制清單 (ACL) 變更為 ,以變更物件的擁有權bucket-owner-full-control。不過,我們建議您將程式設計跨帳戶許可授予目的地帳戶,因為 ACLs可能難以管理多個物件。

警告

此案例需要具有程式設計存取和長期登入資料的 IAM 使用者,這會造成安全風險。為了協助降低此風險,建議您只為這些使用者提供執行任務所需的許可,並在不再需要這些使用者時將其移除。必要時可以更新存取金鑰。如需詳細資訊,請參閱 IAM 文件中的更新存取金鑰

先決條件和限制

先決條件

  • 相同或不同 AWS 帳戶 中的兩個作用中 AWS 區域。

  • 來源帳戶中現有的 Amazon S3 儲存貯體。 

  • 如果您的來源或目的地 Amazon S3 儲存貯體已啟用預設加密,您必須修改 AWS Key Management Service (AWS KMS) 金鑰許可。如需詳細資訊,請參閱本主題的 AWS re:Post 文章

  • 熟悉跨帳戶許可。

限制

  • 此模式涵蓋一次性遷移。對於需要持續自動將新物件從來源儲存貯體遷移到目的地儲存貯體的情況,您可以使用 Amazon S3 批次複寫

  • 此模式使用暫時性和非持久性的工作階段登入資料 AccessKeyId(SecretAccessKey、 和 SessionToken)。輸出中的過期時間戳記會指出這些登入資料何時過期。角色已設定工作階段持續時間上限。如果工作階段過期,複製任務將會取消。

Architecture

將 Amazon S3 資料複製到另一個帳戶或區域

工具

最佳實務

史詩

任務Description所需的技能

建立 IAM 使用者並取得存取金鑰。

  1. 登入 AWS 管理主控台 並建立具有程式設計存取權的 IAM 使用者。如需詳細說明,請參閱 IAM 文件中的建立 IAM 使用者。不需要為此使用者連接任何政策。

  2. 為此使用者產生存取金鑰和私密金鑰。如需說明,請參閱 AWS 文件中的 AWS 帳戶 和 存取金鑰

AWS DevOps

建立 IAM 身分型政策。

使用以下許可建立名為 S3MigrationPolicy的 IAM 身分型政策。根據您的使用案例修改來源和目的地儲存貯體名稱。此身分型政策允許擔任此角色的使用者存取來源儲存貯體和目的地儲存貯體。如需詳細說明,請參閱 IAM 文件中的建立 IAM 政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListObjectsV2", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::amazon-s3-demo-source-bucket", "arn:aws:s3:::amazon-s3-demo-source-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging", "s3:GetObjectTagging", "s3:ListObjectsV2", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::amazon-s3-demo-destination-bucket", "arn:aws:s3:::amazon-s3-demo-destination-bucket/*" ] } ] }
AWS DevOps

建立 IAM 角色。

使用以下信任政策建立名為 S3MigrationRole的 IAM 角色。根據您的使用案例修改信任政策中目的地 IAM 角色或使用者名稱的 Amazon Resource Name (ARN)。此信任政策允許新建立的 IAM 使用者擔任 S3MigrationRole。連接先前建立的 S3MigrationPolicy。如需詳細步驟,請參閱《IAM 文件》中的建立角色以將許可委派給 IAM 使用者

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<destination_account>:user/<user_name>" }, "Action": "sts:AssumeRole", "Condition": {} } ] }
AWS DevOps
任務Description所需的技能

建立並連接 Amazon S3 儲存貯體政策。

  1. 登入 AWS 管理主控台 來源帳戶的 ,然後開啟 Amazon S3 主控台。

  2. 選擇來源 Amazon S3 儲存貯體,然後選擇許可

  3. Bucket policy (儲存貯體政策) 下方,選擇 Edit (編輯)

  4. 貼上下列儲存貯體政策。請務必包含目的地帳戶的 AWS 帳戶 ID,並根據您的需求設定儲存貯體政策範本。此資源型政策允許目的地角色S3MigrationRole存取來源帳戶中的 Amazon S3 物件。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3Access", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"}, "Action": ["s3:ListBucket", "s3:GetObject", "s3:ListObjectsV2", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::amazon-s3-demo-source-bucket/*", "arn:aws:s3:::amazon-s3-demo-source-bucket" ] } ] }
  5. 選擇儲存

雲端管理員
任務Description所需的技能

建立目的地 Amazon S3 儲存貯體。

  1. 登入 AWS 管理主控台 目的地帳戶的 ,然後開啟 Amazon S3 主控台。

  2. 選擇建立儲存貯體

  3. 根據您的需求建立 Amazon S3 儲存貯體。如需詳細資訊,請參閱 Amazon S3 文件中的建立儲存貯體。 

雲端管理員
任務Description所需的技能

AWS CLI 使用新建立的使用者登入資料設定 。

  1. 安裝最新版本的 AWS CLI。如需說明,請參閱 AWS CLI 文件中的安裝或更新 的最新版本 AWS CLI

  2. AWS CLI 使用您建立之 IAM 使用者的 AWS 存取金鑰執行$ aws configure和更新。如需詳細資訊,請參閱 AWS CLI 文件中的組態和登入資料檔案設定

AWS DevOps

擔任 Amazon S3 遷移角色。

  1. 使用 AWS CLI 來假設 S3MigrationRole

    aws sts assume-role \ --role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \ --role-session-name AWSCLI-Session
    注意

    此命令會輸出數個資訊片段。在登入資料區塊中,您需要 AccessKeyIdSecretAccessKeySessionToken。此範例使用環境變數 RoleAccessKeyIDRoleSecretKeyRoleSessionToken。:工作階段登入資料 (AccessKeyIdSecretAccessKeySessionToken) 是暫時性和非持久性。輸出中的過期時間戳記會指出這些登入資料何時過期。角色已設定工作階段持續時間上限。如果登入資料過期,您必須sts:AssumeRole再次呼叫 以取得新的臨時登入資料。

  2. 建立三個環境變數以擔任 IAM 角色。這些環境變數會以下列輸出完成:

    # Linux export AWS_ACCESS_KEY_ID=<RoleAccessKeyID from command output> export AWS_SECRET_ACCESS_KEY=<RoleSecretKey from command output> export AWS_SESSION_TOKEN=<RoleSessionToken from command output> # Windows set AWS_ACCESS_KEY_ID=<RoleAccessKeyID from command output> set AWS_SECRET_ACCESS_KEY=<RoleSecretKey from command output> set AWS_SESSION_TOKEN=<RoleSessionToken from command output>
  3. 執行下列命令,確認您已擔任 IAM 角色:

    aws sts get-caller-identity

如需詳細資訊,請參閱如何使用 AWS CLI 擔任 IAM 角色?

AWS 管理員

將來源儲存貯體中的資料複製並同步到目的地儲存貯體。

當您擔任角色時S3MigrationRole,您可以使用複製 (cp) 或同步 (sync) 命令來複製資料。

複製:

aws s3 cp s3://amazon-s3-demo-source-bucket/ \ s3://amazon-s3-demo-destination-bucket/ \ --recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

同步:

aws s3 sync s3://amazon-s3-demo-source-bucket/ \ s3://amazon-s3-demo-destination-bucket/ \ --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
雲端管理員

疑難排解

問題解決方案

呼叫 ListObjects操作時發生錯誤 (AccessDenied)

  1. 請確定您已擔任角色 S3MigrationRole

  2. 執行 aws sts get-caller-identity以檢查使用的角色。如果輸出未顯示 的 ARNS3MigrationRole,請再次擔任 IAM 角色,然後重試。

相關資源