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

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

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

創建者:巴加利(AWS)和普魯斯霍坦 G K()AWS

環境:生產

技術:儲存與備份

AWS服務:AWSCLI; AWS Identity and Access Management; Amazon S3

Summary

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

來源 S3 儲存貯體允許使用附加的資源政策存取AWS身分和存取管理 (IAM)。目的地帳戶中的使用者必須擔任具有來源值區PutObjectGetObject權限的角色。最後,您執行copysync命令將資料從來源 S3 儲存貯體傳輸到目的地 S3 儲存貯體。

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

警告:此案例需要具有程式設計存取權限和長期認證的IAM使用者,這會帶來安全性風險。為了減輕此風險,我們建議您僅向這些使用者提供執行工作所需的權限,並在不再需要這些使用者時移除這些使用者。如有必要,可更新存取金鑰。如需詳細資訊,請參閱《IAM使用指南》中的〈更新存取金鑰

此模式涵蓋一次性移轉。對於需要將新物件從來源儲存貯體連續自動遷移到目的地儲存貯體的案例,您可以改用 S3 Batch 複寫,如使用 S3 Batch 複寫將資料從 S3 儲存貯體複製到另一個帳戶和區域模式中所述。

先決條件和限制

  • 相同或不同AWS地區的兩個活躍AWS帳戶。

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

  • 如果您的來源或目的地 Amazon S3 儲存貯體已啟用預設加密,則必須修改AWS金鑰管理服務 (AWSKMS) 金鑰許可。如需詳細資訊,請參閱有關此主題的 AWSRe: POST 文章

  • 熟悉跨帳戶權限。

架構

將 Amazon S3 資料複製到其他帳戶或區域

工具

最佳實務

史诗

任務描述所需技能

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

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

  2. 為此用戶生成訪問密鑰和密鑰。如需指示,請參閱AWS文件中的AWS帳戶和存取金鑰

AWS DevOps

建立以IAM身分識別為基礎的原則。

使用下列權限建立以IAM身分識別為S3MigrationPolicy基礎的原則。如需詳細步驟,請參閱IAM文件中的建立IAM原則

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexamplesourcebucket", "arn:aws:s3:::awsexamplesourcebucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexampledestinationbucket", "arn:aws:s3:::awsexampledestinationbucket/*" ] } ] }

注意:根據您的使用案例修改來源和目的地值區名稱。

此基於身份的策略允許擔任此角色的使用者存取來源值區和目的地值區。

AWS DevOps

建立 IAM 角色。

建立使用下列信任原則命名S3MigrationRole的IAM角色,然後附加先前建立的角色S3MigrationPolicy。如需詳細步驟,請參閱IAM文件中的建立角色以將權限委派給IAM使用者

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<destination_account>:user/<user_name>" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

附註:根據您的使用案例,修改信任政策中目的地IAM角色或使用者名稱的 Amazon 資源名稱 (ARN)。

此信任策略允許新創建的IAM用戶進行假設S3MigrationRole

AWS DevOps
任務描述所需技能

建立並附加 S3 儲存貯體政策。

登入來源帳戶的AWS管理主控台,然後開啟 Amazon S3 主控台。選擇您的來源 S3 儲存貯體,然後選擇權限。在「值區政策」下,選擇「編輯」,然後貼上下列值區政策。選擇 Save (儲存)。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3Access", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"}, "Action": ["s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexamplesourcebucket/*", "arn:aws:s3:::awsexamplesourcebucket" ] } ] }

注意:請確定您已包含目的地AWS帳戶的帳戶 ID,並根據您的需求設定值區政策範本。

此資源型政策允許目標角色存取S3MigrationRole來源帳戶中的 S3 物件。

雲端管理員
任務描述所需技能

建立目的地 S3 儲存貯體。

登入目的地帳戶的AWS管理主控台,開啟 Amazon S3 主控台,然後選擇「建立儲存貯體」。根據您的需求建立 S3 儲存貯體。如需詳細資訊,請參閱 Amazon S3 文件中的建立儲存貯體。 

雲端管理員
任務描述所需技能

使AWSCLI用新建立的使用者認證進行設定。

  1. 安裝最新版本的 AWSCLI. 如需指示,請參閱AWSCLI文件AWSCLI中的安裝或更新最新版本的

  2. 使用您創建CLI的用戶的AWS訪問密鑰運行$ aws configure並更新。如需詳細資訊,請參閱AWSCLI文件中的組態和認證檔案設定

AWS DevOps

假設 S3 移轉角色。

  1. 使用AWSCLI假設S3MigrationRole

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

    此指令會輸出數條資訊。在認證區塊內,您需要AccessKeyIdSecretAccessKey、和SessionToken。此範例使用環境變數RoleAccessKeyIDRoleSecretKey、和RoleSessionToken。請注意,到期欄位的時間戳記位於UTC時區。時間戳記會指出IAM角色的臨時認證到期的時間。如果臨時登入資料過期,您必須sts:AssumeRoleAPI再次呼叫。

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

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

    aws sts get-caller-identity

如需詳細資訊,請參閱AWS知識中心

AWS管理員

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

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

複製(有關詳細信息,請參閱AWSCLI命令參考):

aws s3 cp s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

同步(如需詳細資訊,請參閱AWSCLI命令參考):

aws s3 sync s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
雲端管理員

故障診斷

問題解決方案

調用ListObjects操作時發生錯誤(AccessDenied):訪問被拒絕

  • 請確定您已擔任該角色S3MigrationRole

  • 運行aws sts get-caller-identity以檢查使用的角色。如果輸出未顯示ARN為S3MigrationRole,請再次假設角色並重試。

相關資源