故障排除複寫 - Amazon Simple Storage Service

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

故障排除複寫

本節列出「Amazon S3 複寫」的疑難排解提示,以及「S3 批次複寫」錯誤的相關資訊。

S3 複寫的疑難排解提示

在您設定複寫之後,如果物件複本未出現在目的地儲存貯體中,請使用這些故障診斷技巧以識別並修正問題。

  • 大部分的物件會在 15 分鐘內複寫。Amazon S3 複寫物件所需的時間長短取決於幾個因素,包括來源和目的地區域對,以及物件的大小。若是大型物件,最長可能需要數小時的複寫時間。如需複寫時間的可見性,您可以使用 S3 複寫時間控制 (S3 RTC)

    如果要複寫的物件很大,請等待一段時間,然後查看其是否出現在目的地中。您也可以檢查來源物件的複寫狀態。如果物件複寫狀態為 PENDING,表示 Amazon S3 尚未完成複寫。如果物件複寫狀態為 FAILED,請檢查來源儲存貯體中所設的複寫組態。此外,若要在複寫期間接收失敗的相關資訊,您可以設定「Amazon S3 事件通知」複寫以接收失敗事件。如需詳細資訊,請參閱使用 Amazon S3 事件通知接收複寫失敗事件

  • 您可以呼叫 HeadObject API 操作,以檢查物件的複寫狀態。HeadObject API 操作會傳回物件的 PENDINGCOMPLETEDFAILED 複寫狀態。在 HeadObject API 呼叫的回應時,會在 x-amz-replication-status 元素中傳回複寫狀態。

    注意

    若要執行 HeadObject,您必須對您正要請求的儲存貯體具有讀取權。HEAD 請求具有與 GET 請求相同的選項,而不需執行 GET 操作。例如,若要使用 AWS Command Line Interface (AWS CLI) 執行 HeadObject 請求,您可以執行下列命令。以您自己的資訊取代 user input placeholders

    aws s3api head-object --bucket my-bucket --key index.html
  • HeadObject 傳回具有 FAILED 複寫狀態的物件之後,您可以使用「S3 批次複寫」來複寫這些失敗的物件。或者,您也可以將失敗的物件重新上傳至來源儲存貯體,這樣會啟動新物件的複寫。

  • 在來源儲存貯體中的複寫組態中,驗證下列項目:

    • 目的地儲存貯體的 Amazon Resource Name (ARN) 正確。

    • 金鑰名稱前綴正確。例如,如果您設定組態來複寫具有前綴 Tax 的物件,則只會複寫具有 Tax/document1Tax/document2 等金鑰名稱的物件。不會複寫具有金鑰名稱 document3 的物件。

    • 複寫規則的狀態為 Enabled

  • 在複寫組態中確認未在任何儲存貯體上暫停版本控制。來源與目的地儲存貯體都必須啟用版本控制。

  • 如果將複寫規則設定為將物件擁有權變更為目的地儲存貯體擁有者,則用於複寫的 AWS Identity and Access Management (IAM) 角色必須具有 s3:ObjectOwnerOverrideToBucketOwner 許可。此許可是在資源 (在此情況下,指的是目的地儲存貯體) 上授予。例如,下列 Resource 陳述式說明如何在目的地儲存貯體上授予此許可:

    { "Effect":"Allow", "Action":[ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::DestinationBucket/*" }
  • 如果目的地儲存貯體是由另一個帳戶所擁有,則目的地儲存貯體的擁有者也須透過目的地儲存貯體政策,將 s3:ObjectOwnerOverrideToBucketOwner 許可授予來源儲存貯體擁有者。若要使用下列儲存貯體政策範例,請以您自己的資訊取代 user input placeholders

    { "Version": "2012-10-17", "Id": "Policy1644945280205", "Statement": [ { "Sid": "Stmt1644945277847", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789101:role/s3-replication-role" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateTags", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource": "arn:aws:s3:::DestinationBucket/*" } ] }
    注意

    如果目的地儲存貯體的物件擁有權設定包含儲存貯體擁有者強制執行,則您不需要在複寫規則中更新設定,以將物件擁有權變更為目的地儲存貯體擁有者。依預設,物件擁有權變更將會發生。如需變更複本擁有權的詳細資訊,請參閱變更複本擁有者

  • 如果您在跨帳戶案例中設定複寫組態,其中來源和目的地儲存貯體屬於不同AWS 帳戶,則目的地儲存貯體無法設定為要求者付款值區。如需詳細資訊,請參閱 使用儲存體傳輸和用量的申請者付款儲存貯體

  • 如果儲存貯體的來源物件使用 AWS Key Management Service (AWS KMS) 金鑰進行加密,則必須將複寫規則設定為包含 AWS KMS 加密物件。請務必在 Amazon S3 主控台的加密設定下選取複寫使用 AWS KMS 加密的物件。然後,選取用於加密目的地物件的 AWS KMS 金鑰。

    注意

    如果目的地儲存貯體位於不同的帳戶中,請指定目的地帳戶所擁有的 AWS KMS 客戶受管金鑰。請勿使用預設的 Amazon S3 受管金鑰 (aws/s3)。使用預設金鑰會搭配來源帳戶所擁有的 Amazon S3 受管金鑰加密物件,藉以防止物件與另一個帳戶共用。因此,目的地帳戶將無法存取目的地儲存貯體中的物件。

    若要使用屬於目的地帳戶的 AWS KMS 金鑰來加密目的地物件,目的地帳戶必須將 kms:GenerateDataKeykms:Encrypt 許可授予 KMS 金鑰政策中的複寫角色。若要在您的 KMS 金鑰政策中使用下列範例,請以您自己的資訊取代 user input placeholders

    { "Sid": "AllowS3ReplicationSourceRoleToUseTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789101:role/s3-replication-role" }, "Action": ["kms:GenerateDataKey", "kms:Encrypt"], "Resource": "*" }

    如果您對 AWS KMS 金鑰政策中的 Resource 陳述式使用星號 (*),則此政策會將使用 KMS 金鑰的許可僅授予複寫角色。此政策不允許複寫角色提升其許可。

    依預設,KMS 金鑰政策會授予根使用者金鑰的完整許可。這些許可可以委派給相同帳戶中的其他使用者。除非來源 KMS 金鑰政策中有 Deny 陳述式,否則使用 IAM 政策將複寫角色許可授予來源 KMS 金鑰就夠了。

    注意

    限制存取特定 CIDR 範圍、VPC 端點或 S3 存取點的 KMS 金鑰政策可能會導致複寫失敗。

    如果來源或目的地 KMS 金鑰根據加密內容授予許可,請確認已針對儲存貯體開啟「Amazon S3 儲存貯體金鑰」。如果儲存貯體已開啟「S3 儲存貯體」金鑰,則加密內容必須是儲存貯體層級資源,如下所示:

    "kms:EncryptionContext:arn:aws:arn": [ "arn:aws:s3:::SOURCE_BUCKET_NAME" ] "kms:EncryptionContext:arn:aws:arn": [ "arn:aws:s3:::DESTINATION_BUCKET_NAME" ]

    除了 KMS 金鑰政策授予的許可之外,來源帳戶還必須將下列最低許可新增至複寫角色的 IAM 政策:

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

    如需如何複寫使用 AWS KMS 加密之物件的詳細資訊,請參閱複寫加密物件

  • 如果目的地儲存貯體的擁有者是另一個 AWS 帳戶,請確認儲存貯體擁有者在目的地儲存貯體上有儲存貯體政策,以允許來源儲存貯體擁有者複寫物件。如需範例,請參閱 當不同帳戶擁有來源與目的地儲存貯體時設定複寫

  • 如果您的物件在您驗證了許可之後仍未複寫,請檢查下列位置是否有任何明確的 Deny 陳述式:

    • 來源或目的地儲存貯體政策中的 Deny 陳述式。如果儲存貯體政策拒絕存取下列任何動作的複寫角色,則複寫會失敗:

      來源儲存貯體:

      "s3:GetReplicationConfiguration", "s3:ListBucket", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging"

      目的地儲存貯體:

      "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags"
    • 附加至 IAM 角色的 Deny 陳述式或許可界限可能會導致複寫失敗。

    • 附加至來源或目的地帳戶之 AWS Organizations 服務控制政策中的 Deny 陳述式可能會導致複寫失敗。

  • 如果目的地儲存貯體中未出現物件複本,可能是下列問題阻礙了複寫作業:

    • 如果來源儲存貯體中的物件是由另一個複寫組態所建立的複本,則 Amazon S3 不會複寫該複本。例如,如果您將複寫組態從儲存貯體 A 設定到儲存貯體 B,再設定到儲存貯體 C,則 Amazon S3 不會將儲存貯體 B 中的物件複本複寫至儲存貯體 C。

    • 來源儲存貯體擁有者可授予其他 AWS 帳戶 上傳物件的許可。根據預設,來源儲存貯體擁有者不具其他帳戶所建立之物件的任何許可。複寫組態只會複寫來源儲存貯體擁有者具備存取許可的物件。來源儲存貯體擁有者可以授予其他 AWS 帳戶 許可來有條件地建立物件,並要求這些物件的明確存取許可。如需政策範例,請參閱 授予跨帳戶許可,以在確保儲存貯體擁有者具有完全控制時上傳物件

  • 假設您在複寫組態中新增一個規則,以複寫含特定標籤的物件子集。在此情況下,您必須於建立物件時指派特定標籤金鑰與值,以便 Amazon S3 複寫物件。如果您先建立物件,之後才將標籤新增至現有物件,Amazon S3 就不會複寫物件。

  • 使用「Amazon S3 事件通知」,將物件未複寫至其目的地 AWS 區域 的情況通知您。Amazon S3 事件通知可透過 Amazon Simple Queue Service (Amazon SQS)、Amazon Simple Notification Service (Amazon SNS) 或 AWS Lambda 取得。如需詳細資訊,請參閱 使用 Amazon S3 事件通知接收複寫失敗事件

    您也可以使用「Amazon S3 事件通知」,以檢視複寫失敗原因。若要檢閱失敗原因的清單,請參閱 Amazon S3 複寫失敗原因

批次複寫錯誤

若要針對未複寫到目的地儲存貯體的物件進行疑難排解,請針對用來建立「批次複寫」任務的儲存貯體、複寫角色和 IAM 角色檢查不同類型的許可。此外,請務必檢查公開存取設定和儲存貯體擁有權設定。

使用「批次複寫」時,您可能會遇到下列其中一個錯誤:

  • 批次操作狀態為失敗,原因如下:無法將任務報告寫入報告儲存貯體。

    如果用於「批次操作」任務的 IAM 角色無法將完成報告放入您建立任務時所指定的位置中,就會發生此錯誤。若要解決此錯誤,請檢查 IAM 角色是否對要儲存「批次操作」完成報告的儲存貯體具有 PutObject 許可。最佳實務是將報告遞交到與來源儲存貯體不同的儲存貯體。

  • 批次操作已完成但失敗,失敗總數不是 0。

    如果正在執行的「批次複寫」任務發生物件許可不足問題,則會發生這個錯誤。如果您針對「批次複寫」任務使用複寫規則,請確定用於複寫的 IAM 角色具有適當的許可,可從來源或目的地儲存貯體中存取物件。您也可以檢查批次複寫完成報告,以檢閱特定的 Amazon S3 複寫失敗原因

  • 批次任務已成功執行,但目的地儲存貯體中預期的物件數目不相同。

    當「批次複寫」任務中提供的清單檔案中所列的物件與您在建立任務時選取的篩選條件之間若有不符時,就會發生這個錯誤。當來源儲存貯體中的物件不符合任何複寫規則,且未包含在產生的清單檔案中時,您可能也會收到此訊息。