Knowledge Center Monthly Newsletter - September 2025
Stay up to date with the latest from the Knowledge Center. See all new Knowledge Center articles published in the last month, and re:Post’s top contributors.
為什麼我在儲存貯體區間設定複寫時,我的 Amazon S3 物件不會複寫?
我在 Amazon Simple Storage Service (Amazon S3) 儲存貯體之間設定了跨區域複寫 (CRR) 或相同區域複寫 (SRR)。不過,物件不會複寫到目的地儲存貯體。
解決方法
若要疑難排解未複寫到目的地儲存貯體的 S3 物件,請檢查儲存貯體的不同類型許可。另外,請檢查公共存取設定和儲存貯體擁有權設定。
提示:
- 在每次組態變更後,上傳物件至來源儲存貯體,以便測試複寫。最佳實務是一次變更一個組態,藉此識別任何複寫設定問題。
- 啟用 s3:Replication:OperationFailedReplication 事件類型通知,以在複寫失敗時接收通知。錯誤代碼可能有助於您確定失敗的原因。
解決造成複寫失敗的問題後,來源儲存貯體中可能有未複寫的物件。根據預設,S3 複寫不會複寫現有物件或複寫狀態為**「失敗」或「複本」**的物件。若要檢查物件的複寫狀態,請參閱如何檢視從一個 Amazon S3 儲存貯體複寫失敗到另一個儲存貯體的物件?使用 S3 批次複寫來複寫物件。
授予 Amazon S3 最低許可
確認您在複寫規則中使用的 AWS Identity Access Management (IAM) 角色具有正確的許可。如果來源和目的地儲存貯體位於不同的 AWS 帳戶中,請確認目的地帳戶的儲存貯體政策授予複寫角色的足夠許可。
以下範例具有複寫所需最低許可的 IAM 政策。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::SourceBucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::SourceBucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ReplicateTags" ], "Resource": "arn:aws:s3:::DestinationBucket/*" } ] }
注意:將來源儲存貯體和目的地儲存貯體取代為 S3 儲存貯體的名稱。
根據複寫規則選項,您可能需要授予其他許可。
IAM 角色必須具有信任政策,以允許 Amazon S3 擔任該角色來複寫物件:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
授予其他 Amazon S3 許可
如果將複寫規則設定為「將物件擁有權變更為目的地儲存貯體擁有者」,則 IAM 角色必須具有 s3:ObjectOwnerOverrideToBucketOwner 許可。將許可置於 S3 物件資源上:
{ "Effect": "Allow", "Action": [ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource": "arn:aws:s3:::DestinationBucket/*" }
目的地帳戶必須在儲存貯體政策中授予 s3:ObjectOwnerOverrideToBucketOwner 許可:
{ "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource": "arn:aws:s3:::DestinationBucket/*" }
注意:如果目的地儲存貯體的物件擁有權為強制執行的儲存貯體擁有者,則您不需要在複寫規則中將物件擁有權變更為目的地儲存貯體擁有者。依預設,會發生此變更。
如果在複寫規則上啟用了刪除標記複寫,則 IAM 角色必須具有 s3:ReplicateDelete 許可:
{ "Effect": "Allow", "Action": [ "s3:ReplicateDelete" ], "Resource": "arn:aws:s3:::DestinationBucket/*" }
如果目的地儲存貯體位於另一個帳戶中,則目的地儲存貯體擁有者也必須在儲存貯體政策中授予此許可:
{ "Version": "2012-10-17", "Id": "PolicyForDestinationBucket", "Statement": [ { "Sid": "Stmt1644945277847", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateTags", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateDelete" ], "Resource": "arn:aws:s3:::DestinationBucket/*" } ] }
注意:將 arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role 取代為複寫角色的 ARN。將DestinationBucket取代為 S3 儲存貯體的名稱。
授予 AWS KMS 許可
如果您使用 AWS Key Management Service (KMS) 金鑰加密儲存貯體的來源物件,則複寫規則必須包含 KMS 加密的物件。
請完成下列步驟:
- 開啟 Amazon S3 主控台。
- 選擇包含來源物件的 S3 儲存貯體。
- 在管理索引標籤上,選取複寫規則。
- 選擇編輯。
- 在加密下,選擇複寫使用 AWS KMS 加密的物件。
- 在用於加密目的地物件的 AWS KMS 金鑰下,選取 AWS KMS 金鑰。預設選項是使用 AWS KMS 金鑰 (AWS/S3)。
如需詳細資訊,請參閱範例政策 — 使用 SSE-S3 和 SSE-KMS 與複寫。
**重要:**如果目的地儲存貯體位於不同的帳戶中,請指定目的地帳戶所擁有的 AWS KMS 客戶受管金鑰。預設的 aws/S3 金鑰使用來源帳戶擁有的 AWS 受管金鑰加密物件。由於您無法與其他帳戶共享 AWS 受管金鑰,因此目的地帳戶無法存取目的地儲存貯體中的物件。
授予其他 AWS KMS 跨帳戶案例的附加許可
若要使用目的地帳戶的 AWS KMS 金鑰來加密目的地物件,目的地帳戶必須在金鑰政策中授予複寫角色:
{ "Sid": "AllowS3ReplicationSourceRoleToUseTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "*" }
注意:如果您在 AWS KMS 金鑰政策中使用星號 (\ *) 作為資源,則該政策只會將許可授予複寫角色。政策不允許複寫角色擴充其許可。
此外,您必須從來源帳戶將下列最低許可新增至複寫角色的 IAM 政策:
[ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "SourceKmsKeyArn" ] }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": [ "DestinationKmsKeyArn" ] } ]
根據預設,AWS KMS 金鑰政策會授予根使用者金鑰的完整許可。您可以將這些許可委派給同一帳戶中的其他使用者。您也可以使用 IAM 政策將複寫角色權限授予來源 KMS 金鑰。除非來源 KMS 金鑰政策中有拒絕陳述式,否則這就足夠了。
檢查明確拒絕和條件式允許陳述式
如果您的物件在驗證許可之後仍未複寫,那麼請檢查是否有可能造成複寫失敗的明確的拒絕陳述式。
移除限制存取以下項目的目的地儲存貯體或 AWS KMS 金鑰政策的拒絕陳述式:
- 特定 CIDR 範圍,
- 虛擬私有雲端 (VPC) 端點
- S3 存取點
移除附加至 IAM 角色的拒絕陳述式或許可界限。此外,請移除附加至來源或目的地帳戶的 AWS 組織服務控制政策 (SCP) 中的拒絕陳述式。
**提示:**在移除任何明確的拒絕陳述式前,請確認拒絕的原因。此外,請確定該陳述式是否影響資料安全性。
檢查 Amazon S3 儲存貯體
如果來源或目的地的 KMS 金鑰根據加密內文授予許可,請檢查是否使用了 S3 儲存貯體金鑰。如果儲存貯體使用「儲存貯體金鑰」,則加密內容必須適用於儲存貯體層級資源:
"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::SOURCE_BUCKET_NAME" ] "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::DESTINATION_BUCKET_NAME" ]
**注意:**將 SOURCE_BUCKET_NAME 和 DESTINATION_BUCKET_NAME 取代為您的來源儲存貯體和目的地儲存貯體的名稱。
如果來源或目的地儲存貯體未使用儲存貯體金鑰,則加密內容必須是物件層級資源:
"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::SOURCE_BUCKET_NAME/*" ] "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::DESTINATION_BUCKET_NAME/*" ]
**注意:**將 SOURCE_BUCKET_NAME 和 DESTINATION_BUCKET_NAME 取代為您的來源儲存貯體和目的地儲存貯體的名稱。
請檢查物件 ACL 和封鎖公用存取
檢查來源儲存貯體和目的地儲存貯體是否使用存取控制清單 (ACL)。如果物件已包括允許公開存取的 ACL,但目的地儲存貯體使用區塊公開存取,則複寫會失敗。
確認來源物件擁有權
如果另一個帳戶將物件上傳至來源儲存貯體,則來源帳戶可能沒有這些物件的許可。檢查來源儲存貯體以確認 ACL 是否已停用。
如果來源儲存貯體上已停用 ACL,則來源帳戶就是儲存貯體中所有物件的擁有者。如果來源儲存貯體未停用 ACL,請檢查物件擁有權是否設定為偏好物件擁有者或偏好儲存貯體擁有者。如果擁有權設定為偏好的儲存貯體擁有者,則來源儲存貯體中的物件必須具有bucket-owner-full-control ACL 許可。
來源帳戶可以停用 ACL 以取得儲存貯體中所有物件的擁有權。大多數使用案例不需要使用 ACL 來管理存取權。最佳實務是使用 IAM 和儲存貯體政策來管理 S3 資源的存取。若要停用 S3 儲存貯體上的 ACL,請參閱控制物件擁有權和停用儲存貯體的 ACL。您的儲存貯體和 IAM 政策必須授予足夠的許可,以便您在停用 ACL 時不會影響 Amazon S3 存取。
指定正確的複寫規則篩選條件
請確認您已正確指定複寫規則篩選條件。
如果您指定使用索引鍵字首和物件標籤組合的規則篩選條件,S3 會執行邏輯 AND 作業來合併篩選條件。規則會套用至具有特定索引鍵字首和特定標籤的物件子集。