跳至內容

如何對跨帳戶 Amazon S3 複寫問題進行疑難排解?

2 分的閱讀內容
0

一個 AWS 帳戶中來源 Amazon Simple Storage Service (Amazon S3) 儲存貯體中的物件無法複製到另一個 AWS 帳戶的目的地儲存貯體中。 

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

查看與複寫 IAM 角色箱關聯的 IAM 政策

若要解決 Amazon S3 複寫失敗的問題,請確認您已授予正確的權限

如果您的來源儲存貯體物件包含標籤,請確認複寫 AWS Identity and Access Management (IAM) 角色和目的地儲存貯體的政策允許 s3:ReplicateTags 動作。

如果您將複寫規則設為將物件擁有權變更為目的地儲存貯體擁有者,則 IAM 角色必須具有 s3:ObjectOwnerOverrideToBucketOwner 權限。

S3 複寫規則會自動建立具有必要權限的複寫 IAM 角色。

複寫 IAM 角色的 IAM 政策範例:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetReplicationConfiguration",
            "s3:ListBucket"
         ],
         "Resource":[
            "arn:aws:s3:::amzn-s3-demo-source-bucket"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetObjectVersionForReplication",
            "s3:GetObjectVersionAcl",
            "s3:GetObjectVersionTagging"
         ],
         "Resource":[
            "arn:aws:s3:::amzn-s3-demo-source-bucket/"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ReplicateObject",
            "s3:ReplicateDelete",
            "s3:ReplicateTags",
            "s3:ObjectOwnerOverrideToBucketOwner"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/"
      }
   ]
}

如果您是手動建立 IAM 角色,請建立信任政策以允許 Amazon S3 承擔該角色。然後,使用 IAM 主控台AWS CLI 附加政策。

信任政策範例:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"s3.amazonaws.com"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}

為目的地儲存貯體政策新增必要的權限

確認目的地儲存貯體政策允許來源帳戶的複寫 IAM 角色複寫物件。

以下權限新增到儲存貯體政策中:

  • s3:ReplicateDelete
  • s3:ReplicateObject
  • s3:ReplicateTags
  • s3:ObjectOwnerOverrideToBucketOwner

目的地儲存貯體政策範例:

{
   "Version":"2012-10-17",
   "Id":"PolicyForDestinationBucket",
   "Statement":[
      {
         "Sid":"Permissions on objects",
         "Effect":"Allow",
         "Principal":{
            "AWS":"arn:aws:iam::source-bucket-account-ID:role/service-role/source-account-IAM-role"
         },
         "Action":[
            "s3:ReplicateDelete",
            "s3:ReplicateObject",
            "s3:ReplicateTags",
            "s3:ObjectOwnerOverrideToBucketOwner"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/"
      }
   ]
}

指定 AWS KMS key 權限

若要透過 AWS Key Management Service (KMS) 金鑰 (SSE-KMS) 使用伺服器端加密,您必須在複寫規則中指定目的地帳戶的 AWS KMS key。此外,AWS KMS key 政策必須允許複寫 IAM 角色使用金鑰進行加密和解密。如需詳細資訊,請參閱在本機帳戶中新增金鑰政策陳述式

SSE-KMS 的複寫 IAM 角色政策範例:

{
    "Version": "2012-10-17",
    "Statement": [

        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "SourceKmsKeyArn"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Encrypt"
            ],
            "Resource": [
                "DestinationKmsKeyArn"
            ]
        }
    ]
}

SSE-KMS 的目的地儲存貯體政策範例:

{
    "Sid": "Allow an external account to use this KMS key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/ReplicationIAMRole"
    },
    "Action": [
        "kms:Encrypt"
    ],
    "Resource": "*"
}

如果來源或目的地 AWS KMS key 政策根據加密內容授予權限,請檢查您是否正在使用 Amazon S3 儲存貯體金鑰

如果您使用 Amazon S3 儲存貯體金鑰,則加密內容必須適用於儲存貯體層級資源。

政策範例:

"kms:EncryptionContext:aws:s3:arn": [     "arn:aws:s3:::amzn-s3-demo-source-bucket"     ]
"kms:EncryptionContext:aws:s3:arn": [     "arn:aws:s3:::amzn-s3-demo-destination-bucket"   ]

如果您未使用 Amazon S3 儲存貯體金鑰,則加密內容必須適用於物件層級資源。

政策範例:

"kms:EncryptionContext:aws:s3:arn": [     "arn:aws:s3:::amzn-s3-demo-source-bucket/*"     ]
"kms:EncryptionContext:aws:s3:arn": [     "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"   ]

**注意:**在上述範例政策中,將 amzn-s3-demo-source-bucketamzn-s3-demo-destination-bucket 替換為您的來源儲存貯體名稱和目的地儲存貯體名稱。

檢查來源帳戶和目的地帳戶的 SCP

確認來源帳戶和目的地帳戶中的服務控制政策 (SCP) 不包含 Deny 陳述式。

相關資訊

使用指標、事件通知和狀態監控複寫

複寫加密物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)

為什麼我在設定儲存貯體之間的複寫時,Amazon S3 物件無法複寫?

AWS 官方已更新 2 年前