本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 將資料從 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許可的角色。最後,您會執行 copy和 sync命令,將資料從來源 Amazon S3 儲存貯體傳輸到目的地 Amazon S3 儲存貯體。
帳戶擁有上傳至 Amazon S3 儲存貯體的物件。如果您跨帳戶和區域複製物件,您可以授予所複製物件的目的地帳戶擁有權。您可以將物件的存取控制清單 (ACL) 變更為 ,以變更物件的擁有權bucket-owner-full-control。不過,我們建議您將程式設計跨帳戶許可授予目的地帳戶,因為 ACLs可能難以管理多個物件。
此案例需要具有程式設計存取和長期登入資料的 IAM 使用者,這會造成安全風險。為了協助降低此風險,建議您只為這些使用者提供執行任務所需的許可,並在不再需要這些使用者時將其移除。必要時可以更新存取金鑰。如需詳細資訊,請參閱 IAM 文件中的更新存取金鑰。
先決條件和限制
先決條件
限制
Architecture
最佳實務
史詩
| 任務 | Description | 所需的技能 |
|---|
建立 IAM 使用者並取得存取金鑰。 | | 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 儲存貯體政策。 | 登入 AWS 管理主控台 來源帳戶的 ,然後開啟 Amazon S3 主控台。 選擇來源 Amazon S3 儲存貯體,然後選擇許可。 在 Bucket policy (儲存貯體政策) 下方,選擇 Edit (編輯)。 貼上下列儲存貯體政策。請務必包含目的地帳戶的 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"
]
}
]
}
選擇儲存。
| 雲端管理員 |
| 任務 | Description | 所需的技能 |
|---|
建立目的地 Amazon S3 儲存貯體。 | 登入 AWS 管理主控台 目的地帳戶的 ,然後開啟 Amazon S3 主控台。 選擇建立儲存貯體。 根據您的需求建立 Amazon S3 儲存貯體。如需詳細資訊,請參閱 Amazon S3 文件中的建立儲存貯體。
| 雲端管理員 |
| 任務 | Description | 所需的技能 |
|---|
AWS CLI 使用新建立的使用者登入資料設定 。 | | AWS DevOps |
擔任 Amazon S3 遷移角色。 | 使用 AWS CLI 來假設 S3MigrationRole: aws sts assume-role \
--role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \
--role-session-name AWSCLI-Session
此命令會輸出數個資訊片段。在登入資料區塊中,您需要 AccessKeyId、 SecretAccessKey和 SessionToken。此範例使用環境變數 RoleAccessKeyID、 RoleSecretKey和 RoleSessionToken。:工作階段登入資料 (AccessKeyId、 SecretAccessKey和 SessionToken) 是暫時性和非持久性。輸出中的過期時間戳記會指出這些登入資料何時過期。角色已設定工作階段持續時間上限。如果登入資料過期,您必須sts:AssumeRole再次呼叫 以取得新的臨時登入資料。 建立三個環境變數以擔任 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>
執行下列命令,確認您已擔任 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) | 請確定您已擔任角色 S3MigrationRole。 執行 aws sts get-caller-identity以檢查使用的角色。如果輸出未顯示 的 ARNS3MigrationRole,請再次擔任 IAM 角色,然後重試。
|
相關資源