

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

# 故障排除複寫
<a name="replication-troubleshoot"></a>

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

**Topics**
+ [S3 複寫的疑難排解提示](#troubleshoot-replication-tips)
+ [批次複寫錯誤](#troubleshoot-batch-replication-errors)

## S3 複寫的疑難排解提示
<a name="troubleshoot-replication-tips"></a>

在您設定複寫之後，如果物件複本未出現在目的地儲存貯體中，請使用這些故障診斷技巧以識別並修正問題。
+ 大部分的物件會在 15 分鐘內複寫。Amazon S3 複寫物件所需的時間長短取決於幾個因素，包括來源和目的地區域對，以及物件的大小。若是大型物件，最長可能需要數小時的複寫時間。如需複寫時間的可見性，您可以[使用 S3 複寫時間控制 (S3 RTC)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-time-control.html#enabling-replication-time-control)。

  如果要複寫的物件很大，請等待一段時間，然後查看其是否出現在目的地中。您也可以檢查來源物件的複寫狀態。如果物件複寫狀態為 `PENDING`，則表示 Amazon S3 尚未完成複寫。如果物件複寫狀態為 `FAILED`，請檢查來源儲存貯體中所設的複寫組態。

  此外，若要在複寫期間接收失敗的相關資訊，您可以設定「Amazon S3 事件通知」複寫以接收失敗事件。如需詳細資訊，請參閱[使用 Amazon S3 事件通知接收複寫失敗事件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-metrics.html)。
+ 若要檢查物件的複寫狀態，您可以呼叫 `HeadObject` API 操作。`HeadObject` API 操作會傳回物件的 `PENDING`、`COMPLETED` 或 `FAILED` 複寫狀態。在針對 `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 {{amzn-s3-demo-source-bucket}} --key {{index.html}}
  ```
+ 如果 `HeadObject` 傳回具有 `FAILED` 複寫狀態的物件，您可以使用「S3 批次複寫」來複寫這些失敗的物件。如需詳細資訊，請參閱[使用批次複寫來複寫現有物件](s3-batch-replication-batch.md)。或者，您也可以將失敗的物件重新上傳至來源儲存貯體，這樣會啟動新物件的複寫。
+ 在來源儲存貯體中的複寫組態中，驗證下列項目：
  + 目的地儲存貯體的 Amazon Resource Name (ARN) 正確。
  + 金鑰名稱前綴正確。例如，如果您設定組態來複寫具有前綴 `Tax` 的物件，則只會複寫具有 `Tax/document1` 或 `Tax/document2` 等金鑰名稱的物件。不會複寫具有金鑰名稱 `document3` 的物件。
  + 複寫規則的狀態為 `Enabled`。
+ 在複寫組態中確認未在任何儲存貯體上暫停版本控制。來源與目的地儲存貯體都必須啟用版本控制。
+ 如果複寫規則設定為**將物件擁有權變更為目的地儲存貯體擁有者**，則用於複寫的 AWS Identity and Access Management (IAM) 角色必須具有 `s3:ObjectOwnerOverrideToBucketOwner`許可。此許可是在資源 (在此情況下，指的是目的地儲存貯體) 上授予。例如，下列 `Resource` 陳述式說明如何在目的地儲存貯體上授予此許可：

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

------
#### [ JSON ]

****  

  ```
  {
    "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:::{{amzn-s3-demo-destination-bucket}}/*"
      }
    ]
  }
  ```

------
**注意**  
如果目的地儲存貯體的物件擁有權設定包含**儲存貯體擁有者強制執行**，則您不需要在複寫規則中更新設定，以**將物件擁有權變更為目的地儲存貯體擁有者**。依預設，物件擁有權變更將會發生。如需變更複本擁有權的詳細資訊，請參閱[變更複本擁有者](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-change-owner.html)。
+ 如果您在跨帳戶案例中設定複寫組態，其中來源和目的地儲存貯體是由不同的 擁有 AWS 帳戶，則無法將目的地儲存貯體設定為申請者付款儲存貯體。如需詳細資訊，請參閱[使用儲存體傳輸和用量的申請者付款一般用途儲存貯體](RequesterPaysBuckets.md)。
+ 如果儲存貯體的來源物件使用伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 進行加密，則必須將複寫規則設定為包含 AWS KMS加密物件。請務必在 Amazon S3 主控台的**加密**設定下選取**複寫使用 AWS KMS加密的物件**。然後，選取用於加密目的地物件的 AWS KMS 金鑰。
**注意**  
如果目的地儲存貯體位於不同的帳戶中，請指定目的地帳戶擁有 AWS KMS 的客戶受管金鑰。請勿使用預設的 Amazon S3 受管金鑰 (`aws/s3`)。使用預設金鑰會搭配來源帳戶所擁有的 Amazon S3 受管金鑰加密物件，藉以防止物件與另一個帳戶共用。因此，目的地帳戶將無法存取目的地儲存貯體中的物件。

  若要使用屬於目的地帳戶的 AWS KMS 金鑰來加密目的地物件，目的地帳戶必須將 `kms:GenerateDataKey`和 `kms: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:::{{amzn-s3-demo-source-bucket}}"
       ]
  "kms:EncryptionContext:arn:aws:arn": [
       "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}"
       ]
  ```

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

  ```
  {
      "Effect": "Allow",
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": [
          "{{Source-KMS-Key-ARN}}"
      ]
  },
  {
      "Effect": "Allow",
      "Action": [
          "kms:GenerateDataKey",
          "kms:Encrypt"
      ],
      "Resource": [
          "{{Destination-KMS-Key-ARN}}"
      ]
  }
  ```
**重要**  
如果您使用 S3 批次複寫來跨區域複寫資料集，且物件先前已將其伺服器端加密類型從 SSE-S3 更新為 SSE-KMS，則您可能需要額外的許可。在來源區域儲存貯體上，您必須擁有 `kms:decrypt` 許可。然後，您將需要目的地區域中儲存貯體的 `kms:decrypt`和 `kms:encrypt`許可。

  如需如何複寫使用 加密之物件的詳細資訊 AWS KMS，請參閱[複寫加密物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-walkthrough-4.html)。
+ 如果目的地儲存貯體是由另一個儲存貯體擁有 AWS 帳戶，請確認儲存貯體擁有者在目的地儲存貯體上有儲存貯體政策，允許來源儲存貯體擁有者複寫物件。如需範例，請參閱 [設定不同帳戶內的儲存貯體複寫](replication-walkthrough-2.md)。
+ 若要搭配複寫使用物件鎖定，您必須在用於設定複寫的 AWS Identity and Access Management (IAM) 角色中授予來源 S3 儲存貯體的兩個額外許可。這兩項額外的許可為 `s3:GetObjectRetention` 和 `s3:GetObjectLegalHold`。若該角色有 `s3:Get*` 許可陳述式，該陳述式即符合需求。如需詳細資訊，請參閱[搭配 S3 複寫使用物件鎖定](object-lock-managing.md#object-lock-managing-replication)。
+ 如果您的物件在您驗證了許可之後仍未複寫，請檢查下列位置是否有任何明確的 `Deny` 陳述式：
  + 來源或目的地儲存貯體政策中的 `Deny` 陳述式。如果儲存貯體政策拒絕存取下列任何動作的複寫角色，則複寫會失敗：

    來源儲存貯體：

    ```
    1.            "s3:GetReplicationConfiguration",
    2.            "s3:ListBucket",
    3.            "s3:GetObjectVersionForReplication",
    4.            "s3:GetObjectVersionAcl",
    5.            "s3:GetObjectVersionTagging"
    ```

    目的地儲存貯體：

    ```
    1.            "s3:ReplicateObject",
    2.            "s3:ReplicateDelete",
    3.            "s3:ReplicateTags"
    ```
  + 附加至 IAM 角色的 `Deny` 陳述式或許可界限可能會導致複寫失敗。
  + `Deny` 連接到來源或目的地帳戶 AWS Organizations 的服務控制政策 (SCPs) 中的 陳述式可能會導致複寫失敗。
  + `Deny` AWS Organizations 資源控制政策 (RCPs) 中連接到來源或目的地儲存貯體的 陳述式可能會導致複寫失敗。
+ 如果目的地儲存貯體中未出現物件複本，可能是下列問題阻礙了複寫作業：
  + 如果來源儲存貯體中的物件是由另一個複寫組態所建立的複本，則 Amazon S3 不會複寫該複本。例如，如果您將複寫組態從儲存貯體 A 設定到儲存貯體 B，再設定到儲存貯體 C，則 Amazon S3 不會將儲存貯體 B 中的物件複本複寫至儲存貯體 C。
  + 來源儲存貯體擁有者可以授予其他上傳物件的 AWS 帳戶 許可。根據預設，來源儲存貯體擁有者不具其他帳戶所建立之物件的任何許可。複寫組態只會複寫來源儲存貯體擁有者具備存取許可的物件。為了避免此問題，來源儲存貯體擁有者可以授予其他 AWS 帳戶 許可，以有條件地建立物件，並需要這些物件的明確存取許可。如需政策範例，請參閱 [授予跨帳戶許可，以在確保儲存貯體擁有者具有完全控制時上傳物件](example-bucket-policies.md#example-bucket-policies-acl-2)。
+ 假設您在複寫組態中新增一個規則，以複寫含特定標籤的物件子集。在此情況下，您必須於建立物件時指派特定標籤金鑰與值，以便 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 事件通知接收複寫失敗事件](replication-metrics-events.md)。

  您也可以使用「Amazon S3 事件通知」，以檢視複寫失敗原因。若要檢閱失敗原因的清單，請參閱 [Amazon S3 複寫失敗原因](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-failure-codes.html)。

## 批次複寫錯誤
<a name="troubleshoot-batch-replication-errors"></a>

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

如需使用批次操作的其他疑難排解秘訣，請參閱[對 S3 Batch Operations 進行故障診斷](troubleshooting-batch-operations.md)。

如果您已設定複寫，且物件未複寫，請參閱[為什麼在設定儲存貯體之間的複寫時，我的 Amazon S3 物件不複寫？](https://repost.aws/knowledge-center/s3-troubleshoot-replication) AWS re:Post 知識中心的 。

使用「批次複寫」時，您可能會遇到下列其中一個錯誤：
+ 產生資訊清單時找不到符合篩選條件的金鑰。

  此錯誤可能的發生原因如下：
  + 來源儲存貯體中的物件存放在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 儲存類別。

    若要在這些物件上使用「批次複寫」，請先在「批次操作」任務中使用**還原** (`S3InitiateRestoreObjectOperation`) 操作，將它們還原到「S3 Standard」儲存類別。如需詳細資訊，請參閱 [還原已封存的物件](restoring-objects.md) 和[還原物件 (批次作業)](batch-ops-initiate-restore-object.md)。在還原了物件之後，您可以使用「批次複寫」任務來複寫它們。
  + 提供的篩選條件不符合來源儲存貯體中的任何有效物件。

    請驗證並更正篩選條件。例如，在批次複寫規則中，篩選條件會尋找來源儲存貯體中字首為 `Tax/` 的所有物件。如果輸入的字首名稱不正確，開頭和結尾 `/Tax/` 存在斜線，而不是只存在於結尾，則系統會找不到 S3 物件。若要解決錯誤，請在複寫規則中更正字首，在此情況下是從 `/Tax/` 更正至 `Tax/`。
+ 批次操作狀態為失敗，原因如下：無法將任務報告寫入報告儲存貯體。

  如果用於「批次操作」任務的 IAM 角色無法將完成報告放入您建立任務時所指定的位置中，就會發生此錯誤。若要解決此錯誤，請檢查 IAM 角色是否對要儲存「批次操作」完成報告的儲存貯體具有 `s3:PutObject` 許可。建議您將報告交付至與來源儲存貯體不同的儲存貯體。
+ 批次操作已完成但失敗，失敗總數不是 0。

  如果正在執行的「批次複寫」任務發生物件許可不足問題，則會發生這個錯誤。如果您針對「批次複寫」任務使用複寫規則，請確定用於複寫的 IAM 角色具有適當的許可，可從來源或目的地儲存貯體中存取物件。您也可以檢查[批次複寫完成報告](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-batch-replication-batch.html#batch-replication-completion-report)，以檢閱特定的 [Amazon S3 複寫失敗原因](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-failure-codes.html)。
+ 批次任務已成功執行，但目的地儲存貯體中預期的物件數目不相同。

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

### 將新的複寫規則新增至現有複寫組態之後，發生「批次操作」失敗
<a name="new-replication-rule"></a>

「批次操作」會嘗試針對來源儲存貯體的複寫組態中的每個規則執行現有的物件複寫。如果任何現有的複寫規則發生問題，可能會發生失敗。

「批次操作」任務的完成報告會說明任務失敗原因。如需常見錯誤的清單，請參閱 [Amazon S3 複寫失敗原因](replication-metrics-events.md#replication-failure-codes)。