

# 리전 내 및 리전 간 객체 복제
<a name="replication"></a>

복제를 사용하면 Amazon S3 버킷 전체에 걸쳐 객체를 비동기식으로 자동 복사할 수 있습니다. 객체 복제를 위해 구성된 버킷은 동일한 AWS 계정 또는 다른 계정이 소유할 수 있습니다. 단일 대상 버킷 또는 여러 대상 버킷에 객체를 복제할 수 있습니다. 대상 버킷은 다른 AWS 리전에 있을 수도 있고 소스 버킷과 동일한 리전 내에 있을 수도 있습니다.

복제에는 *라이브 복제*와 *온디맨드 복제*의 두 가지 유형이 있습니다.
+ **라이브 복제** - **새 객체 및 업데이트된 객체가 원본 버킷에 기록될 때 자동으로 복제하려면** 라이브 복제를 사용합니다. 라이브 복제는 복제를 설정하기 전에 버킷에 있던 객체를 자동으로 복제하지 않습니다. 복제를 설정하기 전에 존재한 객체를 복제하려면 온디맨드 복제를 사용합니다.
+ **온디맨드 복제** - 요청 시 원본 버킷의 **기존 객체를 하나 이상의 대상 버킷으로 복제하려면** S3 Batch Replication을 사용하세요. 기존 객체 복제에 대한 자세한 내용은 [S3 Batch Replication을 사용하는 경우](#batch-replication-scenario) 섹션을 참조하세요.

라이브 복제에는 **교차 리전 복제(CRR)와 **단일 리전 복제(SRR)라는 2가지 형태가 있습니다.
+ **교차 리전 복제(CRR)** - CRR을 사용하여 서로 다른 AWS 리전의 Amazon S3 버킷에서 객체를 복사할 수 있습니다. CRR에 대한 자세한 내용은 [교차 리전 복제를 사용하는 경우](#crr-scenario) 단원을 참조하십시오.
+ **동일 리전 복제(SRR)** - SRR을 사용하여 동일한 AWS 리전의 Amazon S3 버킷에서 객체를 복사할 수 있습니다. SRR에 대한 자세한 내용은 [동일 리전 복제를 사용하는 경우](#srr-scenario) 섹션을 참조하세요.

**Topics**
+ [복제를 사용하는 이유](#replication-scenario)
+ [교차 리전 복제를 사용하는 경우](#crr-scenario)
+ [동일 리전 복제를 사용하는 경우](#srr-scenario)
+ [양방향 복제를 사용해야 하는 경우](#two-way-replication-scenario)
+ [S3 Batch Replication을 사용하는 경우](#batch-replication-scenario)
+ [워크로드 요구 사항 및 라이브 복제](#replication-workload-requirements)
+ [Amazon S3는 무엇을 복제합니까?](replication-what-is-isnot-replicated.md)
+ [복제본에 대한 요구 사항 및 고려 사항](replication-requirements.md)
+ [라이브 복제 설정 개요](replication-how-setup.md)
+ [라이브 복제 관리 또는 일시 중지](disable-replication.md)
+ [배치 복제를 사용한 기존 객체 복제](s3-batch-replication-batch.md)
+ [복제 문제 해결](replication-troubleshoot.md)
+ [지표, 이벤트 알림 및 상태를 통한 복제 모니터링](replication-metrics.md)

## 복제를 사용하는 이유
<a name="replication-scenario"></a>

복제는 다음을 지원합니다.
+ **메타데이터를 유지하면서 객체 복제** – 복제를 사용하여 소스 객체 생성 시간 및 버전 ID와 같은 모든 메타데이터를 유지하는 객체의 복사본을 생성할 수 있습니다. 이 기능은 복제본이 소스 객체와 동일한지 확인해야 하는 경우에 중요합니다.
+ **서로 다른 스토리지 클래스로 객체 복제** – 복제를 사용하여 객체를 S3 Glacier Flexible Retrieval, S3 Glacier Deep Archive 또는 대상 버킷의 다른 스토리지 클래스에 직접 배치할 수 있습니다. 또한 데이터를 동일한 스토리지 클래스에 복제하고 대상 버킷에 대한 수명 주기 구성을 사용하여 객체를 오래된 스토리지 클래스로 이동시킬 수 있습니다.
+ **다른 소유권으로 객체 복사본 유지** – 소스 객체의 소유자에 상관없이 대상 버킷을 소유한 AWS 계정로 복제본 소유권을 변경하도록 Amazon S3에 지시할 수 있습니다. 이를 *사용자 재정의* 옵션이라고 합니다. 이 옵션을 사용하여 객체 복제본에 대한 액세스를 제한할 수 있습니다.
+ **여러 AWS 리전에 객체 저장** – 서로 다른 AWS 리전에 여러 대상 버킷을 설정하여 데이터가 보관된 곳의 지리적 차이를 보장할 수 있습니다. 이 기능은 특정 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다.
+ **15분 이내에 객체 복제** - S3 Replication Time Control(S3 RTC)을 사용하면 예측 가능한 기간 내에 동일한 AWS 리전 또는 다른 리전 간에 데이터를 복제할 수 있습니다. S3 RTC는 Amazon S3에 저장된 새 객체의 99.99%를 15분 이내에 복제합니다(서비스 수준 계약에 따라 지원됨). 자세한 내용은 [S3 Replication Time Control을 사용하여 규정 준수 요구 사항 충족](replication-time-control.md) 섹션을 참조하세요.
**참고**  
S3 RTC는 배치 복제에 적용되지 않습니다. 배치 복제는 온디맨드 복제 작업이며, S3 배치 작업을 통해 추적할 수 있습니다. 자세한 내용은 [작업 상태 및 완료 보고서 추적](batch-ops-job-status.md) 섹션을 참조하세요.
+ **버킷 동기화, 기존 객체 복제, 이전에 실패 또는 복제된 객체 복제** - 버킷을 동기화하고 기존 객체를 복제하려면 배치 복제를 온디맨드 복제 작업으로 사용합니다. Batch Replication을 사용하는 경우에 대한 자세한 내용은 [S3 Batch Replication을 사용하는 경우](#batch-replication-scenario) 섹션을 참조하세요.
+ **객체 복제 및 다른 AWS 리전에 있는 버킷으로 장애 조치** - 데이터 복제 중에 모든 메타데이터와 객체를 버킷 간에 동기화된 상태로 유지하려면 Amazon S3 다중 리전 액세스 포인트 장애 조치 제어를 구성하기 전에 양방향 복제 규칙을 사용하세요. 양방향 복제 규칙은 트래픽이 장애 조치 목적지인 S3 버킷에 데이터를 쓸 때 해당 데이터가 원본 버킷으로 다시 복제되도록 하는 데 도움이 됩니다.

## 교차 리전 복제를 사용하는 경우
<a name="crr-scenario"></a>

S3 교차 리전 복제(CRR)는 서로 다른 AWS 리전의 Amazon S3 버킷에서 객체를 복사하는 데 사용됩니다. CRR은 다음을 수행하는 데 도움이 됩니다.
+ **규정 준수 요구 사항 충족** – 기본적으로 Amazon S3는 지리적으로 동떨어진 여러 가용 영역 간에 데이터를 저장하지만 규정 준수 요구 사항에 따라 훨씬 더 먼 거리에 데이터를 저장하게 지정할 수 있습니다. 이러한 요구 사항을 충족하려면 교차 리전 복제를 사용하여 먼 거리의 AWS 리전 간에 데이터를 복제합니다.
+ **대기 시간 최소화** - 고객이 두 군데의 지리적 위치를 갖는 경우 사용자와 지리적으로 더 가까운 AWS 리전에 객체 복사본을 유지하여 객체 액세스 대기 시간을 최소화할 수 있습니다.
+ **운영 효율성 증가** - 두 AWS 리전에 동일한 객체 집합을 분석하는 컴퓨팅 클러스터가 있는 경우, 해당 리전에 객체 복사본을 유지할 수 있습니다.

## 동일 리전 복제를 사용하는 경우
<a name="srr-scenario"></a>

동일 리전 복제(SRR)는 동일한 AWS 리전의 Amazon S3 버킷에서 객체를 복사하는 데 사용됩니다. SRR은 다음을 수행하는 데 도움이 됩니다.
+ **단일 버킷에 로그 집계** – 여러 버킷에 또는 여러 계정 간에 로그를 저장하는 경우, 리전 내 단일 버킷으로 로그를 손쉽게 복제할 수 있습니다. 이렇게 하면 단일 위치에서 로그를 보다 간편하게 처리할 수 있습니다.
+ **프로덕션 계정과 테스트 계정 간에 라이브 복제 구성** – 사용자 또는 사용자의 고객이 동일한 데이터를 사용하는 프로덕션 계정과 테스트 계정을 가지고 있는 경우, 객체 메타데이터를 유지한 상태로 여러 계정 간에 객체를 복제할 수 있습니다.
+ **데이터 주권 법률 준수** - 특정 리전 내의 개별 AWS 계정에 데이터의 여러 복사본을 저장해야 할 수 있습니다. 동일 리전 복제를 사용하면 규정 준수 규정으로 인해 데이터가 해당 국가를 벗어날 수 없을 때 중요 데이터를 자동으로 복제할 수 있습니다.

## 양방향 복제를 사용해야 하는 경우
<a name="two-way-replication-scenario"></a>
+ **여러 개의 AWS 리전 간에 공유 데이터 세트를 빌드하려는 경우** - 복제본 수정 동기화를 사용하면 복제 객체에 객체 액세스 제어 목록(ACL), 객체 태그 또는 객체 잠금과 같은 메타데이터 변경을 쉽게 복제할 수 있습니다. 이 양방향 복제는 모든 객체 및 객체 메타데이터 변경 사항을 동기화된 상태로 유지하려는 경우에 중요합니다. 동일하거나 다른 AWS 리전에 있는 둘 이상의 버킷 간에 양방향 복제를 수행할 때 새 복제 규칙이나 기존 복제 규칙에서 [복제본 수정 동기화를 사용 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-for-metadata-changes.html#enabling-replication-for-metadata-changes)할 수 있습니다.
+ **장애 조치 중에 리전 간에 데이터를 동기화된 상태로 유지하려는 경우** - 다중 리전 액세스 포인트에서 직접 S3 교차 리전 복제(CRR)로 양방향 복제 규칙을 구성하여 AWS 리전 간에 버킷의 데이터를 동기화할 수 있습니다. 장애 조치를 언제 시작할지 정보에 입각한 결정을 내리려면 Amazon CloudWatch, S3 Replication Time Control(S3 RTC) 또는 다중 리전 액세스 포인트에서 복제를 모니터링하도록 S3 복제 지표를 활성화할 수도 있습니다.
+ **애플리케이션의 가용성을 높이려는 경우** - 리전의 트래픽이 중단되더라도 양방향 복제 규칙을 사용하여 데이터를 복제하는 동안 모든 메타데이터와 객체를 버킷 간에 동기화된 상태로 유지할 수 있습니다.

## S3 Batch Replication을 사용하는 경우
<a name="batch-replication-scenario"></a>

배치 복제는 기존 객체를 온디맨드 옵션으로 다른 버킷에 복제합니다. 라이브 복제와 달리 필요에 따라 이러한 작업을 실행할 수 있습니다. Batch Replication은 다음을 지원합니다.
+ **기존 객체 복제** - 배치 복제를 사용하여 동일 리전 복제 또는 교차 리전 복제가 구성되기 전에 버킷에 추가되었던 객체를 복제할 수 있습니다.
+ **이전에 복제 실패한 객체 복제** - 배치 복제 작업을 필터링하여 복제 상태가 **실패**인 객체의 복제를 시도할 수 있습니다.
+ **이미 복제된 객체 복제** - 데이터의 여러 복사본을 별도의 AWS 계정 또는 AWS 리전에 저장해야 할 수도 있습니다. 배치 복제는 기존 객체를 새로 추가된 대상에 복제할 수 있습니다.
+ **복제 규칙에서 생성되었던 객체의 복제본 복제** - 복제 구성은 대상 버킷에 객체의 복제본을 생성합니다. 객체의 복제본은 배치 복제를 통해서만 복제할 수 있습니다.

## 워크로드 요구 사항 및 라이브 복제
<a name="replication-workload-requirements"></a>

워크로드 요구 사항에 따라 일부 라이브 복제 유형이 다른 유형보다 사용 사례에 더 적합할 수 있습니다. 다음 표를 사용하여 상황에 사용할 복제 유형과 워크로드에 S3 Replication Time Control(S3 RTC)을 사용할지 여부를 결정합니다. S3 RTC는 Amazon S3에 저장된 새 객체의 99.99%를 15분 이내에 복제합니다(서비스 수준 계약(SLA)에 따라 지원됨). 자세한 내용은 [S3 Replication Time Control을 사용하여 규정 준수 요구 사항 충족](replication-time-control.md) 섹션을 참조하세요.


| 워크로드 요구 사항 | S3 RTC(15분 SLA) | 리전 간 복제(CRR) | 동일 리전 복제(SRR) | 
| --- | --- | --- | --- | 
| 서로 다른 AWS 계정 간에 객체 복제 | 예 | 예 | 예 | 
| 24\$148시간 내에 동일한 AWS 리전 내에서 객체 복제(SLA 미지원) | 아니요 | 아니요 | 예 | 
| 24\$148시간 내에 다른 AWS 리전 간에 객체 복제(SLA 미지원) | 아니요 | 예 | 아니요 | 
|  예측 가능한 복제 시간: SLA를 통해 15분 이내에 99.9%의 객체를 복제할 수 있습니다.  | 예 | 아니요 | 아니요 | 

# Amazon S3는 무엇을 복제합니까?
<a name="replication-what-is-isnot-replicated"></a>

Amazon S3는 버킷에서 복제가 구성된 특정 항목만 복제합니다.

**Topics**
+ [복제 구성으로 복제되는 것은 무엇입니까?](#replication-what-is-replicated)
+ [복제 구성으로 복제되지 않는 것은 무엇입니까?](#replication-what-is-not-replicated)

## 복제 구성으로 복제되는 것은 무엇입니까?
<a name="replication-what-is-replicated"></a>

기본적으로 Amazon S3는 다음을 복제합니다.
+ 복제 구성을 추가한 후에 생성된 객체입니다.
+ 암호화되지 않은 객체입니다.
+ 고객 제공 키(SSE-C)를 사용하여 암호화된 객체, Amazon S3 관리형 키(SSE-S3)를 사용하여 저장 시 암호화된 객체, AWS Key Management Service(SSE-KMS)에 저장된 KMS 키로 암호화된 객체. 자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.
+ 원본 객체에서 복제본으로 가는 객체 메타데이터입니다. 복제본에서 원본 객체로 메타데이터를 복제하는 방법에 대한 자세한 내용은 [복제본 수정 동기화를 사용하여 메타데이터 변경 복제](replication-for-metadata-changes.md) 섹션을 참조하세요.
+ 원본 버킷에서 버킷 소유자가 객체 및 ACL(액세스 제어 목록)을 읽을 권한이 있는 객체만.

  리소스 소유권에 대한 자세한 내용은 [Amazon S3 버킷 및 객체 소유권](access-policy-language-overview.md#about-resource-owner)를 참조하세요.
+ 객체 ACL 업데이트. 단, 원본 버킷과 대상 버킷을 동일한 계정이 소유하지 않은 경우 사용자가 Amazon S3에 복제본 소유권을 변경하도록 지시하지 않은 경우에 한합니다.

  자세한 내용은 [복제본 소유자 변경](replication-change-owner.md) 섹션을 참조하세요.

  Amazon S3에서 두 ACL을 동기화하려면 시간이 약간 걸릴 수 있습니다. 이 소유권 변경은 버킷에 복제 구성을 추가한 후 생성된 객체에만 적용됩니다.
+  객체 태그(있는 경우).
+ S3 객체 잠금 보존 정보(있는 경우).

  Amazon S3는 보존 정보가 적용된 객체를 복제할 때 복제본에 동일한 보존 제어를 적용하여 대상 버킷에 구성된 기본 보존 기간을 재정의합니다. 원본 버킷의 객체에 보존 제어가 적용되지 않았고 기본 보존 기간이 설정된 대상 버킷에 복제하는 경우, 대상 버킷의 기본 보존 기간이 객체 복제본에 적용됩니다. 자세한 내용은 [Object Lock으로 객체 잠금](object-lock.md) 섹션을 참조하세요.

### 삭제 작업이 복제에 미치는 영향
<a name="replication-delete-op"></a>

원본 버킷에서 객체를 삭제하는 경우 기본적으로 다음 작업이 이루어집니다.
+ 객체 버전 ID를 지정하지 않고 DELETE 요청을 수행하면 Amazon S3는 삭제 마커를 추가합니다. Amazon S3는 다음과 같이 삭제 마커를 처리합니다.
  + 최신 버전의 복제 구성을 사용하는 경우(즉, 사용자가 복제 구성 규칙의 `Filter` 요소를 지정) 기본적으로 Amazon S3는 삭제 마커를 복제하지 않습니다. 그러나 태그 기반이 아닌 규칙에도 *삭제 마커 복제*를 추가할 수 있습니다. 자세한 내용은 [버킷 간 삭제 마커 복제](delete-marker-replication.md) 섹션을 참조하세요.
  + `Filter` 요소를 지정하지 않으면 Amazon S3는 복제 구성이 버전 V1이라고 가정하고 사용자 작업에서 생성된 삭제 마커를 복제합니다. 그러나 Amazon S3가 수명 주기 작업 때문에 객체를 삭제하는 경우 삭제 마커는 대상 버킷에 복제되지 않습니다.
+ 사용자가 `DELETE` 요청에서 삭제할 객체 버전 ID를 지정할 경우, Amazon S3는 원본 버킷에서 해당 객체 버전을 삭제합니다. 하지만 대상 버킷에서는 삭제를 복제하지 않습니다. 즉, 대상 버킷에서 동일한 객체 버전을 삭제하지 않습니다. 이는 악의적 삭제로부터 데이터를 보호합니다.

## 복제 구성으로 복제되지 않는 것은 무엇입니까?
<a name="replication-what-is-not-replicated"></a>

기본적으로 Amazon S3는 다음을 복제하지 않습니다.
+ 원본 버킷의 객체는 다른 복제 규칙에 따라 생성된 복제본입니다. 예를 들어, 버킷 A가 소스이고 버킷 B가 대상인 복제를 구성하는 경우. 이제 버킷 B가 원본이고 버킷 C가 대상인 다른 복제 구성을 추가한다고 가정합니다. 이 경우, 버킷 A 객체의 복제본인 버킷 B의 객체는 버킷 C로 복제되지 않습니다.

  복제본인 객체를 복제하려면 배치 복제를 사용합니다. [기존 객체 복제](s3-batch-replication-batch.md)에서 배치 복제에 대해 자세히 알아보세요.
+ 다른 대상에 이미 복제된 원본 버킷의 객체입니다. 예를 들어, 기존 복제 구성에서 대상 버킷을 변경하더라도 Amazon S3가 해당 객체를 다시 복제하지 않습니다.

  이전에 복제된 객체를 복제하려면 Batch Replication을 사용합니다. [기존 객체 복제](s3-batch-replication-batch.md)에서 배치 복제에 대해 자세히 알아보세요.
+ 배치 복제는 대상 버킷에서 객체의 버전 ID로 삭제된 객체를 다시 복제하는 것을 지원하지 않습니다. 이러한 객체를 다시 복제하려면 배치 복사 작업을 사용하여 소스 객체를 제자리에 복사할 수 있습니다. 이러한 객체를 제자리에 복사하면 소스 버킷에 객체의 새 버전이 생성되고 대상에 대한 복제가 자동으로 시작됩니다. 배치 복사 사용 방법에 대한 자세한 내용은 [배치 작업을 사용하여 객체를 복사하는 예](batch-ops-examples-copy.md) 섹션을 참조하세요.
+ 기본적으로 다른 AWS 계정에서 복제하는 경우 소스 버킷에 추가된 삭제 마커는 복제되지 않습니다.

  삭제 마커를 복제하는 방법에 대한 자세한 내용은 [버킷 간 삭제 마커 복제](delete-marker-replication.md) 섹션을 참조하세요.
+ S3 Glacier Flexible Retrieval, S3 Glacier Deep Archive, S3 Intelligent-Tiering Archive Access 또는 S3 Intelligent-Tiering Deep Archive Access 스토리지 클래스 또는 계층에 저장된 객체입니다. 이러한 객체는 복원하여 다른 스토리지 클래스에 복사할 때까지 복제할 수 없습니다.

  S3 Glacier Flexible Retrieval 및 S3 Glacier Deep Archive에 대한 자세한 내용은 [거의 액세스하지 않는 객체를 위한 스토리지 클래스](storage-class-intro.md#sc-glacier) 섹션을 참조하세요.

  S3 Intelligent-Tiering에 대한 자세한 내용은 [Amazon S3 Intelligent-Tiering을 사용한 스토리지 비용 관리](intelligent-tiering.md) 섹션을 참조하세요.
+ 버킷 소유자에게 충분한 복제 권한이 없는 소스 버킷의 객체입니다.

  객체 소유자가 버킷 소유자에게 권한을 부여할 수 있는 방법에 대한 자세한 내용은 [버킷 소유자가 완벽하게 제어할 수 있도록 보증하면서 객체에 업로드하는 크로스 계정 권한 부여](example-bucket-policies.md#example-bucket-policies-acl-2) 섹션을 참조하세요.
+ 버킷 레벨 하위 리소스에 대한 업데이트.

  예를 들어, 수명 주기 구성을 변경하거나 원본 버킷에 알림 구성을 추가할 경우 이러한 변경 사항은 대상 버킷에 적용되지 않습니다. 이 기능을 사용하여 소스 버킷과 대상 버킷에 서로 다른 버킷 구성을 할 수 있습니다.
+ 수명 주기 구성에 의해 수행되는 작업.

  예를 들어 원본 버킷에서만 수명 주기 구성이 사용 설정되면 Amazon S3는 만료된 객체에 대한 삭제 마커를 만들지만 그 마커를 복제하지는 않습니다. 소스 버킷과 대상 버킷에 동일한 수명 주기 구성을 적용하려는 경우 두 버킷 모두에서 동일한 수명 주기를 사용 설정합니다. 수명 주기 구성에 대한 자세한 내용은 [객체 수명 주기 관리](object-lifecycle-mgmt.md) 섹션을 참조하십시오.
+ 실시간 복제와 함께 태그 기반 복제 규칙을 사용하는 경우 `PutObject` 작업에서 매칭되는 복제 규칙 태그로 새 객체에 태그를 지정해야 합니다. 그러지 않으면 객체가 복제되지 않습니다. `PutObject` 작업 후 객체에 태그가 지정된 경우 해당 객체도 복제되지 않습니다.

  `PutObject` 작업을 수행한 후 태그가 지정된 객체를 복제하려면 S3 배치 복제를 사용해야 합니다. Batch Replication에 대한 자세한 내용은 [기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.

# 복제본에 대한 요구 사항 및 고려 사항
<a name="replication-requirements"></a>

Amazon S3 복제에 관한 요구 사항은 다음과 같습니다.
+ 소스 버킷 소유자는 자신의 계정에 대해 소스 및 대상 AWS 리전을 사용해야 합니다. 대상 버킷 소유자는 자신의 계정에 대해 대상 리전을 사용 설정해야 합니다.

  AWS 리전 활성화 또는 비활성화에 대한 자세한 내용은 **AWS Account Management 참조 안내서의 [계정에서 사용할 수 있는 AWS 리전 지정](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)을 참조하세요.
+ 소스 버킷과 대상 버킷 모두에서 버전 관리를 사용 설정해야 합니다. 버전 관리에 대한 자세한 내용은 [S3 버전 관리로 여러 버전의 객체 유지](Versioning.md) 섹션을 참조하세요.
+ Amazon S3가 사용자를 대신해서 대상 버킷에 해당 원본 버킷의 객체를 복제할 권한을 가지고 있어야 합니다. 이러한 권한에 대한 자세한 내용은 [라이브 복제에 대한 권한 설정](setting-repl-config-perm-overview.md) 섹션을 참조하세요.
+ 원본 버킷 소유자가 버킷 내 객체를 소유하지 않은 경우 객체 소유자는 객체 ACL(액세스 제어 목록)을 사용하여 버킷 소유자에게 `READ` 및 `READ_ACP` 권한을 부여해야 합니다. 자세한 내용은 [ACL(액세스 제어 목록) 개요](acl-overview.md) 섹션을 참조하세요.
+ 원본 버킷에 S3 객체 잠금이 사용 설정되어 있는 경우, 대상 버킷에도 S3 객체 잠금이 사용 설정되어 있어야 합니다.

  객체 잠금이 활성화되어 있는 버킷에서 복제를 활성화하려면 AWS Command Line Interface, REST API 또는 AWS SDK를 사용해야 합니다. 더 일반적인 내용은 [Object Lock으로 객체 잠금](object-lock.md) 섹션을 참조하세요.
**참고**  
복제 설정에 사용할 AWS Identity and Access Management(IAM) 역할에서 소스 S3 버킷에 두 가지 새로운 권한을 부여해야 합니다. 두 가지 새로운 권한은 `s3:GetObjectRetention`과 `s3:GetObjectLegalHold`입니다. 역할에 `s3:Get*` 권한이 있으면 요구 사항이 충족됩니다. 자세한 내용은 [라이브 복제에 대한 권한 설정](setting-repl-config-perm-overview.md) 섹션을 참조하세요.

자세한 내용은 [라이브 복제 설정 개요](replication-how-setup.md) 섹션을 참조하세요.

소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유하는 *크로스 계정 시나리오*에서 복제 구성을 설정하는 경우, 다음과 같은 추가 요구 사항이 적용됩니다.
+ 대상 버킷 소유자가 버킷 정책을 사용하여 원본 버킷 소유자에게 객체를 복제할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [3단계(선택 사항): 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유할 경우 권한 부여](setting-repl-config-perm-overview.md#setting-repl-config-crossacct) 섹션을 참조하세요.
+ 대상 버킷을 요청자 지불 버킷으로 구성할 수 없습니다. 자세한 내용은 [스토리지 전송 및 사용량에 대한 요청자 지불 범용 버킷 사용](RequesterPaysBuckets.md) 섹션을 참조하세요.

## 복제를 위한 고려 사항
<a name="replication-and-other-bucket-configs"></a>

복제 구성을 생성하기 전에 다음 고려 사항에 유의하세요.

**Topics**
+ [수명 주기 구성 및 객체 복제본](#replica-and-lifecycle)
+ [버전 관리 구성 및 복제 구성](#replication-and-versioning)
+ [S3 Intelligent-Tiering과 함께 S3 복제 사용](#replication-and-intelligent-tiering)
+ [로그 구성 및 복제 구성](#replication-and-logging)
+ [CRR 및 대상 리전](#replication-and-dest-region)
+ [S3 배치 복제](#considerations-batch-replication)
+ [S3 복제 시간 제어](#considerations-RTC)

### 수명 주기 구성 및 객체 복제본
<a name="replica-and-lifecycle"></a>

Amazon S3가 객체를 복제하는 데 걸리는 시간은 객체 크기에 따라 다릅니다. 큰 객체의 경우 여러 시간이 걸릴 수 있습니다. 대상에서 복제본을 사용할 수 있기까지는 시간이 다소 걸리지만, 복제본 생성 시간은 원본 버킷에서 객체를 생성하는 데 걸린 시간과 동일합니다. 대상 버킷에서 수명 주기 구성이 활성화된 경우, 수명 주기 규칙은 대상 버킷에서 복제본을 사용할 수 있게 된 시간이 아니라 객체의 원본 생성 시간을 적용합니다.

복제 구성을 사용하려면 버킷에서 버전 관리를 사용해야 합니다. 버킷에서 버전 관리를 사용하는 경우 다음에 유의하세요.
+ 객체 만료 수명 주기 구성이 있는 경우 버전 관리를 활성화한 후 `NonCurrentVersionExpiration` 정책을 추가하여 버전 관리를 사용 설정하기 전과 동일한 영구 삭제 동작을 유지합니다.
+ 전환 수명 주기 구성이 있는 경우 버전 관리를 활성화한 후 `NonCurrentVersionTransition` 정책을 추가하는 것을 고려하세요.

### 버전 관리 구성 및 복제 구성
<a name="replication-and-versioning"></a>

버킷에 대한 복제를 구성하려면 원본 및 대상 버킷 모두 버전 관리가 사용 설정되어 있어야 합니다. 원본 및 대상 버킷에 버전 관리를 사용 설정하고 원본 버킷의 복제를 구성한 후, 다음과 같은 문제가 발생할 수 있습니다.
+ 원본 버킷의 버전 관리를 사용 중지하려는 경우, Amazon S3는 오류를 반환합니다. 원본 버킷의 버전 관리를 사용 중지하려면 우선 복제 구성을 삭제해야 합니다.
+ 대상 버킷의 버전 관리를 사용 중지하는 경우, 복제가 실패합니다. 원본 객체의 복제 상태가 `FAILED`입니다.

### S3 Intelligent-Tiering과 함께 S3 복제 사용
<a name="replication-and-intelligent-tiering"></a>

S3 Intelligent-Tiering은 가장 비용 효율적인 액세스 계층으로 데이터를 자동으로 이동하여 스토리지 비용을 최적화하도록 설계된 스토리지 클래스입니다. 약간의 월별 객체 모니터링 및 자동화 요금만 지불하면 S3 Intelligent-Tiering에서 액세스 패턴을 모니터링하고, 액세스되지 않은 객체를 저렴한 액세스 계층으로 자동으로 이동합니다.

S3 배치 복제를 사용하여 S3 Intelligent-Tiering에 저장된 객체를 복제하거나 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 또는 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)를 호출하는 것은 액세스를 구성합니다. 이러한 경우 복사 또는 복제 작업의 소스 객체가 계층화됩니다.

S3 Intelligent-Tiering에 대한 자세한 내용은 [Amazon S3 Intelligent-Tiering을 사용한 스토리지 비용 관리](intelligent-tiering.md) 단원을 참조하세요.

### 로그 구성 및 복제 구성
<a name="replication-and-logging"></a>

Amazon S3가 복제가 사용 설정된 버킷에 대한 로그를 제공하는 경우, 해당 로그 객체가 복제됩니다.

소스 또는 대상 버킷에서 [서버 액세스 로그](ServerLogs.md) 또는 [AWS CloudTrail 로그](cloudtrail-logging.md)가 사용된 경우 Amazon S3는 로그에 복제 관련 요청을 포함합니다. 예를 들어 Amazon S3는 복제되는 각 객체를 기록합니다.

### CRR 및 대상 리전
<a name="replication-and-dest-region"></a>

Amazon S3 교차 리전 복제(CRR)는 서로 다른 AWS 리전의 S3 버킷에서 객체를 복사하는 데 사용됩니다. 비즈니스 요구 사항 또는 비용 고려 사항에 따라 대상 버킷의 리전을 선택할 수 있습니다. 예를 들어, 리전 간 데이터 전송 요금은 선택한 리전에 따라 다릅니다.

소스 버킷의 리전으로 미국 동부(버지니아 북부)(`us-east-1`)를 선택했다고 가정하겠습니다. 미국 서부(오리건)(`us-west-2`)를 대상 버킷의 리전으로 선택한 경우 미국 동부(오하이오)(`us-east-2`) 리전을 선택한 경우보다 더 많은 요금을 지불해야 합니다. 요금 정보는 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/) 섹션의 ‘데이터 전송 요금’을 참조하세요.

동일 리전 복제(SRR)와 관련된 데이터 전송 요금은 없습니다.

### S3 배치 복제
<a name="considerations-batch-replication"></a>

배치 복제에 관한 고려 사항은 [S3 배치 복제 고려 사항](s3-batch-replication-batch.md#batch-replication-considerations) 섹션을 참조하세요.

### S3 복제 시간 제어
<a name="considerations-RTC"></a>

S3 Replication Time Control(S3 RTC)에 대한 자세한 내용은 [S3 RTC에 대한 모범 사례 및 지침](replication-time-control.md#rtc-best-practices) 섹션을 참조하세요.

# 라이브 복제 설정 개요
<a name="replication-how-setup"></a>

**참고**  
복제를 설정하기 전에 존재한 객체는 자동으로 복제되지 않습니다. 즉, Amazon S3는 소급하여 객체를 복제하지 않습니다. 복제 구성 전에 생성된 객체를 복제하려면 S3 배치 복제를 사용합니다. 배치 복제 구성에 대한 자세한 내용은 [기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.

동일 리전 복제(SRR) 또는 교차 리전 복제(CRR)와 같은 라이브 복제를 활성화하려면 소스 버킷에 복제 구성을 추가합니다. 이 구성은 지정된 대로 객체를 복제하도록 Amazon S3에 지시합니다. 복제 구성에서는 다음을 제공해야 합니다.
+ **대상 버킷** - Amazon S3가 객체를 복제할 버킷입니다.
+ **복제할 객체** - 소스 버킷 또는 객체 하위 집합에 있는 모든 객체를 복제할 수 있습니다. 구성에 [키 이름 접두사](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#keyprefix), 하나 이상의 객체 태그, 또는 둘 모두를 제공하여 하위 집합을 식별합니다.

  예를 들어, 키 이름 접두사 `Tax/`가 포함된 객체만 복제할 복제 규칙을 구성할 경우 Amazon S3는 `Tax/doc1` 또는 `Tax/doc2`와 같은 키가 있는 객체를 복제합니다. 그러나 `Legal/doc3` 키가 있는 객체는 복제하지 않습니다. 접두사와 하나 이상의 태그를 함께 지정할 경우 Amazon S3는 특정 키 접두사와 태그가 있는 객체만 복제합니다.
+ **AWS Identity and Access Management(IAM) 역할** – Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 역할을 맡습니다. 이 IAM 역할 생성 및 권한 관리에 대한 자세한 내용은 [라이브 복제에 대한 권한 설정](setting-repl-config-perm-overview.md) 섹션을 참조하세요.

이러한 최소 요건에 더해, 다음 옵션을 선택할 수 있습니다.
+ **복제본 스토리지 클래스** - 기본적으로 Amazon S3는 소스 객체와 동일한 스토리지 클래스를 사용하여 객체 복제본을 저장합니다. 복제본에 대해 다른 스토리지 클래스를 지정할 수 있습니다.
+ **복제본 소유권** - Amazon S3는 소스 객체 소유자가 객체 복제본을 계속 소유하게 된다고 가정합니다. 따라서 객체를 복제할 때 해당되는 객체 액세스 제어 목록(ACL) 또는 S3 객체 소유권 설정도 복제됩니다. 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유하는 경우 복제본 소유자를 대상 버킷을 소유한 AWS 계정으로 변경하도록 복제를 구성할 수 있습니다. 자세한 내용은 [복제본 소유자 변경](replication-change-owner.md) 섹션을 참조하세요.

Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 사용하여 복제를 구성할 수 있습니다. 복제 설정 방법에 대한 자세한 설명은 [라이브 복제 구성 예제](replication-example-walkthroughs.md) 섹션을 참조하세요.

 Amazon S3는 복제 규칙 설정을 지원하기 위해 REST API 작업을 제공합니다. 자세한 내용은 *Amazon Simple Storage Service API 참조*의 다음 주제들을 참조하세요.
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html) 

**Topics**
+ [복제 구성 파일 요소](replication-add-config.md)
+ [라이브 복제에 대한 권한 설정](setting-repl-config-perm-overview.md)
+ [라이브 복제 구성 예제](replication-example-walkthroughs.md)

# 복제 구성 파일 요소
<a name="replication-add-config"></a>

Amazon S3는 복제 구성을 XML로 저장합니다. Amazon S3 REST API를 통해 프로그래밍 방식으로 복제를 구성하는 경우, 이 XML 파일에 복제 구성의 다양한 요소를 지정합니다. AWS Command Line Interface(AWS CLI)를 통해 복제를 구성하는 경우 JSON 형식을 사용하여 복제 구성을 지정합니다. JSON 예제는 [라이브 복제 구성 예제](replication-example-walkthroughs.md)의 안내를 참조하세요.

**참고**  
최신 버전의 복제 구성 XML 형식은 V2입니다. XML V2 복제 구성은 규칙에 대한 `<Filter>` 요소 그리고 S3 Replication Time Control(S3 RTC)을 지정하는 규칙을 포함하는 구성입니다.  
복제 구성 버전을 보려면 `GetBucketReplication` API 작업을 사용할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service API 참조*에서 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html)를 참조하세요.  
이전 버전과의 호환성을 위해 Amazon S3는 XML V1 복제 구성 형식을 계속 지원합니다. XML V1 복제 구성 형식을 사용한 적이 있는 경우 이전 버전과의 호환성 고려 사항은 [이전 버전과의 호환성 고려 사항](#replication-backward-compat-considerations) 섹션을 참조하세요.

복제 구성 XML 파일에서 다음 예제와 같이 AWS Identity and Access Management(IAM) 역할과 하나 이상의 규칙을 지정해야 합니다.

```
<ReplicationConfiguration>
    <Role>IAM-role-ARN</Role>
    <Rule>
        ...
    </Rule>
    <Rule>
         ... 
    </Rule>
     ...
</ReplicationConfiguration>
```

Amazon S3는 사용자가 부여한 권한 없이 객체를 복제할 수 없습니다. 복제 구성에서 지정한 IAM 역할로 Amazon S3에 대한 권한을 부여합니다. Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 IAM 역할을 맡습니다. 먼저 IAM 역할에 필요한 권한을 부여해야 합니다. 권한 관리에 대한 자세한 내용은 [라이브 복제에 대한 권한 설정](setting-repl-config-perm-overview.md) 섹션을 참조하세요.

다음 시나리오에서는 복제 구성에 딱 한 가지 규칙을 추가합니다.
+ 모든 객체를 복제하려는 경우
+ 객체의 하위 집합을 하나만 복제하려는 경우. 규칙에 필터를 추가하여 객체 하위 집합을 식별하는 경우 필터에서 객체 키 접두사, 태그 또는 둘 모두를 지정하여 규칙이 적용되는 객체의 하위 집합을 식별합니다. 필터는 지정한 값과 정확히 일치하는 객체를 대상으로 합니다.

서로 다른 객체 하위 집합을 복제하려면 복제 구성에 여러 규칙을 추가하면 됩니다. 각 규칙에서 다른 하위 집합을 선택하는 필터를 지정합니다. 예를 들어 `tax/` 또는`document/` 키 접두사를 갖는 객체를 복제하도록 선택할 수 있습니다. 이렇게 하려면 두 가지 규칙을 추가합니다. 하나는 `tax/` 키 접두사 필터를 지정하고 다른 하나는 `document/` 키 접두사를 지정합니다. 객체 키 접두사에 대한 자세한 내용은 [접두어를 사용한 객체 구성](using-prefixes.md) 섹션을 참조하세요.

다음 섹션에서 정보를 추가로 제공합니다.

**Topics**
+ [기본 규칙 구성](#replication-config-min-rule-config)
+ [선택 사항: 필터 지정](#replication-config-optional-filter)
+ [추가 대상 구성](#replication-config-optional-dest-config)
+ [예제 복제 구성](#replication-config-example-configs)
+ [이전 버전과의 호환성 고려 사항](#replication-backward-compat-considerations)

## 기본 규칙 구성
<a name="replication-config-min-rule-config"></a>

각 규칙은 규칙의 상태 및 우선 순위를 포함해야 합니다. 규칙은 삭제 마커를 복제할지 여부를 나타내야 합니다.
+ `<Status>` 요소는 `Enabled` 또는 `Disabled` 값을 사용하여 규칙이 활성화 또는 비활성화되는지 여부를 나타냅니다. 규칙이 사용 중지되면 Amazon S3는 규칙에 지정된 작업을 수행하지 않습니다.
+ `<Priority>` 요소는 둘 이상의 복제 규칙이 충돌할 때마다 어떤 규칙의 우선순위가 높은지를 나타냅니다. Amazon S3는 모든 복제 규칙에 따라 객체 복제를 시도합니다. 그러나 동일한 대상 버킷이 있는 규칙이 둘 이상인 경우, 우선 순위가 가장 높은 규칙에 따라 객체가 복제됩니다. 숫자가 클수록 우선 순위가 높아집니다.
+ `<DeleteMarkerReplication>` 요소는 `Enabled` 또는 `Disabled` 값을 사용하여 삭제 마커를 복제할지 여부를 나타냅니다.

`<Destination>` 요소 구성에서는 Amazon S3에서 객체를 복제할 하나 이상의 대상 버킷 이름을 입력해야 합니다.

다음 예제는 V2 규칙에 대한 최소 요구 사항을 보여줍니다. 이전 버전과의 호환성을 위해 Amazon S3는 XML V1 형식을 계속 지원합니다. 자세한 내용은 [이전 버전과의 호환성 고려 사항](#replication-backward-compat-considerations) 섹션을 참조하세요.

```
...
    <Rule>
        <ID>Rule-1</ID>
        <Status>Enabled-or-Disabled</Status>
        <Filter>
            <Prefix></Prefix>   
        </Filter>
        <Priority>integer</Priority>
        <DeleteMarkerReplication>
           <Status>Enabled-or-Disabled</Status>
        </DeleteMarkerReplication>
        <Destination>        
           <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket> 
        </Destination>    
    </Rule>
    <Rule>
         ...
    </Rule>
     ...
...
```

또한 다른 구성 옵션도 지정할 수도 있습니다. 예를 들어 원본 객체의 스토리지 클래스와 다른 객체 복제본 스토리지 클래스를 사용할 수 있습니다.

## 선택 사항: 필터 지정
<a name="replication-config-optional-filter"></a>

객체에서 규칙이 적용되는 하위 집합을 선택하려면 옵션 필터를 추가합니다. 객체 키 접두사, 객체 태그 또는 이 두 가지를 모두 사용하여 필터를 지정할 수 있습니다. 키 접두사와 객체 태그를 모두 사용하여 필터링하는 경우 Amazon S3는 논리 `AND` 연산자를 사용하여 필터를 조합합니다. 즉, 규칙은 특정 키 접두사와 특정 태그를 모두 가진 객체의 하위 집합에 적용됩니다.

**객체 키 접두사를 기준으로 필터링**  
객체 키 접두사를 기반으로 한 필터를 사용하여 규칙을 지정하려면 다음 XML을 사용합니다. 규칙당 접두사는 하나만 지정할 수 있습니다.

```
<Rule>
    ...
    <Filter>
        <Prefix>key-prefix</Prefix>   
    </Filter>
    ...
</Rule>
...
```

**객체 태그를 기준으로 필터링**  
객체 태그를 기반으로 한 필터를 사용하여 규칙을 지정하려면 다음 XML을 사용합니다. 객체 태그는 하나 이상 지정할 수 있습니다.

```
<Rule>
    ...
    <Filter>
        <And>
            <Tag>
                <Key>key1</Key>
                <Value>value1</Value>
            </Tag>
            <Tag>
                <Key>key2</Key>
                <Value>value2</Value>
            </Tag>
             ...
        </And>
    </Filter>
    ...
</Rule>
...
```

**키 접두사 및 객체 태그로 필터링**  
키 접두사와 객체 태그가 조합된 규칙 필터를 지정하려면 다음 XML을 사용합니다. `<And>` 상위 요소에서 이러한 필터를 래핑합니다. Amazon S3는 논리적 `AND` 작업을 수행하여 이들 필터를 조합합니다. 즉, 규칙은 특정 키 접두사와 특정 태그를 모두 가진 객체의 하위 집합에 적용됩니다.

```
<Rule>
    ...
    <Filter>
        <And>
            <Prefix>key-prefix</Prefix>
            <Tag>
                <Key>key1</Key>
                <Value>value1</Value>
            </Tag>
            <Tag>
                <Key>key2</Key>
                <Value>value2</Value>
            </Tag>
             ...
    </Filter>
    ...
</Rule>
...
```

**참고**  
빈 `<Filter>` 요소가 있는 규칙을 지정하면 규칙이 버킷의 모든 객체에 적용됩니다.
실시간 복제와 함께 태그 기반 복제 규칙을 사용하는 경우 `PutObject` 작업에서 매칭되는 복제 규칙 태그로 새 객체에 태그를 지정해야 합니다. 그러지 않으면 객체가 복제되지 않습니다. `PutObject` 작업 후 객체에 태그가 지정된 경우 해당 객체도 복제되지 않습니다.  
`PutObject` 작업을 수행한 후 태그가 지정된 객체를 복제하려면 S3 배치 복제를 사용해야 합니다. Batch Replication에 대한 자세한 내용은 [기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.

## 추가 대상 구성
<a name="replication-config-optional-dest-config"></a>

대상 구성에서는 Amazon S3가 객체를 복제할 버킷을 지정합니다. 한 원본 버킷에서 하나 이상의 대상 버킷으로 객체를 복제하도록 복제를 구성할 수 있습니다.

```
...
<Destination>        
    <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
</Destination>
...
```

`<Destination>` 요소에 다음 옵션을 추가할 수 있습니다.

**Topics**
+ [스토리지 클래스 지정](#storage-class-configuration)
+ [여러 대상 버킷 추가](#multiple-destination-buckets-configuration)
+ [여러 대상 버킷이 있는 각 복제 규칙에 대해 서로 다른 파라미터 지정](#replication-rule-configuration)
+ [복제본 소유권 변경](#replica-ownership-configuration)
+ [S3 복제 시간 제어 사용 설정](#rtc-configuration)
+ [AWS KMS를 사용하여 서버 측 암호화로 생성된 객체 복제](#sse-kms-configuration)

### 스토리지 클래스 지정
<a name="storage-class-configuration"></a>

객체 복제본에 대해 스토리지 클래스를 지정할 수 있습니다. 기본적으로 Amazon S3는 다음 예제와 같이 원본 객체의 스토리지 클래스를 사용하여 객체 복제본을 생성합니다.

```
...
<Destination>
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
       <StorageClass>storage-class</StorageClass>
</Destination>
...
```

### 여러 대상 버킷 추가
<a name="multiple-destination-buckets-configuration"></a>

다음과 같이 단일 복제 구성에서 여러 대상 버킷을 추가할 수 있습니다.

```
...
<Rule>
    <ID>Rule-1</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Enabled-or-Disabled</Status>
    </DeleteMarkerReplication>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket1</Bucket> 
    </Destination>    
</Rule>
<Rule>
    <ID>Rule-2</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Enabled-or-Disabled</Status>
    </DeleteMarkerReplication>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket2</Bucket> 
    </Destination>    
</Rule>
...
```

### 여러 대상 버킷이 있는 각 복제 규칙에 대해 서로 다른 파라미터 지정
<a name="replication-rule-configuration"></a>

단일 복제 구성에서 여러 대상 버킷을 추가할 때 다음과 같이 각 복제 규칙에 대해 서로 다른 파라미터를 지정할 수 있습니다.

```
...
<Rule>
    <ID>Rule-1</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Disabled</Status>
    </DeleteMarkerReplication>
      <Metrics>
    <Status>Enabled</Status>
    <EventThreshold>
      <Minutes>15</Minutes> 
    </EventThreshold>
  </Metrics>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket1</Bucket> 
    </Destination>    
</Rule>
<Rule>
    <ID>Rule-2</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Enabled</Status>
    </DeleteMarkerReplication>
      <Metrics>
    <Status>Enabled</Status>
    <EventThreshold>
      <Minutes>15</Minutes> 
    </EventThreshold>
  </Metrics>
  <ReplicationTime>
    <Status>Enabled</Status>
    <Time>
      <Minutes>15</Minutes>
    </Time>
  </ReplicationTime>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket2</Bucket> 
    </Destination>    
</Rule>
...
```

### 복제본 소유권 변경
<a name="replica-ownership-configuration"></a>

소스 버킷과 대상 버킷을 동일한 계정에서 소유하지 않는 경우 복제본의 소유권을 대상 버킷을 소유한 AWS 계정로 변경할 수 있습니다. 이렇게 하려면 `<AccessControlTranslation>` 요소를 추가합니다. 이 요소는 `Destination` 값을 가져옵니다.

```
...
<Destination>
   <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
   <Account>destination-bucket-owner-account-id</Account>
   <AccessControlTranslation>
       <Owner>Destination</Owner>
   </AccessControlTranslation>
</Destination>
...
```

복제 구성에 `<AccessControlTranslation>` 요소를 추가하지 않으면 소스 객체를 소유한 계정과 동일한 AWS 계정에서 복제본을 소유합니다. 자세한 내용은 [복제본 소유자 변경](replication-change-owner.md) 섹션을 참조하세요.

### S3 복제 시간 제어 사용 설정
<a name="rtc-configuration"></a>

복제 구성에서 S3 Replication Time Control(S3 RTC)을 사용 설정할 수 있습니다. S3 RTC는 대부분의 객체를 몇 초 만에 복제하고, 이러한 객체의 99.99%를 15분 내에 복제합니다(서비스 수준 계약에 따라).

**참고**  
`<Minutes>15</Minutes>` 값은 `<EventThreshold>` 및 `<Time>` 요소에만 허용됩니다.

```
...
<Destination>
  <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
  <Metrics>
    <Status>Enabled</Status>
    <EventThreshold>
      <Minutes>15</Minutes> 
    </EventThreshold>
  </Metrics>
  <ReplicationTime>
    <Status>Enabled</Status>
    <Time>
      <Minutes>15</Minutes>
    </Time>
  </ReplicationTime>
</Destination>
...
```

자세한 내용은 [S3 Replication Time Control을 사용하여 규정 준수 요구 사항 충족](replication-time-control.md) 섹션을 참조하세요. API 예제는 **Amazon Simple Storage Service API 참조의 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html) 섹션을 참조하세요.

### AWS KMS를 사용하여 서버 측 암호화로 생성된 객체 복제
<a name="sse-kms-configuration"></a>

AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용하는 서버 측 암호화로 생성되는 객체가 소스 버킷에 포함될 수 있습니다. 기본적으로 Amazon S3는 이러한 객체를 복제하지 않습니다. 필요하다면 Amazon S3에 이러한 객체를 복제하도록 지시할 수 있습니다. 이렇게 하려면 먼저 `<SourceSelectionCriteria>` 요소를 추가하여 이 기능을 명시적으로 선택합니다. 그런 다음 AWS KMS key(대상 버킷의 AWS 리전용)를 제공하여 객체 복제본 암호화에 사용합니다. 다음 예제에서는 이러한 요소를 지정하는 방법을 보여줍니다.

```
...
<SourceSelectionCriteria>
  <SseKmsEncryptedObjects>
    <Status>Enabled</Status>
  </SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
  <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
  <EncryptionConfiguration>
    <ReplicaKmsKeyID>AWS KMS key ID to use for encrypting object replicas</ReplicaKmsKeyID>
  </EncryptionConfiguration>
</Destination>
...
```

자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.

## 예제 복제 구성
<a name="replication-config-example-configs"></a>

시작하려면, 다음 예제 복제 구성을 적절히 버킷에 추가할 수 있습니다.

**중요**  
버킷에 복제 구성을 추가하려면 `iam:PassRole` 권한이 있어야 합니다. 이 권한을 사용하면 Amazon S3에 복제 권한을 부여하는 IAM 역할을 전달할 수 있습니다. 복제 구성 XML의 `<Role>` 요소에서 사용되는 Amazon 리소스 이름(ARN)을 제공하여 IAM 역할을 지정합니다. 자세한 내용은 *IAM 사용 설명서*에서 [사용자에게 AWS 서비스에 역할을 전달할 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

**Example 1: 한 가지 규칙으로 이루어진 복제 구성**  
다음 기본 복제 구성은 한 규칙을 지정합니다. 이 규칙은 Amazon S3가 맡을 수 있는 IAM 역할과 객체 복제본의 단일 대상 버킷을 지정합니다. `<Status>` 요소 값이 `Enabled`인 경우 이 규칙이 유효한 상태임을 나타냅니다.  

```
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Role>arn:aws:iam::account-id:role/role-name</Role>
  <Rule>
    <Status>Enabled</Status>

    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```
복제할 객체 하위 집합을 선택하려면 필터를 추가할 수 있습니다. 다음 구성에서 필터는 객체 키 접두사를 지정합니다. 이 규칙은 키 이름에 접두사 `Tax/`가 포함된 객체에 적용됩니다.  

```
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Role>arn:aws:iam::account-id:role/role-name</Role>
  <Rule>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>

    <Filter>
       <Prefix>Tax/</Prefix>
    </Filter>

    <Destination>
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>

  </Rule>
</ReplicationConfiguration>
```
`<Filter>` 요소를 지정하는 경우 `<Priority>` 및 `<DeleteMarkerReplication>` 요소도 포함시켜야 합니다. 이 예제에서는 규칙이 하나뿐이므로, `<Priority>` 요소에 설정한 값은 관련이 없습니다.  
다음 구성에서 필터는 하나의 접두사 두 개의 태그를 지정합니다. 이 규칙은 객체에서 지정된 접두사와 태그가 있는 하위 집합에 적용됩니다. 구체적으로, 이 규칙은 키 이름에 `Tax/` 접두사가 포함되고 2개의 지정된 객체 태그가 있는 객체에 적용됩니다. 이 예제에서는 규칙이 하나뿐이므로, `<Priority>` 요소에 설정한 값은 관련이 없습니다.  

```
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Role>arn:aws:iam::account-id:role/role-name</Role>
  <Rule>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>

    <Filter>
        <And>
          <Prefix>Tax/</Prefix>
          <Tag>
             <Tag>
                <Key>tagA</Key>
                <Value>valueA</Value>
             </Tag>
          </Tag>
          <Tag>
             <Tag>
                <Key>tagB</Key>
                <Value>valueB</Value>
             </Tag>
          </Tag>
       </And>

    </Filter>

    <Destination>
        <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>

  </Rule>
</ReplicationConfiguration>
```
다음과 같이 객체 복제본에 대해 스토리지 클래스를 지정할 수 있습니다.  

```
<?xml version="1.0" encoding="UTF-8"?>

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Role>arn:aws:iam::account-id:role/role-name</Role>
  <Rule>
    <Status>Enabled</Status>
    <Destination>
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
       <StorageClass>storage-class</StorageClass>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```
Amazon S3가 지원하는 모든 스토리지 클래스를 지정할 수 있습니다.

**Example 2: 두 가지 규칙으로 이루어진 복제 구성**  

**Example**  
다음 복제 구성에서 규칙은 다음을 지정합니다.  
+ 각 규칙은 객체의 고유한 하위 집합에 적용되도록 서로 다른 키 접두사를 필터링합니다. 예를 들어 Amazon S3는 키 이름이 *`Tax/doc1.pdf`* 및 *`Project/project1.txt`*인 객체는 복제하지만, 키 이름이 *`PersonalDoc/documentA`*인 객체는 복제하지 않습니다.
+ 규칙 모두 `<Priority>` 요소 값을 지정하지만, 규칙이 서로 다른 객체 집합에 적용되어 규칙 우선순위는 관련이 없습니다. 다음 예제는 규칙 우선 순위가 적용되면 발생하는 상황을 보여 줍니다.
+ 두 번째 규칙은 객체 복제본에 대한 S3 Standard-IA 스토리지 클래스를 지정합니다. Amazon S3는 해당 객체 복제본에 대해 지정된 스토리지 클래스를 사용합니다.
   

```
<?xml version="1.0" encoding="UTF-8"?>

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Role>arn:aws:iam::account-id:role/role-name</Role>
  <Rule>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>Tax</Prefix>
    </Filter>
    <Status>Enabled</Status>
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
     ...
  </Rule>
 <Rule>
    <Status>Enabled</Status>
    <Priority>2</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>Project</Prefix>
    </Filter>
    <Status>Enabled</Status>
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
     <StorageClass>STANDARD_IA</StorageClass>
    </Destination>
     ...
  </Rule>


</ReplicationConfiguration>
```

**Example 3: 접두사가 중첩되는 두 가지 규칙으로 이루어진 복제 구성**  <a name="overlap-rule-example"></a>
이 구성에는 *`star`* 및 *`starship`*과 같이 중첩되는 키 접두사를 포함하는 필터를 지정하는 규칙이 두 개 있습니다. 두 규칙은 키 이름이 *`starship-x`*인 객체에 모두 적용됩니다. 이 경우, Amazon S3는 규칙 우선 순위를 사용하여 어느 규칙을 적용할지 결정합니다. 숫자가 클수록 우선 순위가 높아집니다.  

```
<ReplicationConfiguration>

  <Role>arn:aws:iam::account-id:role/role-name</Role>

  <Rule>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>star</Prefix>
    </Filter>
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
  </Rule>
  <Rule>
    <Status>Enabled</Status>
    <Priority>2</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>starship</Prefix>
    </Filter>    
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```

**Example 4: 예제 안내**  
예제 안내에 대해서는 [라이브 복제 구성 예제](replication-example-walkthroughs.md)을 참조하세요.

복제 구성의 XML 구조에 대한 자세한 내용은 *Amazon Simple Storage Service API 참조*의 [PutBucketReplication](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html)을 참조하십시오.

## 이전 버전과의 호환성 고려 사항
<a name="replication-backward-compat-considerations"></a>

최신 버전의 복제 구성 XML 형식은 V2입니다. XML V2 복제 구성은 규칙에 대한 `<Filter>` 요소 그리고 S3 Replication Time Control(S3 RTC)을 지정하는 규칙을 포함하는 구성입니다.

복제 구성 버전을 보려면 `GetBucketReplication` API 작업을 사용할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service API 참조*에서 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html)를 참조하세요.

이전 버전과의 호환성을 위해 Amazon S3는 XML V1 복제 구성 형식을 계속 지원합니다. XML V1 복제 구성 형식을 사용한 경우, 이전 버전과의 호환성에 영향을 미치는 다음 문제를 고려하세요.
+ 복제 구성 XML V2 형식은 규칙에 대한 `<Filter>` 요소를 포함합니다. `<Filter>` 요소를 사용하면 객체 키 접두사, 태그 또는 이 두 가지를 기반으로 객체 필터를 지정하여 규칙이 적용되는 객체의 범위를 설정할 수 있습니다. 복제 구성 XML V1 형식은 키 접두사를 기반으로 한 필터링만 지원합니다. 이 경우 다음 예제와 같이 `<Rule>` 요소의 하위 요소로 `<Prefix>` 요소를 직접 추가합니다.

  ```
  <?xml version="1.0" encoding="UTF-8"?>
  <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Role>arn:aws:iam::account-id:role/role-name</Role>
    <Rule>
      <Status>Enabled</Status>
      <Prefix>key-prefix</Prefix>
      <Destination>
         <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
      </Destination>
  
    </Rule>
  </ReplicationConfiguration>
  ```
+ 객체 버전 ID를 지정하지 않고 원본 버킷에서 객체를 삭제할 경우 Amazon S3는 삭제 마커를 추가합니다. 복제 구성 XML V1 형식을 사용하는 경우 Amazon S3는 사용자 작업으로 인해 발생하는 삭제 마커만 복제합니다. 즉, Amazon S3는 사용자가 객체를 삭제하는 경우에만 삭제 마커를 복제합니다. Amazon S3에서 만료된 객체를 제거하면(수명 주기 작업의 일부로) Amazon S3는 삭제 마커를 복제하지 않습니다.

  복제 구성 XML V2 형식에서 비태그 기반 규칙에 대해 삭제 마커 복제를 활성화할 수 있습니다. 자세한 내용은 [버킷 간 삭제 마커 복제](delete-marker-replication.md) 섹션을 참조하세요.

 

# 라이브 복제에 대한 권한 설정
<a name="setting-repl-config-perm-overview"></a>

Amazon S3에서 라이브 복제를 설정할 때 다음과 같이 필요한 권한을 획득해야 합니다.
+ 복제 규칙을 생성할 AWS Identity and Access Management(IAM) 위탁자(사용자 또는 역할)에 특정 권한 집합을 부여해야 합니다.
+ Amazon S3는 사용자를 대신하여 객체를 복제할 수 있는 권한이 필요합니다. IAM 역할을 생성하고 복제 구성에서 이 역할을 지정하여 이러한 권한을 부여합니다.
+ 소스 버킷과 대상 버킷을 동일한 계정에서 소유하지 않는 경우 대상 버킷 소유자는 소스 버킷 소유자에게 복제본을 저장할 권한도 부여해야 합니다.

**참고**  
라이브 복제를 설정하는 대신 S3 Batch Operations를 사용하여 온디맨드로 객체를 복제하는 경우 S3 Batch Replication에는 다른 IAM 역할과 정책이 필요합니다. 배치 복제 IAM 역할 및 정책 예제는 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md) 섹션을 참조하세요.

**Topics**
+ [1단계: 복제 규칙을 생성하는 IAM 위탁자에게 권한 부여](#setting-repl-config-role)
+ [2단계: Amazon S3가 수임할 IAM 역할 생성](#setting-repl-config-same-acctowner)
+ [3단계(선택 사항): 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유할 경우 권한 부여](#setting-repl-config-crossacct)
+ [4단계(선택 사항): 복제본 소유권을 변경할 권한 부여](#change-replica-ownership)

## 1단계: 복제 규칙을 생성하는 IAM 위탁자에게 권한 부여
<a name="setting-repl-config-role"></a>

복제 규칙을 생성하는 데 사용할 IAM 사용자 또는 역할에는 단방향 또는 양방향 복제에 대한 복제 규칙을 생성할 권한이 필요합니다. 사용자 또는 역할에 이러한 권한이 없는 경우 복제 규칙을 생성할 수 없습니다. 자세한 내용은 *IAM 사용 설명서*에서 [IAM 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)을 참조하세요.

사용자 또는 역할에는 다음 작업이 필요합니다.
+ `iam:AttachRolePolicy`
+ `iam:CreatePolicy`
+ `iam:CreateServiceLinkedRole`
+ `iam:PassRole`
+ `iam:PutRolePolicy`
+ `s3:GetBucketVersioning`
+ `s3:GetObjectVersionAcl`
+ `s3:GetObjectVersionForReplication`
+ `s3:GetReplicationConfiguration`
+ `s3:PutReplicationConfiguration`

다음은 이러한 작업을 포함하는 샘플 IAM 정책입니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetAccessPoint",
                "s3:GetAccountPublicAccessBlock",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets",
                "s3:PutReplicationConfiguration",
                "s3:GetReplicationConfiguration",
                "s3:GetBucketVersioning",
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionAcl",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetObjectVersion",
                "s3:GetBucketOwnershipControls",
                "s3:PutBucketOwnershipControls",
                "s3:GetObjectLegalHold",
                "s3:GetObjectRetention",
                "s3:GetBucketObjectLockConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1-*",
                "arn:aws:s3:::amzn-s3-demo-bucket2-*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:List*AccessPoint*",
                "s3:GetMultiRegion*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:CreateServiceLinkedRole",
                "iam:CreateRole",
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/service-role/s3*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:List*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "iam:CreatePolicy"
              ],
            "Resource": [
                "arn:aws:iam::*:policy/service-role/s3*",
                "arn:aws:iam::*:role/service-role/s3*"
            ]
        }
    ]
}
```

------

## 2단계: Amazon S3가 수임할 IAM 역할 생성
<a name="setting-repl-config-same-acctowner"></a>



기본적으로 Amazon S3 리소스인 버킷, 객체 및 관련 하위 리소스는 모두 비공개이며 리소스 소유자만 리소스에 액세스할 수 있습니다. Amazon S3는 소스 버킷에서 객체를 읽고 복제할 수 있는 권한이 필요합니다. IAM 역할을 생성하고 복제 구성에서 이 역할을 지정하여 이러한 권한을 부여합니다.

이 섹션에서는 IAM 역할에 연결된 신뢰 정책과 최소한의 필수 권한 정책을 설명합니다. 연습 예제가 IAM 역할을 생성하는 단계별 지침을 제공합니다. 자세한 내용은 [라이브 복제 구성 예제](replication-example-walkthroughs.md) 섹션을 참조하세요.

**참고**  
콘솔을 사용하여 복제 구성을 생성하는 경우 이 섹션을 건너뛰고 대신 콘솔에서 이 IAM 역할과 필요한 신뢰 및 권한 정책을 생성하도록 하는 것이 좋습니다.

**신뢰 정책은 IAM 역할을 맡을 수 있는 보안 주체 ID를 식별합니다. **권한 정책은 IAM 역할이 어떤 리소스와 어떤 조건에서 어떤 작업을 수행할 수 있는지를 지정합니다.
+ 다음 예제는 역할을 맡을 수 있는 AWS 서비스 보안 주체로서 Amazon S3를 식별하는 **신뢰 정책을 보여줍니다.

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

****  

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

------
+ 다음 예제는 Amazon S3 및 S3 Batch Operations를 역할을 맡을 수 있는 서비스 보안 주체로 식별하는 **신뢰 정책을 보여줍니다. 배치 복제 작업을 생성하는 경우 이 접근 방식을 사용하세요. 자세한 내용은 [새 복제 규칙 또는 대상에 대한 배치 복제 작업 만들기](s3-batch-replication-new-config.md) 섹션을 참조하세요.

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

****  

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

------

  IAM 역할에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 단원을 참조하세요.
+ 다음 예제는 사용자를 대신하여 복제 태스크를 수행할 수 있는 IAM 역할 권한을 부여하는 **권한 정책을 보여줍니다. Amazon S3가 이 역할을 맡으면 이 정책에 지정된 권한을 보유하게 됩니다. 이 정책에서는 `amzn-s3-demo-source-bucket`이 소스 버킷이고, `amzn-s3-demo-destination-bucket`가 대상 버킷입니다.

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

****  

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

------

  권한 정책은 다음 작업에 대한 권한을 부여합니다.
  +  `s3:GetReplicationConfiguration` 및 `s3:ListBucket` - `amzn-s3-demo-source-bucket` 버킷에 대한 이러한 작업 권한을 통해 Amazon S3는 복제 구성을 검색하고 버킷 내용을 나열할 수 있습니다. (현재 권한 모델에는 삭제 마커에 액세스할 수 있는 `s3:ListBucket` 권한이 필요합니다.)
  + `s3:GetObjectVersionForReplication` 및 `s3:GetObjectVersionAcl` - 모든 객체에 대해 부여되는 이러한 작업 권한을 사용하면 Amazon S3는 특정 객체 버전 및 객체와 연결된 ACL(액세스 제어 목록)을 가져올 수 있습니다.

    
  + `s3:ReplicateObject` 및 `s3:ReplicateDelete` - `amzn-s3-demo-destination-bucket` 버킷의 모든 객체에 대한 이러한 작업 권한을 사용하면 Amazon S3는 대상 버킷에 객체 또는 삭제 마커를 복제할 수 있습니다. 삭제 마커에 대한 자세한 내용은 [삭제 작업이 복제에 미치는 영향](replication-what-is-isnot-replicated.md#replication-delete-op)을 참조하세요.
**참고**  
`amzn-s3-demo-destination-bucket` 버킷에서의 `s3:ReplicateObject` 작업에 대한 권한은 객체 태그 및 ACL과 같은 메타데이터의 복제도 허용합니다. 따라서 `s3:ReplicateTags` 작업에 대한 권한을 명시적으로 부여할 필요가 없습니다.
  + `s3:GetObjectVersionTagging` - `amzn-s3-demo-source-bucket` 버킷의 객체에 대해 이 작업 권한을 사용하면 Amazon S3는 복제 대상 객체 태그를 읽을 수 있습니다. 객체 태그에 대한 자세한 내용은 [태그를 사용하여 객체 분류](object-tagging.md) 섹션을 참조하십시오. `s3:GetObjectVersionTagging` 권한이 없을 경우 Amazon S3는 객체를 복제하지만, 객체 태그는 복제하지 않습니다.

  Amazon S3 작업의 목록은 **서비스 승인 참조의 [Amazon S3에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#list_amazons3-actions-as-permissions)를 참조하세요.

  S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 [Amazon S3 API 작업에 필요한 권한](using-with-s3-policy-actions.md) 섹션을 참조하세요.
**중요**  
IAM 역할을 소유한 AWS 계정은 해당 IAM 역할에 부여된 작업을 수행할 권한이 있어야 합니다.  
예를 들어, 소스 버킷에 다른 AWS 계정이 소유한 객체가 포함되어 있다고 가정하겠습니다. 객체 소유자는 객체 액세스 제어 목록(ACL)을 통해 IAM 역할을 소유한 AWS 계정에 필요한 권한을 명시적으로 부여해야 합니다. 그렇지 않으면 Amazon S3는 객체에 액세스할 수 없으므로 객체의 복제가 실패합니다. ACL 권한에 대한 자세한 내용은 [ACL(액세스 제어 목록) 개요](acl-overview.md) 섹션을 참조하세요.  
  
여기에서 설명하는 권한은 최소 복제 구성과 관련됩니다. 선택적 복제 구성을 추가하려면 Amazon S3에 추가 권한을 부여해야 합니다.  
암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 부여해야 합니다. 자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.
복제에 객체 잠금을 사용하려면 복제 설정에 사용하는 AWS Identity and Access Management(IAM) 역할에서 소스 S3 버킷에 두 가지 권한을 추가로 부여해야 합니다. 두 가지 추가 권한은 `s3:GetObjectRetention`과 `s3:GetObjectLegalHold`입니다. 역할에 `s3:Get*` 권한 문이 있으면 해당 문이 요구 사항을 충족합니다. 자세한 내용은 [S3 복제에 객체 잠금 사용](object-lock-managing.md#object-lock-managing-replication) 섹션을 참조하세요.

## 3단계(선택 사항): 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유할 경우 권한 부여
<a name="setting-repl-config-crossacct"></a>

소스 버킷과 대상 버킷을 동일한 계정에서 소유하지 않는 경우, 다음 예제와 같이 대상 버킷 소유자가 소스 버킷 소유자에게 복제 작업을 수행할 권한을 부여하는 버킷 정책도 추가해야 합니다. 이 예제 정책에서는 `amzn-s3-demo-destination-bucket`가 대상 버킷입니다.

Amazon S3 콘솔을 사용하여 이 버킷 정책을 자동으로 생성할 수도 있습니다. 자세한 내용은 [소스 버킷에서 복제된 객체 수신 활성화](#receiving-replicated-objects)를 참조하세요.

**참고**  
역할의 ARN 형식이 다르게 보일 수 있습니다. 콘솔을 사용하여 역할을 생성한 경우 ARN 형식은 `arn:aws:iam::account-ID:role/service-role/role-name`입니다. AWS CLI를 사용하여 역할을 생성한 경우 ARN 형식은 `arn:aws:iam::account-ID:role/role-name`입니다. 자세한 내용은 *IAM 사용 설명서*에서 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)을 참조하세요.

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

****  

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

------

문제 해결 예는 [서로 다른 계정의 버킷에 대한 복제 구성](replication-walkthrough-2.md)을(를) 참조하세요.

원본 버킷에 있는 객체에 태그가 지정된 경우, 다음에 주의하세요.
+ 원본 버킷 소유자가 객체 태그를 복사할 수 있도록 `s3:GetObjectVersionTagging` 및 `s3:ReplicateTags` 작업 권한을 (IAM 역할을 통해) Amazon S3에 부여하는 경우, Amazon S3는 해당 객체와 함께 태그를 복제합니다. IAM 역할에 대한 상세 정보는 [2단계: Amazon S3가 수임할 IAM 역할 생성](#setting-repl-config-same-acctowner) 섹션을 참조하세요.
+ 대상 버킷 소유자가 태그 복제를 원하지 않는 경우, 소유자는 다음의 명령문을 대상 버킷 정책에 추가해 `s3:ReplicateTags` 작업에 대한 권한을 명시적으로 거부할 수 있습니다. 이 정책에서는 `amzn-s3-demo-destination-bucket`가 대상 버킷입니다.

  ```
  ...
     "Statement":[
        {
           "Effect":"Deny",
           "Principal":{
              "AWS":"arn:aws:iam::source-bucket-account-id:role/service-role/source-account-IAM-role"
           },
           "Action":"s3:ReplicateTags",
           "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
        }
     ]
  ...
  ```

**참고**  
암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 부여해야 합니다. 자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.
복제에 객체 잠금을 사용하려면 복제 설정에 사용하는 AWS Identity and Access Management(IAM) 역할에서 소스 S3 버킷에 두 가지 권한을 추가로 부여해야 합니다. 두 가지 추가 권한은 `s3:GetObjectRetention`과 `s3:GetObjectLegalHold`입니다. 역할에 `s3:Get*` 권한 문이 있으면 해당 문이 요구 사항을 충족합니다. 자세한 내용은 [S3 복제에 객체 잠금 사용](object-lock-managing.md#object-lock-managing-replication) 섹션을 참조하세요.

**소스 버킷에서 복제된 객체 수신 활성화**  
이전 정책을 대상 버킷에 수동으로 추가하는 대신, Amazon S3 콘솔을 통해 소스 버킷에서 복제된 객체 수신을 활성화하는 데 필요한 정책을 신속하게 생성할 수 있습니다.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택합니다.

1. **버킷(Buckets)** 목록에서 대상 버킷으로 사용할 버킷을 선택합니다.

1. **관리(Management)** 탭을 선택한 다음 아래로 스크롤하여 **복제 규칙(Replication rules)**으로 이동합니다.

1. **작업(Actions)**으로 **복제된 객체 수신(Receive replicated objects)**을 선택합니다.

   프롬프트에 따라 소스 버킷 계정의 AWS 계정 ID를 입력하고 **정책 생성**을 선택합니다. 콘솔은 Amazon S3 버킷 정책과 KMS 키 정책을 생성합니다.

1. 이 정책을 기존 버킷 정책에 추가하려면 **설정 적용(Apply settings)**을 선택하거나 **복사(Copy)**를 선택하여 변경 사항을 수동으로 복사합니다.

1. (선택 사항) AWS Key Management Service 콘솔에서 원하는 KMS 키 정책에 AWS KMS 정책을 복사합니다.

## 4단계(선택 사항): 복제본 소유권을 변경할 권한 부여
<a name="change-replica-ownership"></a>

서로 다른 AWS 계정이 소스 버킷과 대상 버킷을 소유한 경우, Amazon S3에 복제본 소유권을 대상 버킷을 소유한 AWS 계정으로 변경하도록 지시할 수 있습니다. 복제본의 소유권을 재정의하려면 일부 추가 권한을 부여하거나 대상 버킷에 대한 S3 객체 소유권 설정을 조정해야 합니다. 소유자 재정의에 대한 자세한 내용은 [복제본 소유자 변경](replication-change-owner.md) 섹션을 참조하세요.

# 라이브 복제 구성 예제
<a name="replication-example-walkthroughs"></a>

다음 예제에서는 일반적인 사용 사례에 맞게 라이브 복제를 구성하는 방법을 보여주는 단계별 실습 과정을 제공합니다.

**참고**  
라이브 복제는 동일 리전 복제(SRR) 및 교차 리전 복제(CRR)를 의미합니다. 라이브 복제는 복제를 설정하기 전에 버킷에 있던 객체를 자동으로 복제하지 않습니다. 복제를 설정하기 전에 존재한 객체를 복제하려면 온디맨드 복제를 사용합니다. 버킷을 동기화하고 기존 객체를 온디맨드로 복제하려면 [기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.

이 예제에서는 Amazon S3 콘솔, AWS Command Line Interface(AWS CLI) 및 AWS SDK(AWS SDK for Java 및 AWS SDK for .NET 예제 표시)를 사용하여 복제 구성을 만드는 방법을 보여 줍니다.

AWS CLI 설치 및 구성에 대한 자세한 내용은 **AWS Command Line Interface 사용 설명서의 다음 주제들을 참조하세요.
+  [ 시작AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) 
+  [AWS CLI 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) - 하나 이상의 프로파일을 설정해야 합니다. 교차 계정 시나리오에 대해 살펴보려면 두 개의 프로필을 설정해야 합니다.

AWS SDK에 대한 자세한 내용은 [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/) 및 [AWS SDK for .NET](https://aws.amazon.com/sdk-for-net/) 섹션을 참조하세요.

**작은 정보**  
라이브 복제를 사용하여 데이터를 복제하는 방법을 보여주는 단계별 자습서는 [자습서: S3 복제를 사용하여 AWS 리전 내 및 사이에 데이터 복제](https://aws.amazon.com/getting-started/hands-on/replicate-data-using-amazon-s3-replication/?ref=docs_gateway/amazons3/replication-example-walkthroughs.html)를 참조하세요.

**Topics**
+ [동일한 계정에서 버킷 구성](replication-walkthrough1.md)
+ [서로 다른 계정에서 버킷 구성](replication-walkthrough-2.md)
+ [S3 Replication Time Control 사용](replication-time-control.md)
+ [암호화된 객체 복제](replication-config-for-kms-objects.md)
+ [메타데이터 변경 복제](replication-for-metadata-changes.md)
+ [삭제 마커 복제](delete-marker-replication.md)

# 동일한 계정에서 버킷 복제 구성
<a name="replication-walkthrough1"></a>

라이브 복제는 동일한 리전 또는 서로 다른 AWS 리전의 범용 버킷 간에 객체를 비동기식으로 자동 복사하는 것을 말합니다. 라이브 복제는 새로 생성된 객체 및 객체 업데이트를 소스 버킷에서 하나 이상의 대상 버킷으로 복사합니다. 자세한 내용은 [리전 내 및 리전 간 객체 복제](replication.md) 섹션을 참조하세요.

복제를 구성할 때는 소스 버킷에 복제 규칙을 추가합니다. 복제 규칙은 복제할 원본 버킷 객체와 복제된 객체가 저장된 대상 버킷을 정의합니다. 특정 키 이름 접두사, 하나 이상의 객체 태그 또는 이 두 가지를 모두 포함하는 버킷 또는 객체 하위 집합에 있는 모든 객체를 복제하는 규칙을 작성할 수 있습니다. 대상 버킷은 소스 버킷과 동일한 AWS 계정에 있거나 다른 계정에 존재할 수 있습니다.

삭제할 객체 버전 ID를 지정하는 경우, Amazon S3가 원본 버킷에서 해당 객체 버전을 삭제합니다. 하지만 대상 버킷에서는 삭제를 복제하지 않습니다. 즉, 대상 버킷에서 동일한 객체 버전을 삭제하지 않습니다. 이는 악의적 삭제로부터 데이터를 보호합니다.

버킷에 복제 규칙을 추가하면 이 규칙이 기본적으로 사용 설정되므로 이 규칙을 저장하면 그 즉시 작업이 시작됩니다.

이 예제에서는 동일한 AWS 계정에서 소유한 소스 버킷과 대상 버킷의 라이브 복제를 설정합니다. Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK for Java 및 AWS SDK for .NET을 사용하는 예제가 제공됩니다.

## 사전 조건
<a name="replication-prerequisites"></a>

다음 절차를 사용하기 전에 소스 버킷과 대상 버킷을 동일한 계정에서 소유하는지 아니면 다른 계정에서 소유하는지에 따라 복제에 필요한 권한을 설정했는지 확인합니다. 자세한 내용은 [라이브 복제에 대한 권한 설정](setting-repl-config-perm-overview.md) 섹션을 참조하세요.

**참고**  
암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 부여해야 합니다. 자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.
복제에 객체 잠금을 사용하려면 복제 설정에 사용하는 AWS Identity and Access Management(IAM) 역할에서 소스 S3 버킷에 두 가지 권한을 추가로 부여해야 합니다. 두 가지 추가 권한은 `s3:GetObjectRetention`과 `s3:GetObjectLegalHold`입니다. 역할에 `s3:Get*` 권한 문이 있으면 해당 문이 요구 사항을 충족합니다. 자세한 내용은 [S3 복제에 객체 잠금 사용](object-lock-managing.md#object-lock-managing-replication) 섹션을 참조하세요.

## S3 콘솔 사용
<a name="enable-replication"></a>

대상 버킷이 소스 버킷과 동일한 AWS 계정에 있는 경우 복제 규칙을 구성하려면 다음 단계를 따릅니다.

대상 버킷이 원본 버킷과 다른 계정에 있는 경우, 원본 버킷 계정의 소유자에게 대상 버킷의 객체를 복제할 수 있는 권한을 부여하려면 대상 버킷에 하나의 버킷 정책을 추가해야 합니다. 자세한 내용은 [3단계(선택 사항): 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유할 경우 권한 부여](setting-repl-config-perm-overview.md#setting-repl-config-crossacct) 섹션을 참조하세요.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **범용 버킷**을 선택합니다.

1. 버킷 목록에서 원하는 버킷의 이름을 선택합니다.

1. **관리** 탭을 선택하고 **복제 규칙**까지 아래로 스크롤한 다음 **복제 규칙 생성**을 선택합니다.

    

1. **복제 규칙 구성** 섹션의 **복제 규칙 이름**에 나중에 규칙을 쉽게 식별할 수 있는 규칙 이름을 입력합니다. 이름은 필수 항목이며 버킷 내에서 고유해야 합니다.

1. **상태** 아래의 **활성**이 기본적으로 선택됩니다. 사용 설정된 규칙은 저장하는 즉시 적용되기 시작합니다. 나중에 규칙을 활성화하고 싶다면 **비활성화됨**을 선택하세요.

1. 버킷에 기존 복제 규칙이 있는 경우 규칙에 우선 순위를 설정하라는 메시지가 표시됩니다. 여러 규칙의 범위에 포함된 객체로 인해 발생하는 충돌을 방지하기 위해 규칙의 우선 순위를 설정해야 합니다. 중첩 규칙의 경우, Amazon S3은 규칙 우선 순위를 사용하여 어느 규칙을 적용할지 결정합니다. 숫자가 클수록 우선 순위가 높아집니다. 규칙 우선 순위에 대한 자세한 내용은 [복제 구성 파일 요소](replication-add-config.md) 섹션을 참조하세요.

1. **소스 버킷**에는 복제 소스를 설정하기 위한 다음과 같은 옵션이 있습니다.
   + 전체 버킷을 복제하려면 **Apply to all objects in the bucket**(버킷의 모든 객체에 적용)를 선택합니다.
   + 접두사가 같은 모든 객체를 복제하려면 **하나 이상의 필터를 사용하여 이 규칙의 범위 제한(Limit the scope of this rule using one or more filters)**을 선택합니다. 이렇게 하면 이름이 지정한 접두사(예: `pictures`)로 시작하는 모든 객체에 대한 복제가 제한됩니다. **접두사 **상자에 접두사를 입력합니다.
**참고**  
어떤 폴더의 이름에 해당하는 접두사를 입력할 경우, **/**(슬래시)를 마지막 문자(예: `pictures/`)로 사용해야 합니다.
   + 하나 이상의 객체 태그가 있는 모든 객체를 복제하려면 **태그 추가**를 선택하고 상자에 키 값 페어를 입력합니다. 절차를 반복하여 다른 태그를 추가합니다. 접두사와 태그를 결합할 수도 있습니다. 객체 태그에 대한 자세한 내용은 [태그를 사용하여 객체 분류](object-tagging.md) 섹션을 참조하세요.

   새로운 복제 구성 XML 스키마는 접두사 및 태그 필터링과 규칙 우선 순위 지정을 지원합니다. 새 스키마에 대한 자세한 내용은 [이전 버전과의 호환성 고려 사항](replication-add-config.md#replication-backward-compat-considerations) 섹션을 참조하세요. 사용자 인터페이스 뒤에서 작동하는 Amazon S3 API와 함께 사용되는 XML에 대한 자세한 내용은 [복제 구성 파일 요소](replication-add-config.md) 섹션을 참조하세요. 새 스키마는 *복제 구성 XML V2*로 기술됩니다.

1. **대상**에서 Amazon S3이 객체를 복제하게 할 버킷을 선택합니다.
**참고**  
대상 버킷의 수는 지정된 파티션의 AWS 리전 수로 제한됩니다. 파티션은 리전 그룹입니다. AWS에는 `aws`(표준 리전), `aws-cn`(중국 리전) 및 `aws-us-gov`(AWS GovCloud (US) 리전), 이렇게 세 가지 파티션이 있습니다. 대상 버킷 할당량 증대를 요청하려면 [서비스 할당량](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)을 사용합니다.
   + 계정의 버킷으로 복제하려면 **이 계정의 버킷 선택**을 선택하고 대상 버킷 이름을 입력하거나 찾아봅니다.
   + 다른 AWS 계정의 버킷으로 복제하려면 **다른 계정의 버킷 지정**을 선택하고 대상 버킷 계정 ID와 버킷 이름을 입력합니다.

     대상이 원본 버킷과 다른 계정에 있는 경우, 원본 버킷 계정의 소유자에게 객체를 복제할 수 있는 권한을 부여하려면 대상 버킷에 하나의 버킷 정책을 추가해야 합니다. 자세한 내용은 [3단계(선택 사항): 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유할 경우 권한 부여](setting-repl-config-perm-overview.md#setting-repl-config-crossacct) 섹션을 참조하세요.

     선택적으로, 대상 버킷에서 새 객체의 소유권을 표준화하고 싶다면 **객체 소유권을 대상 버킷 소유자로 변경**을 선택합니다. 이 옵션에 대한 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](about-object-ownership.md) 섹션을 참조하세요.
**참고**  
대상 버킷에서 버전 관리가 사용 설정되어 있지 않을 경우, **버전 관리 사용 설정(Enable versioning)** 버튼이 포함된 경고가 나타납니다. 이 버튼을 선택하면 버킷의 버전 관리가 사용 설정됩니다.

1. Amazon S3가 사용자 대신 객체를 복제하기 위해 수임할 수 있는 AWS Identity and Access Management(IAM) 역할을 설정합니다.

   IAM 역할을 설정하려면 **IAM 역할** 섹션의 **IAM 역할** 드롭다운 목록에서 다음 중 하나를 선택합니다.
   + **새 역할 생성(Create new role)**을 선택하여 Amazon S3에서 자동으로 새 IAM 역할을 생성하도록 하는 것이 좋습니다. 규칙을 저장하면 선택한 원본 및 대상 버킷과 일치하는 IAM 역할에 대해 새 정책이 생성됩니다.
   + 기존 IAM 역할을 사용하도록 선택할 수 있습니다. 이 경우 복제에 필요한 권한을 Amazon S3에 부여하는 역할을 선택해야 합니다. 이 역할이 복제 규칙을 따를 수 있는 충분한 권한을 Amazon S3에 부여하지 않으면 복제가 실패합니다.
**중요**  
버킷에 복제 규칙을 추가하려면 Amazon S3에 복제 권한을 부여하는 IAM 역할을 전달할 수 있는 `iam:PassRole` 권한이 있어야 합니다. 자세한 내용은 **IAM 사용 설명서에서 [AWS 서비스에 역할을 전달하도록 사용자 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

1. AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화로 암호화된 소스 버킷의 객체를 복제하려면 **암호화**에서 **AWS KMS로 암호화된 객체 복제**를 선택합니다. **대상 객체를 암호화하기 위한 AWS KMS 키**에는 복제에 사용할 수 있는 소스 키가 있습니다. 기본값으로 모든 소스 KMS 키가 포함됩니다. KMS 키 선택 범위를 좁히려면 별칭이나 키 ID를 선택하면 됩니다.

   선택하지 않은 AWS KMS keys로 암호화된 객체는 복제되지 않습니다. KMS 키 또는 KMS 키 그룹이 자동으로 선택되지만, 원한다면 KMS 키를 선택할 수 있습니다. 복제와 함께 AWS KMS를 사용하는 방법에 대한 자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.
**중요**  
AWS KMS를 사용하여 암호화된 객체를 복제하는 경우 AWS KMS 요청 빈도는 소스 리전에서 두 배가 되고 대상 리전에서는 같은 양만큼 늘어납니다. AWS KMS에 대해 늘어난 호출 빈도는 복제 대상 리전에 대해 정의한 KMS 키를 사용하여 데이터가 다시 암호화되는 방식 때문입니다. AWS KMS에는 리전당 호출 계정에 따른 요청 속도 할당량이 있습니다. 할당량 기본값에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS 할당량 - 초당 요청: 달라짐](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)을 참조하세요.  
복제 중 현재 Amazon S3 `PUT` 객체 요청 속도가 계정에 대한 기본 AWS KMS 속도 할당량의 절반보다 큰 경우 AWS KMS 요청 속도 제한 증가를 요청하는 것이 좋습니다. 증가를 요청하려면 [문의처](https://aws.amazon.com/contact-us/)의 지원 Center에서 사례를 생성합니다. 예를 들어 현재 `PUT` 객체 요청 빈도가 초당 1,000개이고 AWS KMS를 사용하여 객체를 암호화한다고 가정합니다. 이 경우 AWS KMS에서 제한이 발생하지 않도록 지원에 소스 리전과 대상 리전 둘 다에서 AWS KMS 속도 제한을 초당 2,500개 요청으로 올려달라고 요청하는 것이 좋습니다.  
소스 버킷에서 `PUT` 객체 요청 빈도를 확인하려면 Amazon S3에 대한 Amazon CloudWatch 요청 지표에서 `PutRequests`를 확인합니다. CloudWatch 지표를 확인하는 방법에 대한 자세한 내용은 [S3 콘솔 사용](configure-request-metrics-bucket.md#configure-metrics) 섹션을 참조하세요.

   AWS KMS로 암호화된 객체를 복제하도록 선택한 경우 다음을 수행합니다.

   1. **대상 객체를 암호화하기 위한 AWS KMS key**에서 다음 방법 중 하나로 KMS 키를 지정합니다.
     + 사용 가능한 KMS 키 목록에서 **AWS KMS keys 중에서 선택**을 선택하고 사용 가능한 키 목록에서 **KMS 키**를 선택합니다.

       AWS 관리형 키(`aws/s3`)와 고객 관리형 키가 모두 목록에 표시됩니다. 고객 관리형 키에 대한 자세한 내용은 *AWS Key Management Service* 개발자 안내서의 [ 고객 키 및 AWS 키](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt)를 참조하세요.
     + KMS 키 Amazon 리소스 이름(ARN)을 입력하려면 **AWS KMS key ARN 입력**을 선택하고 나타나는 필드에 KMS 키 ARN을 입력합니다. 이렇게 하면 대상 버킷의 복제본이 암호화됩니다. [IAM 콘솔](https://console.aws.amazon.com/iam/)의 **암호화 키** 아래에서 KMS 키에 대한 ARN을 찾을 수 있습니다.
     + AWS KMS 콘솔에서 고객 관리형 키를 생성하려면 **KMS 키 생성**을 선택합니다.

       AWS KMS key 생성에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [키 생성](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html)을 참조하십시오.
**중요**  
버킷과 동일한 AWS 리전에서 사용되는 KMS 키만 사용할 수 있습니다. **KMS 키에서 선택**을 선택하면 S3 콘솔에는 KMS 키를 리전당 100개씩만 나열합니다. 동일한 리전에 100개 이상의 KMS 키가 있는 경우, S3 콘솔에서 처음 100개의 KMS 키만 볼 수 있습니다. 콘솔에 나열되지 않은 KMS 키를 사용하려면 **AWS KMS key ARN 입력**을 선택하고 KMS 키 ARN을 입력합니다.  
Amazon S3에서 서버 측 암호화에 AWS KMS key을 사용하는 경우 대칭 암호화 KMS 키를 선택해야 합니다. Amazon S3는 대칭 암호화 KMS 키만 지원하며 비대칭 KMS 키는 지원하지 않습니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서에서 [대칭 및 비대칭 KMS 키 식별](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html)을 참조하십시오.

     AWS KMS key 생성에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하십시오. Amazon S3에서 AWS KMS을(를) 사용하는 방법에 대한 자세한 내용은 [AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용](UsingKMSEncryption.md) 단원을 참조하십시오.

1. 대상의 특정 스토리지 클래스로 데이터를 복제하려면 **대상 스토리지 클래스**에서 **복제된 객체의 스토리지 클래스 변경**을 선택합니다. 그런 다음, 대상의 복제된 객체에 사용할 스토리지 클래스를 선택합니다. 이 옵션을 선택하지 않을 경우, 복제된 객체의 스토리지 클래스는 원본 객체와 동일한 클래스에 해당됩니다.

1. **추가 복제 옵션**을 설정할 때 다음과 같은 추가 옵션이 있습니다.
   + 복제 구성에서 S3 Replication Time Control (S3 RTC)를 활성화하려면 **복제 시간 제어(RTC)**를 선택합니다. 이 옵션에 대한 자세한 내용은 [S3 Replication Time Control을 사용하여 규정 준수 요구 사항 충족](replication-time-control.md) 섹션을 참조하세요.
   + 복제 구성에서 S3 복제 지표를 활성화하려면 **Replication metrics and events**(복제 지표 및 이벤트)를 선택합니다. 자세한 내용은 [지표, 이벤트 알림 및 상태를 통한 복제 모니터링](replication-metrics.md) 섹션을 참조하세요.
   + 복제 구성에서 삭제 마커 복제를 사용 설정하려면 **삭제 마커 복제(Delete marker replication)**를 선택합니다. 자세한 내용은 [버킷 간 삭제 마커 복제](delete-marker-replication.md) 섹션을 참조하세요.
   + 복제 구성에서 Amazon S3 복제본 수정 동기화를 사용 설정하려면 **복제본 수정 동기화(Replica modification sync)**를 선택합니다. 자세한 내용은 [복제본 수정 동기화를 사용하여 메타데이터 변경 복제](replication-for-metadata-changes.md) 섹션을 참조하세요.
**참고**  
S3 RTC 또는 S3 복제 지표를 사용하면 추가 요금이 적용됩니다.

1. 완료하려면 **저장(Save)**을 선택합니다.

1. 규칙을 저장한 후 규칙을 선택하고 **규칙 편집(Edit rule)**을 선택하여 규칙을 편집, 사용 설정, 사용 중지 또는 삭제할 수 있습니다.

## AWS CLI 사용
<a name="replication-ex1-cli"></a>

소스 버킷과 대상 버킷을 동일한 AWS 계정에서 소유한 경우 AWS CLI를 사용하여 복제를 설정하려면 다음을 수행합니다.
+ 소스 및 대상 버킷을 만듭니다.
+ 버킷의 버전 관리를 활성화합니다.
+ Amazon S3에 객체 복제 권한을 제공하는 AWS Identity and Access Management(IAM) 역할을 만듭니다.
+ 소스 버킷에 복제 구성을 추가합니다.

설정을 확인하려면 테스트합니다.

**소스 버킷과 대상 버킷을 동일한 AWS 계정에서 소유한 경우 복제를 설정하려면**

1. AWS CLI의 자격 증명 프로필을 설정합니다. 이 예시에서는 `acctA`라는 프로필 이름을 사용합니다. 자격 증명 프로파일 설정 및 명명된 프로파일 사용에 대한 자세한 내용은 **AWS Command Line Interface 사용 설명서의 [구성 및 자격 증명 파일 설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)을 참조하세요.
**중요**  
이 예제에 사용하는 프로파일에 필요한 권한이 있어야 합니다. 예를 들어 복제 구성에서 Amazon S3가 맡을 수 있는 IAM 역할을 지정합니다. 사용하는 프로파일에 `iam:PassRole` 권한이 있는 경우에만 이 작업을 수행할 수 있습니다. 자세한 내용은 **IAM 사용 설명서에서 [사용자에게 AWS 서비스에 역할을 전달할 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요. 관리자 자격 증명을 사용하여 명명된 프로파일을 생성할 경우 모든 작업을 수행할 수 있습니다.

1. 다음 AWS CLI 명령을 사용하여 소스 버킷을 만들고 해당 버킷에서 버전 관리를 활성화합니다. 이 명령을 사용하려면 *`user input placeholders`*를 실제 정보로 대체합니다.

   다음 `create-bucket` 명령은 미국 동부(버지니아 북부)(`us-east-1`) 리전에 이름이 `amzn-s3-demo-source-bucket`인 소스 버킷을 생성합니다.

   

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-source-bucket \
   --region us-east-1 \
   --profile acctA
   ```

   다음 `put-bucket-versioning` 명령은 `amzn-s3-demo-source-bucket` 버킷의 S3 버전 관리를 활성화합니다.

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-source-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctA
   ```

1. 다음 AWS CLI 명령을 사용하여 대상 버킷을 만들고 해당 버킷에서 버전 관리를 활성화합니다. 이 명령을 사용하려면 *`user input placeholders`*를 실제 정보로 대체합니다.
**참고**  
소스 버킷과 대상 버킷이 모두 동일한 AWS 계정에 있을 때 복제 구성을 설정하려면 소스 버킷과 대상 버킷에 대해 동일한 프로파일을 사용합니다. 이 예제에서는 `acctA`를 사용합니다.  
버킷을 서로 다른 AWS 계정에서 소유하는 경우 복제 구성을 테스트하려면 각 계정에 대해 서로 다른 프로파일을 지정합니다. 예를 들어, 대상 버킷에 대해 `acctB` 프로파일을 사용합니다.

   

   다음 `create-bucket` 명령은 미국 서부(오리건)(`us-west-2`) 리전에 이름이 `amzn-s3-demo-destination-bucket`인 대상 버킷을 생성합니다.

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-destination-bucket \
   --region us-west-2 \
   --create-bucket-configuration LocationConstraint=us-west-2 \
   --profile acctA
   ```

   다음 `put-bucket-versioning` 명령은 `amzn-s3-demo-destination-bucket` 버킷의 S3 버전 관리를 활성화합니다.

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-destination-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctA
   ```

1. IAM 역할 생성. 나중에 소스 버킷에 추가하는 복제 구성에서 이 역할을 지정합니다. Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 역할을 맡습니다. IAM 역할은 다음의 두 단계로 생성합니다.
   + 역할을 생성합니다.
   + 역할에 권한 정책을 연결합니다.

   1. IAM 역할을 생성합니다.

      1. 다음 신뢰 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 `s3-role-trust-policy.json`이라는 이름의 파일로 저장합니다. 이 정책은 역할을 맡을 권한을 Amazon S3 서비스 보안 주체에 부여합니다.

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

****  

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

------

      1. 다음 명령을 실행해 역할을 생성합니다.

         ```
         $ aws iam create-role \
         --role-name replicationRole \
         --assume-role-policy-document file://s3-role-trust-policy.json  \
         --profile acctA
         ```

   1. 역할에 권한 정책을 연결합니다.

      1. 다음 권한 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 `s3-role-permissions-policy.json` 파일로 저장합니다. 이 정책은 다양한 Amazon S3 버킷 및 객체 작업에 대한 권한을 부여합니다.

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

****  

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

------
**참고**  
암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 부여해야 합니다. 자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.
복제에 객체 잠금을 사용하려면 복제 설정에 사용하는 AWS Identity and Access Management(IAM) 역할에서 소스 S3 버킷에 두 가지 권한을 추가로 부여해야 합니다. 두 가지 추가 권한은 `s3:GetObjectRetention`과 `s3:GetObjectLegalHold`입니다. 역할에 `s3:Get*` 권한 문이 있으면 해당 문이 요구 사항을 충족합니다. 자세한 내용은 [S3 복제에 객체 잠금 사용](object-lock-managing.md#object-lock-managing-replication) 섹션을 참조하세요.

      1. 다음 명령을 실행하여 정책을 생성하고 이를 역할에 연결합니다. *`user input placeholders`*를 사용자의 정보로 대체합니다.

         ```
         $ aws iam put-role-policy \
         --role-name replicationRole \
         --policy-document file://s3-role-permissions-policy.json \
         --policy-name replicationRolePolicy \
         --profile acctA
         ```

1. 소스 버킷에 복제 구성을 추가합니다.

   1. Amazon S3 API에서는 복제 구성을 XML로 지정해야 하지만, AWS CLI에서는 복제 구성을 JSON으로 지정해야 합니다. 다음 JSON을 로컬 컴퓨터의 현재 디렉터리에 `replication.json` 파일로 저장합니다.

      ```
      {
        "Role": "IAM-role-ARN",
        "Rules": [
          {
            "Status": "Enabled",
            "Priority": 1,
            "DeleteMarkerReplication": { "Status": "Disabled" },
            "Filter" : { "Prefix": "Tax"},
            "Destination": {
              "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket"
            }
          }
        ]
      }
      ```

   1. `amzn-s3-demo-destination-bucket` 및 `IAM-role-ARN` 값을 자체 정보로 대체하여 JSON을 업데이트합니다. 변경 사항을 저장합니다.

   1. 다음 `put-bucket-replication` 명령을 실행하여 소스 버킷에 복제 구성을 추가합니다. 반드시 소스 버킷 이름을 제공해야 합니다.

      ```
      $ aws s3api put-bucket-replication \
      --replication-configuration file://replication.json \
      --bucket amzn-s3-demo-source-bucket \
      --profile acctA
      ```

   복제 구성을 검색하려면 `get-bucket-replication` 명령을 사용합니다.

   ```
   $ aws s3api get-bucket-replication \
   --bucket amzn-s3-demo-source-bucket \
   --profile acctA
   ```

1. 다음 단계를 수행하여 Amazon S3 콘솔에서 설정을 테스트합니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

   1. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택합니다. **범용 버킷** 목록에서 소스 버킷을 선택합니다.

   1. 소스 버킷에서 `Tax` 폴더를 만듭니다.

   1. 소스 버킷의 `Tax` 폴더에 샘플 객체를 추가합니다.
**참고**  
Amazon S3가 객체를 복제하는 데 걸리는 시간은 객체 크기에 따라 다릅니다. 복제 상태를 확인하는 방법에 대한 자세한 내용은 [복제 상태 정보 가져오기](replication-status.md) 섹션을 참조하세요.

      대상 버킷에서 다음을 확인합니다.
      + Amazon S3가 객체를 복제함.
      + 객체를 복제했습니다. 객체의 **속성** 탭에서 아래로 스크롤하여 **객체 관리 개요** 섹션을 찾습니다. **관리 구성**에서 **복제 상태** 아래의 값을 확인합니다. 이 값이 `REPLICA`로 설정되어 있는지 확인합니다.
      + 소스 버킷 계정이 복제본을 소유합니다. 객체의 **권한** 탭에서 객체 소유권을 확인할 수 있습니다.

        소스 버킷과 대상 버킷을 서로 다른 계정에서 소유하고 있는 경우, Amazon S3에 복제본 소유권을 대상 계정으로 변경하도록 지시하는 선택적 구성을 추가할 수 있습니다. 문제 해결 예는 [복제본 소유자 변경 방법](replication-change-owner.md#replication-walkthrough-3)을(를) 참조하세요.

## AWS SDK 사용
<a name="replication-ex1-sdk"></a>

다음 코드 예제를 사용하여 AWS SDK for Java 및 AWS SDK for .NET를 각각 사용하여 버킷에 복제 구성을 추가합니다.

**참고**  
암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 부여해야 합니다. 자세한 내용은 [암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.
복제에 객체 잠금을 사용하려면 복제 설정에 사용하는 AWS Identity and Access Management(IAM) 역할에서 소스 S3 버킷에 두 가지 권한을 추가로 부여해야 합니다. 두 가지 추가 권한은 `s3:GetObjectRetention`과 `s3:GetObjectLegalHold`입니다. 역할에 `s3:Get*` 권한 문이 있으면 해당 문이 요구 사항을 충족합니다. 자세한 내용은 [S3 복제에 객체 잠금 사용](object-lock-managing.md#object-lock-managing-replication) 섹션을 참조하세요.

------
#### [ Java ]

버킷에 복제 구성을 추가한 다음 AWS SDK for Java를 사용하여 구성을 검색하고 확인하려면 S3Client를 사용하여 프로그래밍 방식으로 복제 설정을 관리할 수 있습니다.

AWS SDK for Java를 사용하여 복제를 구성하는 방법의 예는 *Amazon S3 API 참조*의 [Set replication configuration on a bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_PutBucketReplication_section.html)을 참조하세요.

------
#### [ C\$1 ]

다음은 버킷에 복제 구성을 추가한 다음 해당 구성을 검색하는 AWS SDK for .NET 코드의 예입니다. 이 코드를 사용하려면 버킷 이름과 IAM 역할의 Amazon 리소스 이름(ARN)을 제공합니다. 코드 예제 설정 및 실행에 대한 자세한 내용은 **AWS SDK for .NET 개발자 안내서의 [AWS SDK for .NET 시작하기](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config.html)를 참조하세요.

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class CrossRegionReplicationTest
    {
        private const string sourceBucket = "*** source bucket ***";
        // Bucket ARN example - arn:aws:s3:::destinationbucket
        private const string destinationBucketArn = "*** destination bucket ARN ***";
        private const string roleArn = "*** IAM Role ARN ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint sourceBucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;
        public static void Main()
        {
            s3Client = new AmazonS3Client(sourceBucketRegion);
            EnableReplicationAsync().Wait();
        }
        static async Task EnableReplicationAsync()
        {
            try
            {
                ReplicationConfiguration replConfig = new ReplicationConfiguration
                {
                    Role = roleArn,
                    Rules =
                        {
                            new ReplicationRule
                            {
                                Prefix = "Tax",
                                Status = ReplicationRuleStatus.Enabled,
                                Destination = new ReplicationDestination
                                {
                                    BucketArn = destinationBucketArn
                                }
                            }
                        }
                };

                PutBucketReplicationRequest putRequest = new PutBucketReplicationRequest
                {
                    BucketName = sourceBucket,
                    Configuration = replConfig
                };

                PutBucketReplicationResponse putResponse = await s3Client.PutBucketReplicationAsync(putRequest);

                // Verify configuration by retrieving it.
                await RetrieveReplicationConfigurationAsync(s3Client);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
        private static async Task RetrieveReplicationConfigurationAsync(IAmazonS3 client)
        {
            // Retrieve the configuration.
            GetBucketReplicationRequest getRequest = new GetBucketReplicationRequest
            {
                BucketName = sourceBucket
            };
            GetBucketReplicationResponse getResponse = await client.GetBucketReplicationAsync(getRequest);
            // Print.
            Console.WriteLine("Printing replication configuration information...");
            Console.WriteLine("Role ARN: {0}", getResponse.Configuration.Role);
            foreach (var rule in getResponse.Configuration.Rules)
            {
                Console.WriteLine("ID: {0}", rule.Id);
                Console.WriteLine("Prefix: {0}", rule.Prefix);
                Console.WriteLine("Status: {0}", rule.Status);
            }
        }
    }
}
```

------

# 서로 다른 계정의 버킷에 대한 복제 구성
<a name="replication-walkthrough-2"></a>

라이브 복제는 동일한 리전 또는 서로 다른 AWS 리전의 버킷 간에 객체를 비동기식으로 자동 복사하는 것을 말합니다. 라이브 복제는 새로 생성된 객체 및 객체 업데이트를 소스 버킷에서 하나 이상의 대상 버킷으로 복사합니다. 자세한 내용은 [리전 내 및 리전 간 객체 복제](replication.md) 섹션을 참조하세요.

복제를 구성할 때는 소스 버킷에 복제 규칙을 추가합니다. 복제 규칙은 복제할 원본 버킷 객체와 복제된 객체가 저장된 대상 버킷을 정의합니다. 특정 키 이름 접두사, 하나 이상의 객체 태그 또는 이 두 가지를 모두 포함하는 버킷 또는 객체 하위 집합에 있는 모든 객체를 복제하는 규칙을 작성할 수 있습니다. 대상 버킷은 소스 버킷과 동일한 AWS 계정에 있거나 다른 계정에 존재할 수 있습니다.

삭제할 객체 버전 ID를 지정하는 경우, Amazon S3가 원본 버킷에서 해당 객체 버전을 삭제합니다. 하지만 대상 버킷에서는 삭제를 복제하지 않습니다. 즉, 대상 버킷에서 동일한 객체 버전을 삭제하지 않습니다. 이는 악의적 삭제로부터 데이터를 보호합니다.

버킷에 복제 규칙을 추가하면 이 규칙이 기본적으로 사용 설정되므로 이 규칙을 저장하면 그 즉시 작업이 시작됩니다.

서로 다른 AWS 계정에서 소스 버킷과 대상 버킷을 소유한 경우의 라이브 복제 설정은 동일한 계정이 두 버킷을 모두 소유한 경우의 복제 설정과 비슷합니다. 하지만 교차 계정 시나리오에서 복제를 구성할 때는 몇 가지 차이점이 있습니다.
+ 대상 버킷 소유자는 소스 버킷 소유자에게 대상 버킷 정책에서 객체를 복제할 수 있는 권한을 부여해야 합니다.
+ 교차 계정 시나리오에서 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화로 암호화된 객체를 복제하는 경우 KMS 키 소유자가 소스 버킷 소유자에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [교차 계정 시나리오를 위한 추가 권한 부여](replication-config-for-kms-objects.md#replication-kms-cross-acct-scenario) 섹션을 참조하세요.
+ 기본적으로 복제된 객체는 소스 버킷 소유자가 소유합니다. 교차 계정 시나리오에서는 복제된 객체의 소유권을 대상 버킷의 소유자로 변경하도록 복제를 구성할 수 있습니다. 자세한 내용은 [복제본 소유자 변경](replication-change-owner.md) 섹션을 참조하세요.

**소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 경우 복제를 구성하려면**

1. 이 예제에서는 소스 버킷과 대상 버킷을 서로 다른 두 AWS 계정에서 만듭니다. AWS CLI에 대해 2개의 자격 증명 프로파일을 설정해야 합니다. 이 예제에서는 해당 프로파일 이름에 `acctA` 및 `acctB`를 사용합니다. 자격 증명 프로파일 설정 및 명명된 프로파일 사용에 대한 자세한 내용은 **AWS Command Line Interface 사용 설명서의 [구성 및 자격 증명 파일 설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)을 참조하세요.

1. [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md)의 단계별 지침을 따르되 다음 사항을 변경합니다.
   + 소스 버킷 활동(예: 소스 버킷 생성, 버전 관리 활성화, IAM 역할 생성)과 관련된 모든 AWS CLI 명령은 `acctA` 프로파일을 사용합니다. `acctB` 프로파일을 사용하여 대상 버킷을 만듭니다.
   + IAM 역할에 대한 권한 정책에 이 예제에서 만든 소스 및 대상 버킷이 지정되어 있는지 확인합니다.

1. 콘솔에서 대상 버킷에 다음 버킷 정책을 추가해 원본 버킷 소유자가 객체를 복제하도록 허용합니다. 지침은 [Amazon S3 콘솔을 사용하여 버킷 정책 추가](add-bucket-policy.md) 섹션을 참조하세요. 소스 버킷 소유자의 AWS 계정 ID, IAM 역할 이름 및 대상 버킷 이름을 제공하여 정책을 편집해야 합니다.
**참고**  
다음 예시를 사용하려면 `user input placeholders`를 실제 정보로 대체하십시오. `amzn-s3-demo-destination-bucket`를 대상 버킷 이름으로 바꿉니다. IAM Amazon 리소스 이름(ARN)의 `source-bucket-account-ID:role/service-role/source-account-IAM-role`을 이 복제 구성에 사용 중인 IAM 역할로 바꿉니다.  
IAM 서비스 역할을 수동으로 만든 경우 다음 정책 예제와 같이 IAM ARN의 역할 경로를 `role/service-role/`로 설정합니다. 자세한 내용을 알아보려면 *IAM 사용 설명서*의 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)을 참조하세요.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "",
       "Statement": [
           {
               "Sid": "Set-permissions-for-objects",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/service-role/source-account-IAM-role"
               },
               "Action": [
                   "s3:ReplicateObject",
                   "s3:ReplicateDelete"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
           },
           {
               "Sid": "Set-permissions-on-bucket",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/service-role/source-account-IAM-role"
               },
               "Action": [
                   "s3:GetBucketVersioning",
                   "s3:PutBucketVersioning"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket"
           }
       ]
   }
   ```

------

1. (선택 사항) SSE-KMS로 암호화된 객체를 복제하는 경우 KMS 키 소유자가 소스 버킷 소유자에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [교차 계정 시나리오를 위한 추가 권한 부여](replication-config-for-kms-objects.md#replication-kms-cross-acct-scenario) 섹션을 참조하세요.

1. (선택 사항) 복제에서는 기본적으로 소스 객체 소유자가 복제본을 소유합니다. 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 경우 복제본 소유권을 대상 버킷을 소유한 AWS 계정으로 변경하는 선택적 구성 설정을 추가할 수 있습니다. 여기에는 `ObjectOwnerOverrideToBucketOwner` 권한 부여가 포함됩니다. 자세한 내용은 [복제본 소유자 변경](replication-change-owner.md) 섹션을 참조하세요.

# 복제본 소유자 변경
<a name="replication-change-owner"></a>

복제에서는 기본적으로 소스 객체 소유자가 복제본도 소유합니다. 단, 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 경우 복제본 소유권을 변경할 수 있습니다. 예를 들어, 객체 복제본에 대한 액세스를 제한할 목적으로 소유권을 변경할 수 있습니다. 복제 구성에서 복제본 소유권을 대상 버킷을 소유한 AWS 계정으로 변경하는 선택적 구성 설정을 추가할 수 있습니다.

복제본 소유자를 변경하려면 다음을 수행합니다.
+ 복제본 소유권을 변경하도록 Amazon S3에 지시하는 **소유자 재정의 옵션을 복제 구성에 추가합니다.
+ Amazon S3에 복제본 소유권을 변경할 수 있는 `s3:ObjectOwnerOverrideToBucketOwner` 권한을 부여합니다.
+ 대상 버킷 정책에 복제본 소유권 변경을 허용할 `s3:ObjectOwnerOverrideToBucketOwner` 권한을 추가합니다. `s3:ObjectOwnerOverrideToBucketOwner` 권한을 통해 대상 버킷의 소유자가 객체 복제본의 소유권을 수락할 수 있습니다.

자세한 내용은 [소유권 재정의 옵션에 대한 고려 사항](#repl-ownership-considerations) 및 [복제 구성에 소유자 재정의 옵션 추가](#repl-ownership-owneroverride-option)(을)를 참조하세요. 단계별 지침이 포함된 예제는 [복제본 소유자 변경 방법](#replication-walkthrough-3) 섹션을 참조하세요.

**중요**  
소유자 재정의 옵션을 사용하는 대신 객체 소유권에 대해 버킷 소유자 적용 설정을 사용할 수 있습니다. 복제를 사용하고 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유하는 경우, 대상 버킷의 버킷 소유자는 객체 소유권에 대한 버킷 소유자 적용 설정을 사용하여 복제 소유권을 대상 버킷을 소유하는 AWS 계정으로 변경할 수 있습니다. 이 설정은 객체 액세스 제어 목록(ACL)을 비활성화합니다.  
버킷 소유자 적용 설정은 `s3:ObjectOwnerOverrideToBucketOwner` 권한 없이도 기존 소유자 재정의 동작을 모방합니다. 버킷 소유자 시행 설정으로 대상 버킷에 복제되는 모든 객체는 대상 버킷 소유자가 소유합니다. 객체 소유권에 대한 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](about-object-ownership.md) 섹션을 참조하십시오.

## 소유권 재정의 옵션에 대한 고려 사항
<a name="repl-ownership-considerations"></a>

소유권 재정의 옵션을 구성할 때는 다음 사항을 고려해야 합니다.
+ 기본적으로 원본 객체의 소유자도 복제본을 소유합니다. Amazon S3는 객체 버전 및 이와 연결된 ACL을 복제합니다.

  복제 구성에 소유자 재정의 옵션을 추가하면 Amazon S3는 ACL이 아닌 객체 버전만 복제합니다. 또한 Amazon S3는 원본 객체 ACL에 대한 후속 변경 사항을 복제하지 않습니다. Amazon S3는 복제본에서 대상 버킷 소유자에게 모든 권한을 부여하는 ACL을 설정합니다.
+  소유자 재정의를 활성화하거나 비활성화하도록 복제 구성을 업데이트하면 다음과 같은 동작이 발생합니다.
  + 복제 구성에 소유자 재정의 옵션을 추가할 경우:

    Amazon S3는 객체 버전을 복제할 때 소스 객체에 연결된 ACL을 무시합니다. 대신 Amazon S3는 복제본에서 대상 버킷 소유자에게 모든 권한을 부여하는 ACL을 설정합니다. Amazon S3는 소스 객체 ACL에 대한 후속 변경 사항을 복제하지 않습니다. 하지만 이 ACL 변경은 소유자 재정의 옵션을 설정하기 이전에 복제된 객체 버전에 적용되지 않습니다. 소유자 재정의를 설정하기 이전에 복제된 원본 객체에 대한 ACL 업데이트의 경우 객체와 복제본의 소유자가 동일하므로 계속해서 복제됩니다.
  + 복제 구성에서 소유자 재정의 옵션을 제거할 경우

    Amazon S3는 원본 버킷에 나타나는 새 객체 및 연결된 ACL을 대상 버킷으로 복제합니다. 소유자 재정의를 제거하기 전에 복제된 객체의 경우 Amazon S3가 ACL을 복제하지 않습니다. 그 이유는 Amazon S3가 수행한 객체 소유권 변경이 유효하기 때문입니다. 즉, 소유자 재정의가 설정되었을 때 복제된 객체 버전에 적용된 ACL은 계속해서 복제되지 않습니다.

## 복제 구성에 소유자 재정의 옵션 추가
<a name="repl-ownership-owneroverride-option"></a>

**주의**  
소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 경우에만 소유자 재정의 옵션을 추가합니다. Amazon S3에서는 버킷을 소유한 계정이 동일한지 여부를 확인하지 않습니다. 두 버킷을 동일한 AWS 계정에서 모두 소유한 경우에도 소유자 재정의를 추가하면 Amazon S3가 소유자 재정의를 적용합니다. 이 옵션은 대상 버킷의 소유자에게 전체 권한을 부여하며 소스 객체의 액세스 제어 목록(ACL)에 대한 후속 업데이트를 복제하지 않습니다. 복제본 소유자는 `PutObjectAcl` 요청을 사용하여 복제본과 연결된 ACL을 직접 변경할 수 있지만, 복제를 통해서는 변경할 수 없습니다.

소유자 재정의 옵션을 지정하려면 다음을 각 `Destination` 요소에 추가합니다.
+ 복제본 소유자 변경을 Amazon S3에 지시하는 `AccessControlTranslation` 요소
+ 대상 버킷 소유자의 AWS 계정을 지정하는 `Account` 요소 

```
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    ...
    <Destination>
      ...
      <AccessControlTranslation>
           <Owner>Destination</Owner>
       </AccessControlTranslation>
      <Account>destination-bucket-owner-account-id</Account>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```

다음 복제 구성 예제는 키 접두사가 *`Tax`*인 객체를 `amzn-s3-demo-destination-bucket` 대상 버킷으로 복제하고 복제본 소유권을 변경하도록 Amazon S3에 지시합니다. 이 예제를 사용하려면 `user input placeholders`를 사용자의 정보로 대체합니다.

```
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
   <Role>arn:aws:iam::account-id:role/role-name</Role>
   <Rule>
      <ID>Rule-1</ID>
      <Priority>1</Priority>
      <Status>Enabled</Status>
      <DeleteMarkerReplication>
         <Status>Disabled</Status>
      </DeleteMarkerReplication>
      <Filter>
         <Prefix>Tax</Prefix>
      </Filter>
      <Destination>
         <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
         <Account>destination-bucket-owner-account-id</Account>
         <AccessControlTranslation>
            <Owner>Destination</Owner>
         </AccessControlTranslation>
      </Destination>
   </Rule>
</ReplicationConfiguration>
```

## 복제본 소유권을 변경할 수 있는 Amazon S3 권한 부여
<a name="repl-ownership-add-role-permission"></a>

AWS Identity and Access Management(IAM) 역할과 연결된 권한 정책에 `s3:ObjectOwnerOverrideToBucketOwner` 작업에 대한 권한을 추가하여 복제본 소유권을 변경할 권한을 Amazon S3에 부여합니다. 이 역할은 Amazon S3가 사용자를 대신하여 객체를 맡고 복제할 수 있도록 복제 구성에서 지정한 IAM 역할입니다. 다음 예제를 사용하려면 `amzn-s3-demo-destination-bucket`을 대상 버킷의 이름으로 바꿉니다.

```
...
{
    "Effect":"Allow",
         "Action":[
       "s3:ObjectOwnerOverrideToBucketOwner"
    ],
    "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}
...
```

## 대상 버킷 정책에 복제본 소유권 변경을 허용할 권한 추가
<a name="repl-ownership-accept-ownership-b-policy"></a>

대상 버킷 소유자가 원본 버킷 소유자에게 복제본 소유권을 변경할 수 있는 권한을 부여해야 합니다. 대상 버킷 소유자는 원본 버킷 소유자에게 `s3:ObjectOwnerOverrideToBucketOwner` 작업에 대한 권한을 부여합니다. 이 권한을 통해 대상 버킷 소유자는 객체 복제본의 소유권을 수락할 수 있습니다. 다음 버킷 정책 문 예제에서는 이를 수행하는 방법을 보여줍니다. 이 예제를 사용하려면 `user input placeholders`를 사용자의 정보로 대체합니다.

```
...
{
    "Sid":"1",
    "Effect":"Allow",
    "Principal":{"AWS":"source-bucket-account-id"},
    "Action":["s3:ObjectOwnerOverrideToBucketOwner"],
    "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}
...
```

## 복제본 소유자 변경 방법
<a name="replication-walkthrough-3"></a>

복제 구성의 소스 및 대상 버킷을 서로 다른 AWS 계정에서 소유하는 경우, Amazon S3에 대상 버킷을 소유한 AWS 계정으로 복제 소유권을 변경하도록 지시할 수 있습니다. 다음 예제에서는 Amazon S3 콘솔, AWS Command Line Interface(AWS CLI) 및 AWS SDK를 사용하여 복제본 소유권을 변경하는 방법을 보여줍니다.

### S3 콘솔 사용
<a name="replication-ex3-console"></a>

단계별 지침은 [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md) 섹션을 참조하세요. 이 주제에서는 소스 및 대상 버킷을 동일하거나 서로 다른 AWS 계정에서 소유하는 경우 복제 구성을 설정하는 방법을 설명합니다.

### AWS CLI 사용
<a name="replication-ex3-cli"></a>

다음 절차에서는 AWS CLI를 사용하여 복제본 소유권을 변경하는 방법을 설명합니다. 이 절차에서는 다음을 수행합니다.
+ 소스 및 대상 버킷을 만듭니다.
+ 버킷의 버전 관리를 활성화합니다.
+ Amazon S3에 객체 복제 권한을 제공하는 AWS Identity and Access Management(IAM) 역할을 만듭니다.
+ 소스 버킷에 복제 구성을 추가합니다.
+ 복제 구성에서 복제본 소유권을 변경하도록 Amazon S3에 지시합니다.
+ 복제 구성을 테스트합니다.

**소스 버킷과 대상 버킷을 서로 다른 AWS 계정(AWS CLI)에서 소유한 경우 복제본 소유권을 변경하려면**

이 절차에서 예제 AWS CLI 명령을 사용하려면 `user input placeholders`를 자체 정보로 대체합니다.

1. 이 예제에서는 소스 버킷과 대상 버킷을 서로 다른 두 AWS 계정에서 만듭니다. 이 두 계정으로 작업하려면 2개의 명명된 프로파일로 AWS CLI를 구성합니다. 이 예제에서는 이름이 *`acctA`* 및 *`acctB`*인 프로필을 사용합니다. 자격 증명 프로파일 설정 및 명명된 프로파일 사용에 대한 자세한 내용은 **AWS Command Line Interface 사용 설명서의 [구성 및 자격 증명 파일 설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)을 참조하세요.
**중요**  
이 절차에 사용하는 프로파일에 필요한 권한이 있어야 합니다. 예를 들어 복제 구성에서 Amazon S3가 맡을 수 있는 IAM 역할을 지정합니다. 사용하는 프로파일에 `iam:PassRole` 권한이 있는 경우에만 이 작업을 수행할 수 있습니다. 관리자 사용자 자격 증명을 사용하여 명명된 프로파일을 만드는 경우 이 절차의 모든 태스크를 수행할 수 있습니다. 자세한 내용은 **IAM 사용 설명서에서 [사용자에게 AWS 서비스에 역할을 전달할 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

1. 원본 버킷을 생성하고 버전 관리를 사용 설정합니다. 이 예제에서는 미국 동부(버지니아 북부)(`us-east-1`) 리전에 `amzn-s3-demo-source-bucket`이라는 소스 버킷을 만듭니다.

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-source-bucket \
   --region us-east-1 \
   --profile acctA
   ```

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-source-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctA
   ```

1. 대상 버킷을 생성하고 버전 관리를 사용 설정합니다. 이 예제에서는 미국 서부(오리건)(`us-west-2`) 리전에 `amzn-s3-demo-destination-bucket`이라는 이름의 대상 버킷을 만듭니다. 소스 버킷에 사용했던 것과는 다른 AWS 계정 프로파일을 사용합니다.

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-destination-bucket \
   --region us-west-2 \
   --create-bucket-configuration LocationConstraint=us-west-2 \
   --profile acctB
   ```

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-destination-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctB
   ```

1. 대상 버킷 정책에 복제본 소유권 변경을 허용할 권한을 추가해야 합니다.

   1.  다음 정책을 `destination-bucket-policy.json` 이름의 파일에 저장합니다. *`user input placeholders`*를 사용자의 정보로 대체합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "destination_bucket_policy_sid",
                  "Principal": {
                      "AWS": "source-bucket-owner-123456789012"
                  },
                  "Action": [
                      "s3:ReplicateObject",
                      "s3:ReplicateDelete",
                      "s3:ObjectOwnerOverrideToBucketOwner",
                      "s3:ReplicateTags",
                      "s3:GetObjectVersionTagging"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
                  ]
              }
          ]
      }
      ```

------

   1. 다음 `put-bucket-policy` 명령을 사용하여 이전 정책을 대상 버킷에 추가합니다.

      ```
      aws s3api put-bucket-policy --region $ {destination-region} --bucket $ {amzn-s3-demo-destination-bucket} --policy file://destination_bucket_policy.json
      ```

1. IAM 역할 생성. 나중에 소스 버킷에 추가하는 복제 구성에서 이 역할을 지정합니다. Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 역할을 맡습니다. IAM 역할은 다음의 두 단계로 생성합니다.
   + 역할을 생성합니다.
   + 역할에 권한 정책을 연결합니다.

   1. IAM 역할을 생성합니다.

      1. 다음 신뢰 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 `s3-role-trust-policy.json`이라는 이름의 파일로 저장합니다. 이 정책은 역할을 맡을 권한을 Amazon S3에 부여합니다.

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

****  

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

------

      1. 다음 AWS CLI `create-role` 명령을 실행하여 IAM 역할을 만듭니다.

         ```
         $ aws iam create-role \
         --role-name replicationRole \
         --assume-role-policy-document file://s3-role-trust-policy.json  \
         --profile acctA
         ```

         사용자가 만든 IAM 역할의 Amazon 리소스 이름(ARN)을 적어 둡니다. 이후 단계에서 이 ARN이 필요합니다.

   1. 역할에 권한 정책을 연결합니다.

      1. 다음 권한 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 `s3-role-perm-pol-changeowner.json` 파일로 저장합니다. 이 정책은 다양한 Amazon S3 버킷 및 객체 작업에 대한 권한을 부여합니다. 다음 단계에서는 이 정책을 이전에 만든 IAM 역할에 연결합니다.

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

****  

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

------

      1. 이전 권한 정책을 역할에 연결하려면 다음 `put-role-policy` 명령을 실행합니다.

         ```
         $ aws iam put-role-policy \
         --role-name replicationRole \
         --policy-document file://s3-role-perm-pol-changeowner.json \
         --policy-name replicationRolechangeownerPolicy \
         --profile acctA
         ```

1. 원본 버킷에 복제 구성을 추가합니다.

   1. AWS CLI를 사용하려면 복제 구성을 JSON으로 지정해야 합니다. 다음 JSON을 로컬 컴퓨터의 현재 디렉터리에 `replication.json` 파일로 저장합니다. 구성에서 `AccessControlTranslation`은 소스 버킷 소유자에서 대상 버킷 소유자로의 복제본 소유권 변경을 지정합니다.

      ```
      {
         "Role":"IAM-role-ARN",
         "Rules":[
            {
               "Status":"Enabled",
               "Priority":1,
               "DeleteMarkerReplication":{
                  "Status":"Disabled"
               },
               "Filter":{
               },
               "Status":"Enabled",
               "Destination":{
                  "Bucket":"arn:aws:s3:::amzn-s3-demo-destination-bucket",
                  "Account":"destination-bucket-owner-account-id",
                  "AccessControlTranslation":{
                     "Owner":"Destination"
                  }
               }
            }
         ]
      }
      ```

   1. 대상 버킷 이름, 대상 버킷 소유자 계정 ID 및 `IAM-role-ARN`에 값을 입력하여 JSON을 편집합니다. *`IAM-role-ARN`*을 이전에 생성한 IAM 역할의 ARN으로 바꿉니다. 변경 사항을 저장합니다.

   1. 소스 버킷에 복제 구성을 추가하려면 다음 명령을 실행합니다.

      ```
      $ aws s3api put-bucket-replication \
      --replication-configuration file://replication.json \
      --bucket amzn-s3-demo-source-bucket \
      --profile acctA
      ```

1. Amazon S3 콘솔에서 복제본 소유권을 확인하여 복제 구성을 테스트합니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

   1. 원본 버킷에 객체를 추가합니다. 대상 버킷에 객체 복제본이 포함되어 있는지, 복제본의 소유권이 대상 버킷을 소유한 AWS 계정으로 변경되었는지 확인합니다.

### AWS SDK 사용
<a name="replication-ex3-sdk"></a>

 복제 구성을 추가하는 코드 예제는 [AWS SDK 사용](replication-walkthrough1.md#replication-ex1-sdk) 섹션을 참조하세요. 복제 구성을 적절히 수정해야 합니다. 개념적 정보는 [복제본 소유자 변경](#replication-change-owner) 섹션을 참조하세요.

# S3 Replication Time Control을 사용하여 규정 준수 요구 사항 충족
<a name="replication-time-control"></a>

S3 Replication Time Control(S3 RTC)은 데이터 복제와 관련된 규정 준수 요구 사항이나 비즈니스 요구 사항을 충족할 수 있도록 지원하며 Amazon S3 복제 활동에 대한 가시성을 제공합니다. S3 RTC는 Amazon S3에 업로드하는 대부분의 객체를 몇 초 만에 복제하고 이러한 객체의 99.9%를 15분 내에 복제합니다.

기본적으로 S3 RTC에는 복제 진행 상황을 추적하는 2가지 방법이 있습니다.
+ **S3 복제 지표** – S3 복제 지표를 사용하여 복제 대기 중인 총 S3 API 작업 수, 복제 대기 중인 객체의 총 크기, 대상 리전으로의 최대 복제 시간, 복제에 실패한 총 작업 수를 모니터링할 수 있습니다. 그런 다음 별도로 복제하는 각 데이터 세트를 모니터링할 수 있습니다. S3 RTC와 독립적으로 S3 복제 지표를 활성화할 수도 있습니다. 자세한 내용은 [S3 복제 지표 사용](repl-metrics.md) 섹션을 참조하세요.

  S3 Replication Time Control(S3 RTC)이 활성화된 복제 규칙은 S3 복제 지표를 게시합니다. 복제 지표는 S3 RTC를 사용 설정한 후 15분 이내에 사용할 수 있습니다. 복제 지표는 Amazon S3 콘솔, Amazon S3 API, AWS SDK, AWS Command Line Interface(AWS CLI), Amazon CloudWatch를 통해 사용할 수 있습니다. CloudWatch 지표에 대한 자세한 내용은 [Amazon CloudWatch를 사용한 지표 모니터링](cloudwatch-monitoring.md) 섹션을 참조하세요. Amazon S3 콘솔을 통해 복제 지표를 보는 방법에 대한 자세한 내용은 [복제 지표 보기](repl-metrics.md#viewing-replication-metrics) 섹션을 참조하세요.

  S3 복제 지표는 Amazon CloudWatch 사용자 지정 지표와 동일한 요금으로 청구됩니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요.
+ **Amazon S3 이벤트 알림** - S3 RTC는 객체 복제가 15분의 임계값을 초과하거나 초과 후에 이루어지는 경우 버킷 소유자에게 알리는 `OperationMissedThreshold` 및 `OperationReplicatedAfterThreshold` 이벤트를 제공합니다. S3 RTC의 경우, Amazon S3 이벤트 알림은 드물지만 객체가 15분 이내에 복제되지 않는 경우와 해당 객체가 15분의 임계값 이후에 복제되는 경우를 알려줄 수 있습니다.

  복제 지표는 S3 RTC를 사용 설정한 후 15분 이내에 사용할 수 있습니다. Amazon S3 이벤트 알림은 Amazon SQS, Amazon SNS 또는 AWS Lambda를 통해 제공됩니다. 자세한 내용은 [Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신](replication-metrics-events.md) 섹션을 참조하세요.

 

## S3 RTC에 대한 모범 사례 및 지침
<a name="rtc-best-practices"></a>

S3 Replication Time Control(S3 RTC)을 활성화한 상태에서 Amazon S3에서 데이터를 복제할 때는 다음 모범 사례 지침을 따라 워크로드에 맞게 복제 성능을 최적화하세요.

**Topics**
+ [Amazon S3 복제 및 요청 처리 성능 지침](#rtc-request-rate-performance)
+ [복제 요청 속도 추정](#estimating-replication-request-rates)
+ [S3 RTC 데이터 전송 속도 할당량 초과](#exceed-rtc-data-transfer-limits)
+ [AWS KMS 암호화된 객체 복제 요청 속도](#kms-object-replication-request-rates)

### Amazon S3 복제 및 요청 처리 성능 지침
<a name="rtc-request-rate-performance"></a>

애플리케이션은 Amazon S3에서 스토리지를 업로드하고 검색할 때 요청 성능에서 초당 수천 회의 트랜잭션을 구현할 수 있습니다. 예를 들어, 애플리케이션은 S3 복제가 사용자를 대신해서 수행하는 요청을 포함하여 S3 버킷의 접두사에 대해 초당 3,500개 이상의 `PUT`/`COPY`/`POST`/`DELETE` 또는 초당 5,500개 이상의 `GET`/`HEAD` 요청을 달성할 수 있습니다. 버킷의 접두사 수에는 제한이 없습니다. 읽기를 병렬화하여 읽기 또는 쓰기 성능을 향상시킬 수 있습니다. 예를 들어, S3 버킷에서 접두사 10개를 만들어 읽기를 병렬화하는 경우 읽기 성능을 초당 읽기 요청 55,000개로 조정할 수 있습니다.

Amazon S3는 이러한 지침을 초과하는 연속 요청 빈도 또는 `LIST` 요청과 동시에 이루어지는 연속 요청 빈도에 따라 자동으로 스케일 인됩니다. Amazon S3가 새로운 요청 빈도에 대해 내부적으로 최적화하는 동안 최적화가 완료될 때까지 일시적으로 HTTP 503 요청 응답을 받을 수 있습니다. 이 동작은 초당 요청 빈도가 증가하거나 S3 RTC를 처음 활성화할 때 발생할 수 있습니다. 이 기간 동안 복제 지연 시간이 증가할 수 있습니다. 초당 요청에 대한 Amazon S3 성능 지침이 초과되는 기간에는 S3 RTC SLA(서비스 수준 계약)가 적용되지 않습니다.

또한, 복제 데이터 전송 속도가 기본 초당 1기가비트(Gbps) 할당량을 초과하는 기간에는 S3 RTC SLA가 적용되지 않습니다. 복제 전송 속도가 1Gbps를 초과할 것으로 예상되는 경우 [AWS Support Center](https://console.aws.amazon.com/support/home#/)에 문의하거나 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)를 사용하여 복제 전송 속도 할당량 증가를 요청할 수 있습니다.

### 복제 요청 속도 추정
<a name="estimating-replication-request-rates"></a>

사용자를 대신하여 Amazon S3 복제가 수행하는 요청을 포함한 총 요청 빈도는 복제 소스 및 대상 버킷 모두에 대한 Amazon S3 요청 빈도 지침 내에 있어야 합니다. 복제된 각 객체에 대해 Amazon S3 복제는 소스 버킷에 최대 5개의 `GET`/`HEAD` 요청과 1개의 `PUT` 요청을, 각 대상 버킷에 1개의 `PUT` 요청을 수행합니다.

예를 들어, 초당 100개의 객체를 복제하려는 경우 Amazon S3 복제는 소스 S3 버킷에 대해 초당 총 200개의 `PUT` 요청에 추가로 100개의 `PUT` 요청을 사용자 대신 수행할 수 있습니다. 또한, Amazon S3 복제는 최대 500개의 `GET`/`HEAD` 요청을 수행할 수 있습니다(복제되는 각 객체에 대해 5개의 `GET`/`HEAD` 요청) 

**참고**  
복제된 객체당 하나의 `PUT` 요청에만 비용이 발생합니다. 자세한 내용은 [복제 관련 Amazon S3 FAQ](https://aws.amazon.com/s3/faqs/#Replication)의 요금 정보를 참조하세요.

### S3 RTC 데이터 전송 속도 할당량 초과
<a name="exceed-rtc-data-transfer-limits"></a>

S3 RTC 데이터 전송 속도가 기본 1Gbps 할당량을 초과할 것으로 예상되는 경우 [AWS Support Center](https://console.aws.amazon.com/support/home#/)에 문의하거나 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)를 사용하여 복제 전송 속도 할당량 증가를 요청하세요.

### AWS KMS 암호화된 객체 복제 요청 속도
<a name="kms-object-replication-request-rates"></a>

AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화로 암호화(SSE-KMS)된 객체를 복제할 때 초당 AWS KMS 요청 할당량이 적용됩니다. AWS KMS에서는 요청 빈도가 초당 요청 수 할당량을 초과하기 때문에 유효한 요청을 거부할 수 있습니다. 요청이 조절되면 AWS KMS가 `ThrottlingException` 오류를 반환합니다. AWS KMS 요청 빈도 할당량은 사용자가 직접 수행하는 요청과 사용자를 대신하여 Amazon S3 복제가 수행한 요청에 적용됩니다.

예를 들어, 초당 1,000개의 객체를 복제하려는 경우 AWS KMS 요청 빈도 할당량에서 2,000개의 요청을 뺄 수 있습니다. 초당 요청 속도는 복제를 제외한 AWS KMS 워크로드에 대해 사용할 수 있습니다. [Amazon CloudWatch의 AWS KMS 요청 지표](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-cloudwatch.html)를 사용하여 AWS 계정의 총 AWS KMS 요청 속도를 모니터링할 수 있습니다.

초당 AWS KMS 요청 할당량 증가를 요청하려면 [AWS Support Center](https://console.aws.amazon.com/support/home#/)에 문의하거나 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)를 사용하세요.

## S3 Replication Time Control 사용 설정
<a name="replication-walkthrough-5"></a>

먼저 S3 Replication Time Control(S3 RTC)을 새 복제 규칙 또는 기존 복제 규칙과 함께 사용할 수 있습니다. 복제 규칙을 전체 버킷에 적용하거나 특정 접두사 또는 태그가 있는 객체에 적용하도록 선택할 수 있습니다. S3 RTC를 활성화하면 복제 규칙에서도 S3 복제 지표가 활성화됩니다.

Amazon S3 콘솔, Amazon S3 API, AWS SDK, AWS Command Line Interface(AWS CLI)를 사용하여 S3 RTC를 구성할 수 있습니다.

**Topics**

### S3 콘솔 사용
<a name="replication-ex5-console"></a>

단계별 지침은 [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md) 섹션을 참조하세요. 이 주제에서는 소스 및 대상 버킷을 동일하거나 서로 다른 AWS 계정이 소유한 경우에 복제 구성에서 S3 RTC를 활성화하는 지침을 제공합니다.

### AWS CLI 사용
<a name="replication-ex5-cli"></a>

AWS CLI를 사용하여 S3 RTC가 사용 설정된 객체를 복제하려면 버킷을 생성하고 버킷에서 버전 관리를 사용하며 객체를 복제할 권한을 Amazon S3에 부여하는 IAM 역할을 생성하고 복제 구성을 소스 버킷에 추가합니다. 다음 예제와 같이 복제 구성에 S3 RTC가 활성화되어 있어야 합니다.

AWS CLI를 사용하여 복제 구성을 설정하는 방법에 대한 단계적 지침은 [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md) 섹션을 참조하세요.

다음 예제 복제 구성은 복제 규칙의 `ReplicationTime` 및 `EventThreshold` 값을 활성화하고 설정합니다. 이 값을 활성화하고 설정하면 규칙에서 S3 RTC가 활성화됩니다.

```
{
    "Rules": [
        {
            "Status": "Enabled",
            "Filter": {
                "Prefix": "Tax"
            },
            "DeleteMarkerReplication": {
                "Status": "Disabled"
            },
            "Destination": {
                "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket",
                "Metrics": {
                    "Status": "Enabled",
                    "EventThreshold": {
                        "Minutes": 15
                    }
                },
                "ReplicationTime": {
                    "Status": "Enabled",
                    "Time": {
                        "Minutes": 15
                    }
                }
            },
            "Priority": 1
        }
    ],
    "Role": "IAM-Role-ARN"
}
```

**중요**  
 `Metrics:EventThreshold:Minutes` 및 `ReplicationTime:Time:Minutes`는 유효한 값으로 `15`만 가질 수 있습니다.

### Java용 AWS SDK 사용
<a name="replication-ex5-sdk"></a>

 다음 Java 예제에서는 S3 Replication Time Control(S3 RTC)을 활성화한 복제 구성을 추가합니다.

```
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.model.DeleteMarkerReplication;
import software.amazon.awssdk.services.s3.model.Destination;
import software.amazon.awssdk.services.s3.model.Metrics;
import software.amazon.awssdk.services.s3.model.MetricsStatus;
import software.amazon.awssdk.services.s3.model.PutBucketReplicationRequest;
import software.amazon.awssdk.services.s3.model.ReplicationConfiguration;
import software.amazon.awssdk.services.s3.model.ReplicationRule;
import software.amazon.awssdk.services.s3.model.ReplicationRuleFilter;
import software.amazon.awssdk.services.s3.model.ReplicationTime;
import software.amazon.awssdk.services.s3.model.ReplicationTimeStatus;
import software.amazon.awssdk.services.s3.model.ReplicationTimeValue;

public class Main {

  public static void main(String[] args) {
    S3Client s3 = S3Client.builder()
      .region(Region.US_EAST_1)
      .credentialsProvider(() -> AwsBasicCredentials.create(
          "AWS_ACCESS_KEY_ID",
          "AWS_SECRET_ACCESS_KEY")
      )
      .build();

    ReplicationConfiguration replicationConfig = ReplicationConfiguration
      .builder()
      .rules(
          ReplicationRule
            .builder()
            .status("Enabled")
            .priority(1)
            .deleteMarkerReplication(
                DeleteMarkerReplication
                    .builder()
                    .status("Disabled")
                    .build()
            )
            .destination(
                Destination
                    .builder()
                    .bucket("destination_bucket_arn")
                    .replicationTime(
                        ReplicationTime.builder().time(
                            ReplicationTimeValue.builder().minutes(15).build()
                        ).status(
                            ReplicationTimeStatus.ENABLED
                        ).build()
                    )
                    .metrics(
                        Metrics.builder().eventThreshold(
                            ReplicationTimeValue.builder().minutes(15).build()
                        ).status(
                            MetricsStatus.ENABLED
                        ).build()
                    )
                    .build()
            )
            .filter(
                ReplicationRuleFilter
                    .builder()
                    .prefix("testtest")
                    .build()
            )
        .build())
        .role("role_arn")
        .build();

    // Put replication configuration
    PutBucketReplicationRequest putBucketReplicationRequest = PutBucketReplicationRequest
      .builder()
      .bucket("source_bucket")
      .replicationConfiguration(replicationConfig)
      .build();

    s3.putBucketReplication(putBucketReplicationRequest);
  }
}
```

# 암호화(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)된 객체 복제
<a name="replication-config-for-kms-objects"></a>

**중요**  
이제 Amazon S3가 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)를 Amazon S3 내 모든 버킷 암호화의 기본 수준으로 적용합니다. 2023년 1월 5일부터 Amazon S3로의 모든 새 객체 업로드는 추가 비용 없이 성능에 영향을 미치지 않고 자동으로 암호화됩니다. S3 버킷 기본 암호화 구성에 및 신규 객체 업로드에 대한 자동 암호화 상태는 CloudTrail 로그, S3 인벤토리, S3 Storage Lens, Amazon S3 콘솔에서 사용할 수 있으며, AWS CLI 및 AWS SDK에서 추가 Amazon S3 API 응답 헤더로도 사용할 수 있습니다. 자세한 내용은 [기본 암호화 관련 FAQ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html)를 참조하십시오.

서버 측 암호화를 사용하여 암호화된 객체를 복제할 때는 몇 가지 특별한 고려 사항이 있습니다. Amazon S3에서는 다음 유형의 서버 측 암호화를 지원합니다.
+ Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)
+ AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용한 서버 측 암호화
+ AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)
+ 고객 제공 키를 사용한 서버 측 암호화(SSE-C)

서버 측 암호화에 대한 자세한 정보는 [서버 측 암호화를 사용하여 데이터 보호](serv-side-encryption.md) 섹션을 참조하십시오.

이 주제에서는 서버 측 암호화를 사용하여 암호화된 객체를 복제하도록 Amazon S3에 지시하는 데 필요한 권한에 대해 설명합니다. 이 주제에서는 추가할 수 있는 추가 구성 요소와 암호화된 객체를 복제하는 데 필요한 권한을 부여하는 AWS Identity and Access Management(IAM) 정책의 예도 제공합니다.

단계별 지침이 포함된 예제는 [암호화된 객체에 대한 복제 활성화](#replication-walkthrough-4) 섹션을 참조하세요. 복제 구성 생성에 대한 자세한 내용은 [리전 내 및 리전 간 객체 복제](replication.md) 섹션을 참조하세요.

**참고**  
Amazon S3에서 다중 리전 AWS KMS keys를 사용할 수 있습니다. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키인 것처럼 취급하며, 키의 다중 리전 기능을 사용하지 않습니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서에서 [다중 리전 키 사용](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)을 참조하세요.

**Topics**
+ [기본 버킷 암호화가 복제에 미치는 영향](#replication-default-encryption)
+ [SSE-C로 암호화된 객체 복제](#replicationSSEC)
+ [SSE-S3, SSE-KMS 또는 DSSE-KMS로 암호화된 객체 복제](#replications)
+ [암호화된 객체에 대한 복제 활성화](#replication-walkthrough-4)

## 기본 버킷 암호화가 복제에 미치는 영향
<a name="replication-default-encryption"></a>

복제 대상 버킷에 대한 기본 암호화를 사용 설정하면 다음 암호화 동작이 적용됩니다.
+ 소스 버킷의 객체가 암호화되지 않은 경우 대상 버킷의 복제본 객체는 대상 버킷의 기본 암호화 설정을 사용하여 암호화됩니다. 결과적으로 소스 객체의 엔터티 태그(ETag)는 복제본 객체의 ETag와 다릅니다. ETag를 사용하는 애플리케이션이 있는 경우 이 차이를 고려하도록 해당 애플리케이션을 업데이트해야 합니다.
+ 소스 버킷의 객체가 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3), AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS) 또는 AWS KMS 키를 사용한 이중 계층 서브 측 암호화(DSSE-KMS)를 사용하여 암호화되는 경우, 대상 버킷의 복제본 객체는 소스 객체와 동일한 유형의 암호화를 사용합니다. 대상 버킷의 기본 암호화 설정은 사용되지 않습니다.

## SSE-C로 암호화된 객체 복제
<a name="replicationSSEC"></a>

고객 제공 키(SSE-C)로 서버 측 암호화를 사용하면 자체 암호화 키를 관리할 수 있습니다. SSE-C를 사용하면 사용자는 키를 관리하고 Amazon S3는 암호화 및 암호 해독 프로세스를 관리합니다. 요청의 일부로 암호화 키를 제공해야 하지만 객체 암호화 또는 암호 해독을 수행하기 위해 코드를 작성할 필요는 없습니다. 객체를 업로드할 때 Amazon S3는 제공된 키를 사용하여 객체를 암호화합니다. 그런 다음 Amazon S3는 해당 키를 메모리에서 삭제합니다. 객체를 검색할 경우 요청에 포함된 것과 동일한 암호화 키를 제공해야 합니다. 자세한 내용은 [고객 제공 키(SSE-C)로 서버 측 암호화 사용](ServerSideEncryptionCustomerKeys.md) 섹션을 참조하세요.

S3 복제는 SSE-C로 암호화된 객체를 지원합니다. 암호화되지 않은 객체에 대한 복제를 구성하는 것과 동일한 방식으로 Amazon S3 콘솔 또는 AWS SDK를 사용하여 SSE-C 객체 복제를 구성할 수 있습니다. 현재 복제에 필요한 권한 이외의 추가 SSE-C 권한은 없습니다.

S3 복제는 가능한 경우 새로 업로드된 SSE-C 암호화된 객체를 S3 복제 구성에서 지정된 대로 자동으로 복제합니다. 버킷의 기존 객체를 복제하려면 S3 배치 복제를 사용합니다. 객체 복제에 대한 자세한 내용은 [라이브 복제 설정 개요](replication-how-setup.md) 및 [배치 복제를 사용한 기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.

SSE-C 객체 복제에 대한 추가 비용은 없습니다. 복제 요금에 대한 자세한 내용은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하세요.

## SSE-S3, SSE-KMS 또는 DSSE-KMS로 암호화된 객체 복제
<a name="replications"></a>

기본적으로 Amazon S3는 SSE-KMS 또는 DSSE-KMS로 암호화된 객체를 복제하지 않습니다. 이 섹션에서는 이러한 객체를 복제하도록 Amazon S3에 지시하기 위해 추가할 수 있는 추가 구성 요소를 설명합니다.

단계별 지침이 포함된 예제는 [암호화된 객체에 대한 복제 활성화](#replication-walkthrough-4) 섹션을 참조하세요. 복제 구성 생성에 대한 자세한 내용은 [리전 내 및 리전 간 객체 복제](replication.md) 섹션을 참조하세요.

### 복제 구성에서 추가 정보 지정
<a name="replication-kms-extra-config"></a>

복제 구성에서 다음을 수행합니다.
+ 복제 구성의 `Destination` 요소에 다음 복제 구성 예시와 같이 Amazon S3에서 객체 복제본을 암호화하는 데 사용할 대칭 AWS KMS 고객 관리 키의 ID를 추가합니다.
+ KMS 키를 사용하여 암호화(SSE-KMS 또는 DSSE-KMS)된 객체의 복제를 사용 설정함으로써 명시적으로 옵트인합니다. 옵트인하려면 다음 예제 복제 구성에 표시된 대로 `SourceSelectionCriteria` 요소를 추가합니다.

 

```
<ReplicationConfiguration>
   <Rule>
      ...
      <SourceSelectionCriteria>
         <SseKmsEncryptedObjects>
           <Status>Enabled</Status>
         </SseKmsEncryptedObjects>
      </SourceSelectionCriteria>

      <Destination>
          ...
          <EncryptionConfiguration>
             <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS 리전 as the destination bucket.</ReplicaKmsKeyID>
          </EncryptionConfiguration>
       </Destination>
      ...
   </Rule>
</ReplicationConfiguration>
```

**중요**  
KMS 키는 대상 버킷과 동일한 AWS 리전에서 생성되어야 합니다.
KMS 키가 *유효해야* 합니다. `PutBucketReplication` API 작업은 KMS 키가 유효한지 확인하지 않습니다. 잘못된 KMS 키를 사용할 경우 응답에서 HTTP `200 OK` 상태 코드를 받지만 복제는 실패합니다.

다음 예시는 선택적 구성 요소가 포함된 복제 구성을 보여줍니다. 이 복제 구성에는 한 가지 규칙이 있습니다. 이 규칙은 `Tax` 키 접두사를 포함하는 모든 객체에 적용됩니다. Amazon S3는 지정된 AWS KMS key ID를 사용하여 이러한 객체 복제본을 암호화합니다.

```
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration>
   <Role>arn:aws:iam::account-id:role/role-name</Role>
   <Rule>
      <ID>Rule-1</ID>
      <Priority>1</Priority>
      <Status>Enabled</Status>
      <DeleteMarkerReplication>
         <Status>Disabled</Status>
      </DeleteMarkerReplication>
      <Filter>
         <Prefix>Tax</Prefix>
      </Filter>
      <Destination>
         <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
         <EncryptionConfiguration>
            <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS 리전 as the destination bucket.</ReplicaKmsKeyID>
         </EncryptionConfiguration>
      </Destination>
      <SourceSelectionCriteria>
         <SseKmsEncryptedObjects>
            <Status>Enabled</Status>
         </SseKmsEncryptedObjects>
      </SourceSelectionCriteria>
   </Rule>
</ReplicationConfiguration>
```

### IAM 역할에 추가 권한 부여
<a name="replication-kms-permissions"></a>

SSE-S3, SSE-KMS 또는 DSSE-KMS를 사용하여 저장 시 암호화된 객체를 복제하려면 복제 구성에 지정하는 AWS Identity and Access Management(IAM) 역할에 다음 추가 권한을 부여합니다. IAM 역할과 연결된 권한 정책을 업데이트하여 이러한 권한을 부여합니다.
+ **소스 객체에 대한 `s3:GetObjectVersionForReplication` 작업** – 이 작업은 Amazon S3가 SSE-S3, SSE-KMS 또는 DSSE-KMS를 사용한 서버 측 암호화로 생성된 객체와 암호화되지 않은 객체를 모두 복제할 수 있도록 허용합니다.
**참고**  
`s3:GetObjectVersionForReplication`은 복제에 필요한 최소한의 권한만 Amazon S3에 제공하므로 `s3:GetObjectVersion` 작업 대신 `s3:GetObjectVersionForReplication` 작업을 사용하는 것이 좋습니다. 또한 `s3:GetObjectVersion` 작업을 사용하면 암호화되지 않은 객체와 SSE-S3로 암호화된 객체를 복제할 수 있지만 KMS 키를 사용하여 암호화(SSE-KMS 또는 DSSE-KMS)된 객체는 복제할 수 없습니다.
+ **KMS 키에 대한 `kms:Decrypt` 및 `kms:Encrypt` AWS KMS 작업**
  + 소스 객체의 암호를 해독하는 데 사용되는 AWS KMS key에 `kms:Decrypt` 권한을 부여해야 합니다.
  + 객체 복제본의 암호를 해독하는 데 사용되는 AWS KMS key에 `kms:Encrypt` 권한을 부여해야 합니다.
+ **일반 텍스트 객체 복제를 위한 `kms:GenerateDataKey` 작업** - 기본적으로 SSE-KMS 또는 DSSE-KMS 암호화가 활성화된 버킷에 일반 텍스트 객체를 복제하는 경우, 대상 암호화 컨텍스트에 대한 `kms:GenerateDataKey` 권한과 KMS 키를 IAM 정책에 포함시켜야 합니다.

**중요**  
S3 배치 복제를 사용하여 리전 간 데이터세트를 복제하며 이전에 객체의 서버 측 암호화 유형이 SSE-S3에서 SSE-KMS로 업데이트된 경우 추가 권한이 필요할 수 있습니다. 소스 리전 버킷에는 `kms:decrypt` 권한이 있어야 합니다. 그런 다음 대상 리전의 버킷에 대한 `kms:decrypt` 및 `kms:encrypt` 권한이 필요합니다.

AWS KMS 조건 키를 사용하여 대상 버킷과 객체로만 이러한 권한을 제한하는 것이 좋습니다. IAM 역할을 소유한 AWS 계정은 정책에 나열된 KMS 키의 이러한 `kms:Encrypt` 및 `kms:Decrypt` 작업에 대한 권한이 있어야 합니다. 다른 AWS 계정이 KMS 키를 소유한 경우 KMS 키 소유자는 IAM 역할을 소유한 AWS 계정에 이러한 권한을 부여해야 합니다. 이러한 KMS 키에 대한 액세스를 관리하는 방법에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS에서 IAM 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)을 참조하세요.

### S3 버킷 키 및 복제
<a name="bk-replication"></a>

S3 버킷 키와 함께 복제를 사용하려면 객체 복제본을 암호화하는 데 사용되는 KMS 키에 대한 AWS KMS key 정책에 호출 보안 주체에 대한 `kms:Decrypt` 권한이 포함되어야 합니다. `kms:Decrypt`에 대한 호출은 S3 버킷 키를 사용하기 전에 S3 버킷 키의 무결성을 확인합니다. 자세한 내용은 [복제와 함께 S3 버킷 키 사용](bucket-key.md#bucket-key-replication) 섹션을 참조하세요.

소스 또는 대상 버킷에 대해 S3 버킷 키가 활성화되면 암호화 컨텍스트는 객체 ARN(예: `arn:aws:s3:::bucket_ARN`)이 아니라 버킷 Amazon 리소스 이름(ARN)이 됩니다. 암호화 컨텍스트에 버킷 ARN을 사용하려면 IAM 정책을 업데이트해야 합니다.

```
"kms:EncryptionContext:aws:s3:arn": [
"arn:aws:s3:::bucket_ARN"
]
```

 자세한 내용은 [암호화 컨텍스트(`x-amz-server-side-encryption-context`)](specifying-kms-encryption.md#s3-kms-encryption-context)("REST API 사용" 섹션) 및 [S3 버킷 키를 사용 설정하기 전에 유의할 변경 사항](bucket-key.md#bucket-key-changes)을 참조하세요.

### 예제 정책: 복제와 함께 SSE-S3 및 SSE-KMS 사용
<a name="kms-replication-examples"></a>

다음 IAM 정책 예는 복제와 함께 SSE-S3 및 SSE-KMS를 사용하기 위한 스테이트먼트를 보여줍니다.

**Example – 별도의 대상 버킷과 함께 SSE-KMS 사용**  
다음 정책 예는 별도의 대상 버킷과 함께 SSE-KMS를 사용하기 위한 스테이트먼트를 보여줍니다.

**Example – SSE-S3 및 SSE-KMS로 생성된 객체 복제**  
다음은 암호화되지 않은 객체, SSE-S3로 생성된 객체, SSE-KMS로 생성된 객체를 복제하는 데 필요한 권한을 부여하는 완전한 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"
         ],
         "Resource":[
            "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ReplicateObject",
            "s3:ReplicateDelete"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/key-prefix1*"
      },
      {
         "Action":[
            "kms:Decrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*"
               ]
            }
         },
         "Resource":[
           "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      },
      {
         "Action":[
            "kms:Encrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-destination-bucket/prefix1*"
               ]
            }
         },
         "Resource":[
            "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      }
   ]
}
```

**Example – S3 버킷 키를 사용하여 객체 복제**  
다음은 S3 버킷 키로 객체를 복제하는 데 필요한 권한을 부여하는 전체 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"
         ],
         "Resource":[
            "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ReplicateObject",
            "s3:ReplicateDelete"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/key-prefix1*"
      },
      {
         "Action":[
            "kms:Decrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-source-bucket"
               ]
            }
         },
         "Resource":[
           "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      },
      {
         "Action":[
            "kms:Encrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-destination-bucket"
               ]
            }
         },
         "Resource":[
            "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      }
   ]
}
```

### 교차 계정 시나리오를 위한 추가 권한 부여
<a name="replication-kms-cross-acct-scenario"></a>

소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유하는 교차 계정 시나리오에서는 KMS 키를 사용하여 객체 복제본을 암호화할 수 있습니다. 그러나 KMS 키 소유자는 원본 버킷 소유자에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다.

**참고**  
계정 간 SSE-KMS 데이터를 복제해야 하는 경우 복제 규칙에 대상 계정에 대해 AWS KMS의 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)를 지정해야 합니다. [AWS 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)에서는 계정 간 사용을 허용하지 않으므로 계정 간 복제를 수행하는 데 사용할 수 없습니다.<a name="cross-acct-kms-key-permission"></a>

**소스 버킷 소유자에게 KMS 키 사용 권한 부여(AWS KMS 콘솔)**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms)에서 AWS KMS 콘솔을 엽니다.

1. AWS 리전을 변경하려면 페이지의 오른쪽 상단 모서리에 있는 리전 선택기를 사용합니다.

1. 해당 계정에서 직접 생성하고 관리하는 키를 보려면 탐색 창에서 **고객 관리형 키**를 선택합니다.

1. KMS 키를 선택합니다.

1. **일반 구성** 섹션에서 **키 정책** 탭을 선택합니다.

1. 아래로 스크롤하여 **다른 AWS 계정**으로 이동합니다.

1. **다른 AWS 계정 추가**를 선택합니다.

   **기타 AWS 계정** 대화 상자가 나타납니다.

1. 대화 상자에서 **다른 AWS 계정 추가**를 선택합니다. **arn:aws:iam::**의 경우 소스 버킷 계정 ID를 입력합니다.

1. **변경 사항 저장**을 선택합니다.

**원본 버킷 소유자에게 KMS 키 사용 권한 부여(AWS CLI)**
+ `put-key-policy` AWS Command Line Interface(AWS CLI) 명령에 대한 자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html](https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html)put-key-policy 명령 참조의 *AWS CLI* 섹션을 참조하세요. 기본 `PutKeyPolicy` API 작업에 대한 자세한 내용은 [https://docs.aws.amazon.com/kms/latest/APIReference/](https://docs.aws.amazon.com/kms/latest/APIReference/)AWS Key Management ServiceAPI 참조의 [https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 섹션을 참조하세요.

### AWS KMS 트랜잭션 할당량 고려 사항
<a name="crr-kms-considerations"></a>

교차 지역 복제(CRR)를 사용 설정한 후 AWS KMS 암호화를 사용하여 새 객체를 많이 추가하면 조절(HTTP 503 `503 Service Unavailable` 오류)이 발생할 수 있습니다. 제한은 초당 AWS KMS 트랜잭션 수가 현재 할당량을 초과할 경우 발생합니다. 자세한 내용은 *AWS Key Management Service 개발자 가이드*에서 [할당량](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)을 참조하세요.

할당량 증가를 요청하려면 Service Quotas를 사용합니다. 자세한 내용은 [할당량 증가 요청](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)을 참조하세요. 해당 리전에서 Service Quotas가 지원되지 않을 경우 [AWS Support 사례를 엽니다](https://console.aws.amazon.com/support/home#/).

## 암호화된 객체에 대한 복제 활성화
<a name="replication-walkthrough-4"></a>

기본적으로 Amazon S3는 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS) 또는 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)를 사용하여 암호화된 객체를 복제하지 않습니다. SSE-KMS 또는 DSS-KMS로 암호화된 객체를 복제하려면 버킷 복제 구성을 수정하여 이러한 객체를 복제하도록 Amazon S3에 지시해야 합니다. 이 예제에서는 Amazon S3 콘솔 및 AWS Command Line Interface(AWS CLI)를 사용해 암호화된 객체 복제를 사용하도록 버킷 복제 구성을 변경하는 방법을 설명합니다.

**참고**  
소스 또는 대상 버킷에 대해 S3 버킷 키를 사용하도록 설정하면 암호화 컨텍스트는 객체의 ARN이 아니라 버킷의 ARN(Amazon 리소스 이름)이 됩니다. 암호화 컨텍스트에 버킷 ARN을 사용하려면 IAM 정책을 업데이트해야 합니다. 자세한 내용은 [S3 버킷 키 및 복제](#bk-replication) 섹션을 참조하세요.

**참고**  
Amazon S3에서 다중 리전 AWS KMS keys를 사용할 수 있습니다. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키인 것처럼 취급하며, 키의 다중 리전 기능을 사용하지 않습니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서에서 [다중 리전 키 사용](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)을 참조하세요.

### S3 콘솔 사용
<a name="replication-ex4-console"></a>

단계별 지침은 [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md) 섹션을 참조하세요. 이 주제에서는 소스 및 대상 버킷을 동일하거나 서로 다른 AWS 계정에서 소유하는 경우 복제 구성을 설정하는 방법을 설명합니다.

### AWS CLI 사용
<a name="replication-ex4-cli"></a>

AWS CLI를 사용하여 암호화된 객체를 복제하려면 다음을 수행합니다.
+ 소스 및 대상 버킷을 생성하고 버킷에 버전 관리를 사용 설정합니다.
+ Amazon S3에 객체 복제 권한을 제공하는 AWS Identity and Access Management(IAM) 역할을 생성합니다. IAM 역할의 권한은 암호화된 객체를 복제하는 데 필요한 권한을 포함합니다.
+ 소스 버킷에 복제 구성을 추가합니다. 복제 구성이 KMS 키를 사용하여 암호화된 객체를 복제하는 데 관련된 정보를 제공합니다.
+ 소스 버킷에 암호화된 객체를 추가합니다.
+ 설정을 테스트하여 암호화된 객체가 대상 버킷에 복제되고 있는지 확인합니다.

아래에서 절차를 알아볼 수 있습니다.

**서버 측 암호화된 객체 복제(AWS CLI)**

이 절차에서 예제를 사용하려면 `user input placeholders`를 자체 정보로 대체합니다.

1. 이 예제에서는 동일한 AWS 계정에서 소스(*`amzn-s3-demo-source-bucket`*) 버킷과 대상(*`amzn-s3-demo-destination-bucket`*) 버킷을 모두 만듭니다. AWS CLI의 보안 인증 프로필도 설정합니다. 이 예시에서는 `acctA`라는 프로필 이름을 사용합니다.

   자격 증명 프로파일 설정 및 명명된 프로파일 사용에 대한 자세한 내용은 **AWS Command Line Interface 사용 설명서의 [구성 및 자격 증명 파일 설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)을 참조하세요.

1. 다음 명령을 사용하여 `amzn-s3-demo-source-bucket` 버킷을 생성하고 버킷에서 버전 관리를 활성화합니다. 다음 예제 명령은 미국 동부(버지니아 북부)(`us-east-1`) 리전에 `amzn-s3-demo-source-bucket` 버킷을 생성합니다.

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-source-bucket \
   --region us-east-1 \
   --profile acctA
   ```

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-source-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctA
   ```

1. 다음 명령을 사용하여 `amzn-s3-demo-destination-bucket` 버킷을 생성하고 버킷에서 버전 관리를 활성화합니다. 다음 예시 명령은 미국 서부(오리건)(`us-west-2`) 리전에 `amzn-s3-demo-destination-bucket` 버킷을 생성합니다.
**참고**  
`amzn-s3-demo-source-bucket` 및 `amzn-s3-demo-destination-bucket` 버킷이 모두 동일한 AWS 계정에 있을 때 복제 구성을 설정하려면 동일한 프로필을 사용합니다. 이 예제에서는 `acctA`를 사용합니다. 버킷을 서로 다른 AWS 계정에서 소유한 경우 복제 구성을 테스트하려면 각각 다른 프로필을 지정합니다.

   

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-destination-bucket \
   --region us-west-2 \
   --create-bucket-configuration LocationConstraint=us-west-2 \
   --profile acctA
   ```

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-destination-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctA
   ```

1. IAM 서비스 역할을 생성합니다. 나중에 `amzn-s3-demo-source-bucket` 버킷에 추가하는 복제 구성에서 이 역할을 지정하게 됩니다. Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 역할을 맡습니다. IAM 역할은 다음의 두 단계로 생성합니다.
   + 서비스 역할을 만듭니다.
   + 역할에 권한 정책을 연결합니다.

   1. IAM 서비스서비스 역할을 생성하려면 다음을 수행합니다.

      1. 다음 신뢰 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 `s3-role-trust-policy-kmsobj.json` 파일로 저장합니다. 이 정책은 Amazon S3가 사용자를 대신하여 태스크를 수행할 수 있도록 역할을 맡을 권한을 Amazon S3 서비스 보안 주체에 부여합니다.

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

****  

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

------

      1. 다음 명령을 실행해 역할을 생성합니다.

         ```
         $ aws iam create-role \
         --role-name replicationRolekmsobj \
         --assume-role-policy-document file://s3-role-trust-policy-kmsobj.json  \
         --profile acctA
         ```

   1. 다음으로, 역할에 권한 정책을 연결합니다. 이 정책은 다양한 Amazon S3 버킷 및 객체 작업에 대한 권한을 부여합니다.

      1. 다음 권한 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 `s3-role-permissions-policykmsobj.json` 파일로 저장합니다. IAM 역할을 생성하여 나중에 정책을 여기에 연결할 것입니다.
**중요**  
권한 정책에서 `amzn-s3-demo-source-bucket` 및 `amzn-s3-demo-destination-bucket` 버킷 암호화에 사용할 AWS KMS 키 ID를 지정합니다. `amzn-s3-demo-source-bucket` 및 `amzn-s3-demo-destination-bucket` 버킷에 대해 별도의 KMS 키 2개를 생성해야 합니다. AWS KMS keys는 생성된 AWS 리전 외부에서 공유되지 않습니다.

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

****  

         ```
         {
            "Version":"2012-10-17",		 	 	 
            "Statement":[
               {
                  "Action":[
                     "s3:ListBucket",
                     "s3:GetReplicationConfiguration",
                     "s3:GetObjectVersionForReplication",
                     "s3:GetObjectVersionAcl",
                     "s3:GetObjectVersionTagging"
                  ],
                  "Effect":"Allow",
                  "Resource":[
                     "arn:aws:s3:::amzn-s3-demo-source-bucket",
                     "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
                  ]
               },
               {
                  "Action":[
                     "s3:ReplicateObject",
                     "s3:ReplicateDelete",
                     "s3:ReplicateTags"
                  ],
                  "Effect":"Allow",
                  "Condition":{
                     "StringLikeIfExists":{
                        "s3:x-amz-server-side-encryption":[
                           "aws:kms",
                           "AES256",
                           "aws:kms:dsse"
                        ],
                        "s3:x-amz-server-side-encryption-aws-kms-key-id":[
                           "AWS KMS key IDs(in ARN format) to use for encrypting object replicas"  
                        ]
                     }
                  },
                  "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
               },
               {
                  "Action":[
                     "kms:Decrypt"
                  ],
                  "Effect":"Allow",
                  "Condition":{
                     "StringLike":{
                        "kms:ViaService":"s3.us-east-1.amazonaws.com",
                        "kms:EncryptionContext:aws:s3:arn":[
                           "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
                        ]
                     }
                  },
                  "Resource":[
                     "arn:aws:kms:us-east-1:111122223333:key/key-id" 
                  ]
               },
               {
                  "Action":[
                     "kms:Encrypt"
                  ],
                  "Effect":"Allow",
                  "Condition":{
                     "StringLike":{
                        "kms:ViaService":"s3.us-west-2.amazonaws.com",
                        "kms:EncryptionContext:aws:s3:arn":[
                           "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
                        ]
                     }
                  },
                  "Resource":[
                     "arn:aws:kms:us-west-2:111122223333:key/key-id" 
                  ]
               }
            ]
         }
         ```

------

      1. 정책을 생성하여 역할에 연결합니다.

         ```
         $ aws iam put-role-policy \
         --role-name replicationRolekmsobj \
         --policy-document file://s3-role-permissions-policykmsobj.json \
         --policy-name replicationRolechangeownerPolicy \
         --profile acctA
         ```

1. 다음 복제 구성을 `amzn-s3-demo-source-bucket` 버킷에 추가합니다. 이 구성은 `Tax/` 접두사가 있는 객체를 `amzn-s3-demo-destination-bucket` 버킷으로 복제하도록 Amazon S3에 지시합니다.
**중요**  
복제 구성에서 Amazon S3가 맡을 수 있는 IAM 역할을 지정합니다. `iam:PassRole` 권한이 있을 경우 이 권한만 사용할 수 있습니다. CLI 명령에서 지정한 프로필에 이 권한이 있어야 합니다. 자세한 내용은 **IAM 사용 설명서에서 [사용자에게 AWS 서비스에 역할을 전달할 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

   ```
    <ReplicationConfiguration>
     <Role>IAM-Role-ARN</Role>
     <Rule>
       <Priority>1</Priority>
       <DeleteMarkerReplication>
          <Status>Disabled</Status>
       </DeleteMarkerReplication>
       <Filter>
          <Prefix>Tax</Prefix>
       </Filter>
       <Status>Enabled</Status>
       <SourceSelectionCriteria>
         <SseKmsEncryptedObjects>
           <Status>Enabled</Status>
         </SseKmsEncryptedObjects>
       </SourceSelectionCriteria>
       <Destination>
         <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
         <EncryptionConfiguration>
           <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID>
         </EncryptionConfiguration>
       </Destination>
     </Rule>
   </ReplicationConfiguration>
   ```

   `amzn-s3-demo-source-bucket` 버킷에 복제 구성을 추가하려면 다음을 수행합니다.

   1. AWS CLI를 사용하려면 복제 구성을 JSON으로 지정해야 합니다. 다음 JSON을 로컬 컴퓨터의 현재 디렉터리에 파일(`replication.json`)로 저장합니다.

      ```
      {
         "Role":"IAM-Role-ARN",
         "Rules":[
            {
               "Status":"Enabled",
               "Priority":1,
               "DeleteMarkerReplication":{
                  "Status":"Disabled"
               },
               "Filter":{
                  "Prefix":"Tax"
               },
               "Destination":{
                  "Bucket":"arn:aws:s3:::amzn-s3-demo-destination-bucket",
                  "EncryptionConfiguration":{
                     "ReplicaKmsKeyID":"AWS KMS key IDs (in ARN format) to use for encrypting object replicas"
                  }
               },
               "SourceSelectionCriteria":{
                  "SseKmsEncryptedObjects":{
                     "Status":"Enabled"
                  }
               }
            }
         ]
      }
      ```

   1. JSON을 편집하여 `amzn-s3-demo-destination-bucket` 버킷, `AWS KMS key IDs (in ARN format)` 및 `IAM-role-ARN`에 대한 값을 제공합니다. 변경 사항을 저장합니다.

   1. 다음 명령을 사용하여 `amzn-s3-demo-source-bucket` 버킷에 복제 구성을 추가합니다. 반드시 `amzn-s3-demo-source-bucket` 버킷 이름을 제공해야 합니다.

      ```
      $ aws s3api put-bucket-replication \
      --replication-configuration file://replication.json \
      --bucket amzn-s3-demo-source-bucket \
      --profile acctA
      ```

1. 구성을 테스트하여 암호화된 객체가 복제되는지 확인합니다. Amazon S3 콘솔에서 다음과 같이 수행합니다.

   1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

   1. `amzn-s3-demo-source-bucket` 버킷에서 이름이 `Tax`인 폴더를 생성합니다.

   1. 폴더에 샘플 객체를 추가합니다. 반드시 암호화 옵션을 선택하고 객체를 암호화할 KMS 키를 지정해야 합니다.

   1. `amzn-s3-demo-destination-bucket` 버킷에 객체 복제본이 있으며 해당 복제본이 구성에서 지정한 KMS 키를 사용하여 암호화되었는지 확인합니다. 자세한 내용은 [복제 상태 정보 가져오기](replication-status.md) 섹션을 참조하세요.

### AWS SDK 사용
<a name="replication-ex4-sdk"></a>

복제 구성을 추가하는 코드 예시는 [AWS SDK 사용](replication-walkthrough1.md#replication-ex1-sdk) 섹션을 참조하세요. 복제 구성을 적절히 수정해야 합니다.

 

# 복제본 수정 동기화를 사용하여 메타데이터 변경 복제
<a name="replication-for-metadata-changes"></a>

Amazon S3 복제본 수정 동기화를 사용하면 태그, 액세스 제어 목록(ACL), Object Lock 설정 등 객체 메타데이터를 복제본과 소스 객체 간에 복제할 수 있습니다. 기본적으로, Amazon S3는 원본 객체의 메타데이터를 복제본으로만 복제합니다. 복제본 수정 동기화가 활성화되면 Amazon S3는 복제본에 대한 메타데이터 변경 사항을 소스 객체로 다시 복제하므로, 복제가 양방향으로 수행됩니다.

## 복제본 수정 동기화 사용 설정
<a name="enabling-replication-for-metadata-changes"></a>

Amazon S3 복제본 수정 동기화를 새 복제 규칙이나 기존 복제 규칙과 함께 사용할 수 있습니다. 전체 버킷 또는 특정 접두사가 있는 객체에 이를 적용할 수 있습니다.

Amazon S3 콘솔을 사용하여 복제본 수정 동기화를 활성화하려면 [라이브 복제 구성 예제](replication-example-walkthroughs.md) 섹션을 참조하세요. 이 주제에서는 소스 및 대상 버킷을 동일하거나 서로 다른 AWS 계정에서 소유하고 있을 때 복제 구성에서 복제본 수정 동기화를 활성화하기 위한 지침을 제공합니다.

AWS Command Line Interface(AWS CLI)를 사용하여 복제본 수정 동기화를 활성화하려면 `ReplicaModifications`가 활성화된 상태의 복제본이 포함된 버킷에 복제 구성을 추가해야 합니다. 양방향 복제를 설정하려면 소스 버킷(`amzn-s3-demo-source-bucket`)에서 복제본이 포함된 버킷(`amzn-s3-demo-destination-bucket`)으로의 복제 규칙을 생성합니다. 그런 다음 복제본이 포함된 버킷(`amzn-s3-demo-destination-bucket`)에서 소스 버킷(`amzn-s3-demo-source-bucket`)으로의 두 번째 복제 규칙을 생성합니다. 소스 및 대상 버킷은 동일하거나 서로 다른 AWS 리전에 있을 수 있습니다.

**참고**  
복제된 객체의 객체 액세스 제어 목록(ACL), 객체 태그 또는 Object Lock 설정과 같은 복제본 메타데이터 변경 사항을 복제하려면 소스 및 대상 버킷 모두에서 복제본 수정 동기화를 활성화해야 합니다. 모든 복제 규칙과 마찬가지로, 이러한 규칙은 전체 버킷이나 접두사 또는 객체 태그로 필터링된 객체의 하위 집합에 적용할 수 있습니다.

다음 예제 구성에서 Amazon S3는 `Tax` 접두사 아래에서 소스 객체가 포함된 `amzn-s3-demo-source-bucket` 버킷에 메타데이터 변경 사항을 복제합니다.

```
{
    "Rules": [
        {
            "Status": "Enabled",
            "Filter": {
                "Prefix": "Tax"
            },
            "SourceSelectionCriteria": {
                "ReplicaModifications":{
                    "Status": "Enabled"
                }
            },
            "Destination": {
                "Bucket": "arn:aws:s3:::amzn-s3-demo-source-bucket"
            },
            "Priority": 1
        }
    ],
    "Role": "IAM-Role-ARN"
}
```

AWS CLI를 사용한 복제 규칙 생성에 대한 전체 지침은 [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md) 섹션을 참조하세요.

# 버킷 간 삭제 마커 복제
<a name="delete-marker-replication"></a>

기본적으로, S3 복제가 활성화되고 원본 버킷에서 객체가 삭제되면 Amazon S3는 원본 버킷에만 삭제 마커를 추가합니다. 이 작업은 우발적이거나 악의적인 삭제로부터 대상 버킷의 데이터를 보호하는 데 도움이 됩니다. **삭제 마커 복제를 활성화한 경우, 이러한 마커가 대상 버킷에 복사되고 Amazon S3는 소스 버킷과 대상 버킷 모두에서 객체가 삭제된 것처럼 동작합니다. 삭제 마커의 작동 원리에 대한 자세한 내용은 [삭제 마커를 통한 작업](DeleteMarker.md) 섹션을 참조하세요.

**참고**  
태그 기반 복제 규칙에는 삭제 마커 복제가 지원되지 않습니다. 삭제 마커 복제도 S3 Replication Time Control(S3 RTC)을 사용할 때 부여된 15분의 서비스 수준 계약(SLA)을 준수하지 않습니다.
최신 복제 구성 XML 버전을 사용하지 않는 경우 삭제 작업은 복제에 다르게 영향을 줍니다. 자세한 내용은 [삭제 작업이 복제에 미치는 영향](replication-what-is-isnot-replicated.md#replication-delete-op) 섹션을 참조하세요.
삭제 마커 복제를 활성화하고 소스 버킷에 S3 수명 주기 만료 규칙이 있는 경우 S3 수명 주기 만료 규칙에 의해 추가된 삭제 마커는 대상 버킷에 복제되지 않습니다.

## 삭제 마커 복제 사용 설정
<a name="enabling-delete-marker-replication"></a>

새 복제 규칙이나 기존 복제 규칙과 함께 삭제 마커 복제를 사용할 수 있습니다. 전체 버킷 또는 특정 접두사가 있는 객체에 삭제 마커 복제를 적용할 수 있습니다.

Amazon S3 콘솔을 사용하여 삭제 마커 복제를 활성화하려면 [S3 콘솔 사용](replication-walkthrough1.md#enable-replication) 섹션을 참조하세요. 이 주제에서는 소스 및 대상 버킷을 동일하거나 서로 다른 AWS 계정에서 소유하고 있을 때 복제 구성에서 삭제 마커 복제를 활성화하기 위한 지침을 제공합니다.

AWS Command Line Interface(AWS CLI)을 사용하여 삭제 마커 복제를 활성화하려면 다음 예제 구성과 같이 `DeleteMarkerReplication`을 활성화한 소스 버킷에 복제 구성을 추가해야 합니다.

다음 예제 복제 구성에서 접두사 `Tax` 아래의 객체에 대해 삭제 마커가 대상 버킷 `amzn-s3-demo-destination-bucket`에 복제됩니다.

```
{
    "Rules": [
        {
            "Status": "Enabled",
            "Filter": {
                "Prefix": "Tax"
            },
            "DeleteMarkerReplication": {
                "Status": "Enabled"
            },
            "Destination": {
                "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket"
            },
            "Priority": 1
        }
    ],
    "Role": "IAM-Role-ARN"
}
```

AWS CLI를 통한 복제 규칙 만들기에 대한 전체 지침은 [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md) 섹션을 참조하세요.

# 라이브 복제 관리 또는 일시 중지
<a name="disable-replication"></a>

라이브 복제는 동일한 리전 또는 서로 다른 AWS 리전의 버킷 간에 객체를 비동기식으로 자동 복사하는 것을 말합니다. 복제 구성을 설정하면 Amazon S3는 새로 생성된 객체 및 객체 업데이트를 원본 버킷에서 지정된 하나 이상의 대상 버킷으로 복제합니다.

Amazon S3 콘솔을 사용하면 원본 버킷에 복제 규칙을 추가할 수 있습니다. 복제 규칙은 복제할 원본 버킷 객체와 복제된 객체가 저장된 대상 버킷을 정의합니다. 복제에 대한 자세한 내용은 [리전 내 및 리전 간 객체 복제](replication.md) 섹션을 참조하세요.

Amazon S3 콘솔의 **복제** 페이지에서 복제 규칙을 관리할 수 있습니다. 복제 규칙은 추가, 확인, 편집, 활성화, 비활성화 또는 삭제할 수 있습니다. 복제 규칙의 우선순위를 변경할 수도 있습니다. 복제 규칙을 버킷에 추가하는 것에 관한 자세한 내용은 [S3 콘솔 사용](replication-walkthrough1.md#enable-replication) 섹션을 참조하세요.

**Amazon S3 콘솔을 사용하여 버킷의 복제 규칙을 관리하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택합니다.

1. **범용 버킷** 탭에서 확인하려는 버킷의 이름을 선택합니다.

1. **관리** 탭을 선택한 다음 아래로 스크롤하여 **복제 규칙**으로 이동합니다.

1. 복제 규칙은 다음과 같은 방법으로 변경합니다.
   + 복제 규칙을 활성화하거나 비활성화하려면 규칙 왼쪽에 있는 옵션 버튼을 선택합니다. **작업** 메뉴에서 **규칙 활성화** 또는 **규칙 비활성화**를 선택합니다. **작업** 메뉴의 해당 버킷에 있는 모든 규칙들을 사용 중지 및 사용 설정하거나 삭제할 수도 있습니다.
**참고**  
복제 규칙을 비활성화했다가 나중에 다시 활성화하는 경우, 규칙이 비활성화된 동안 복제되지 않은 새 객체나 변경된 객체는 규칙을 다시 활성화해도 자동으로 복제되지 *않습니다*. 이러한 객체를 복제하려면 S3 배치 복제를 사용해야 합니다. 자세한 내용은 [배치 복제를 사용한 기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.
   + 규칙의 우선 순위를 변경하려면 규칙 왼쪽에 있는 옵션 버튼을 선택한 다음 **규칙 편집**을 선택합니다.

     여러 규칙의 범위에 포함된 객체로 인해 발생하는 충돌을 방지하기 위해 규칙 우선 순위를 설정합니다. 중첩 규칙의 경우, Amazon S3은 규칙 우선 순위를 사용하여 어느 규칙을 적용할지 결정합니다. 숫자가 클수록 우선 순위가 높아집니다. 규칙 우선 순위에 대한 자세한 내용은 [복제 구성 파일 요소](replication-add-config.md) 섹션을 참조하세요.

## 복제 일시 중지 또는 중지
<a name="replication-pause"></a>

복제를 일시 중지했다가 나중에 자동으로 재개하도록 하려면 AWS Fault Injection Service에서 `aws:s3:bucket-pause-replication` 작업을 사용할 수 있습니다. 자세한 내용은 *AWS Fault Injection Service 사용 설명서*의 [https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#bucket-pause-replication](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#bucket-pause-replication) 및 [S3 복제 일시 중지](https://docs.aws.amazon.com/fis/latest/userguide/cross-region-scenario.html#cross-region-scenario-actions-pause-s3-replication)를 참조하세요.

Amazon S3에서 복제를 중지하려면 복제 규칙을 비활성화하는 것이 좋습니다. 복제 규칙을 비활성화했다가 나중에 다시 활성화하는 경우, 규칙이 비활성화된 동안 복제되지 않은 새 객체나 변경된 객체는 규칙을 다시 활성화해도 자동으로 복제되지 *않습니다*. 이러한 객체를 복제하려면 S3 배치 복제를 사용해야 합니다. 자세한 내용은 [배치 복제를 사용한 기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.

AWS Identity and Access Management(IAM) 역할, AWS Key Management Service(AWS KMS) 권한 또는 Amazon S3에 필요한 권한을 부여하는 버킷 정책 권한을 제거하는 경우에도 복제가 중지됩니다. 그러나 이러한 방법을 사용하면 복제가 실패하므로 권장되지 않습니다. Amazon S3는 영향을 받는 객체의 복제 상태를 `FAILED`(으)로 보고합니다. 나중에 권한이 복원되는 경우 `FAILED`로 표시된 객체는 자동으로 복제되지 *않습니다*. 이러한 객체를 복제하려면 S3 배치 복제를 사용해야 합니다.

# 배치 복제를 사용한 기존 객체 복제
<a name="s3-batch-replication-batch"></a>

S3 배치 복제는 Amazon S3 버킷에서 새 객체를 지속적으로 자동으로 복사하는 실시간 복제와 다릅니다. 대신 S3 배치 복제는 기존 객체에서 요청 시 수행됩니다. S3 배치 복제를 사용하여 다음 유형의 객체를 복제할 수 있습니다.
+ 복제 구성이 적용되기 전에 존재했던 객체
+ 이전에 복제된 객체
+ 복제에 실패한 객체

배치 작업을 사용하여 이러한 객체를 온디맨드로 복제할 수 있습니다.

다음을 수행하여 배치 복제를 시작할 수 있습니다.
+ **새 복제 규칙 또는 대상에 대해 배치 복제 시작** - 새 복제 구성에서 첫 번째 규칙을 만들 때 또는 Amazon S3 콘솔을 통해 새 대상 버킷을 기존 구성에 추가할 때 일회성 배치 복제 작업을 만들 수 있습니다.
+ **기존 복제 구성에 대해 배치 복제 시작** - Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK, 또는 Amazon S3 REST API를 통해 S3 Batch Operations를 사용하여 새 배치 복제 작업을 만들 수 있습니다.

배치 복제 작업이 완료되면 완료 보고서를 수신합니다. 보고서를 사용하여 작업을 검사하는 방법에 대한 자세한 정보는 [작업 상태 및 완료 보고서 추적](batch-ops-job-status.md) 섹션을 참조하세요.

## S3 배치 복제 고려 사항
<a name="batch-replication-considerations"></a>

S3 배치 복제를 사용하기 전에 다음 고려 사항 목록을 검토합니다.
+ 소스 버킷에는 기존 복제 구성이 있어야 합니다. 복제를 사용하려면 [라이브 복제 설정 개요](replication-how-setup.md) 및 [라이브 복제 구성 예제](replication-example-walkthroughs.md) 섹션을 참조하세요.
+ 버킷에 대해 S3 수명 주기를 구성한 경우 배치 복제 작업이 활성 상태인 동안 수명 주기 규칙을 사용 중지하는 것이 좋습니다. 이렇게 하면 소스 버킷과 대상 버킷 간의 동등성이 보장됩니다. 이렇게 하지 않을 경우 두 버킷이 어긋날 수 있으며, 소스 버킷의 정확한 복제본인 대상 버킷을 만들 수 없습니다. 예를 들어 다음 시나리오를 고려해 보세요:
  + 소스 버킷에는 객체 및 객체의 삭제 마커에 대한 버전이 여러 개 있습니다.
  + 소스 및 대상 버킷에는 만료된 삭제 마커를 제거하는 수명 주기 구성이 있습니다.

  이 시나리오에서 배치 복제는 객체 버전을 복제하기 전에 삭제 마커를 대상 버킷에 복제할 수 있습니다. 이로 인해 수명 주기 구성이 삭제 마커를 만료된 것으로 표시하고 객체 버전이 복제되기 전에 대상 버킷에서 제거될 수 있습니다.
+ 배치 작업을 실행하기 위해 지정하는 AWS Identity and Access Management(IAM) 역할에는 기본 배치 작업을 수행하는 데 필요한 권한이 있어야 합니다. IAM 역할 생성에 대한 자세한 내용은 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md) 섹션을 참조하세요.
+ 배치 복제에는 Amazon S3에서 생성할 수 있는 매니페스트가 필요합니다. 생성된 매니페스트는 소스 버킷과 동일한 AWS 리전에 저장되어야 합니다. 매니페스트를 생성하지 않는 경우 복제하려는 객체가 포함된 Amazon S3 인벤토리 보고서 또는 CSV 파일을 제공할 수 있습니다. 자세한 내용은 [배치복제 작업에 대한 매니페스트 지정](#batch-replication-manifest) 섹션을 참조하세요.
+ 배치 복제는 대상 버킷에서 객체의 버전 ID를 지정하여 삭제한 객체를 다시 복제하는 것을 지원하지 않습니다. 이러한 객체를 다시 복제하려면 배치 복사 작업을 사용하여 소스 객체를 제자리에 복사할 수 있습니다. 이러한 객체를 제자리에 복사하면 소스 버킷에 객체의 새 버전이 생성되고 대상 버킷에 대한 복제가 자동으로 시작됩니다. 대상 버킷을 삭제하고 다시 생성하면 복제가 시작되지 않습니다.

  배치 복사에 대한 자세한 내용은 [배치 작업을 사용하여 객체를 복사하는 예](batch-ops-examples-copy.md) 섹션을 참조하세요.
+ 소스 버킷에서 복제 규칙을 사용하는 경우 [복제 구성을 업데이트](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication-walkthrough-2.html)하여 복제 규칙에 연결된 IAM 역할에 객체 복제를 위한 적절한 권한을 부여해야 합니다. 이 IAM 역할에는 소스 및 대상 버킷 모두에서 복제 작업을 수행하는 데 필요한 권한이 있어야 합니다.
+ 짧은 시간 내에 동일한 버킷에 대해 여러 배치 복제 작업을 제출하면 Amazon S3는 해당 작업을 동시에 실행합니다.
+ 서로 다른 두 버킷에 대해 여러 배치 복제 작업을 제출하는 경우 Amazon S3에서 모든 작업을 동시에 실행하지 않을 수 있다는 점을 유의하세요. 계정에서 한 번에 실행할 수 있는 배치 복제 작업 수를 초과할 경우 Amazon S3는 우선순위가 낮은 작업을 일시 중지하고 우선순위가 높은 작업을 진행합니다. 우선순위가 높은 작업이 완료되면 일시 중지된 모든 작업이 다시 활성화됩니다.
+ 배치 복제는 S3 Glacier Flexible Retrieval 및 S3 Glacier Deep Archive 스토리지 클래스에 저장된 객체에 대해서는 지원되지 않습니다.
+ Archive Access 또는 Deep Archive Access 스토리지 계층에 저장된 S3 Intelligent-Tiering 객체를 배치 복제하려면 먼저 [복원](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering-managing.html#restore-data-from-int-tier-archive) 요청을 시작하고 객체가 Frequent Access 계층으로 이동할 때까지 기다려야 합니다.
+ 단일 배치 복제 작업은 최대 200억 개의 객체가 포함된 매니페스트를 지원할 수 있습니다.
+ S3 배치 복제를 사용하여 리전 간 데이터세트를 복제하며 이전에 객체의 서버 측 암호화 유형이 SSE-S3에서 SSE-KMS로 업데이트된 경우 추가 권한이 필요할 수 있습니다. 소스 리전 버킷에는 `kms:decrypt` 권한이 있어야 합니다. 그런 다음 대상 리전의 버킷에 대한 `kms:decrypt` 및 `kms:encrypt` 권한이 필요합니다. 자세한 내용은 [암호화된 객체 복제](replication-config-for-kms-objects.md) 섹션을 참조하세요.

## 배치복제 작업에 대한 매니페스트 지정
<a name="batch-replication-manifest"></a>

매니페스트는 Amazon S3가 작업을 수행할 객체 키를 포함하는 Amazon S3 객체입니다. 배치 복제 작업을 생성하려면 사용자 생성 매니페스트를 제공하거나 Amazon S3가 복제 구성을 기반으로 매니페스트를 생성하도록 해야 합니다.

사용자 생성 매니페스트를 제공하는 경우 Amazon S3 인벤토리 보고서 또는 CSV 파일 형식이어야 합니다. 매니페스트의 객체가 버전 지정된 버킷에 있는 경우 객체의 버전 ID를 지정해야 합니다. 매니페스트에 지정된 버전 ID를 가진 객체만 복제됩니다. 매니페스트 지정에 대한 자세한 내용은 [매니페스트 지정](batch-ops-create-job.md#specify-batchjob-manifest) 섹션을 참조하세요.

Amazon S3가 사용자를 대신하여 매니페스트 파일을 생성하도록 선택하면 나열된 객체는 소스 버킷의 복제 구성과 동일한 소스 버킷, 접두사 및 태그를 사용하게 됩니다. 매니페스트가 생성되면 Amazon S3가 모든 적합한 버전의 객체를 복제합니다.

**참고**  
Amazon S3가 매니페스트를 생성하도록 하는 경우 매니페스트가 소스 버킷과 동일한 AWS 리전에 저장되어야 합니다.

## 배치 복제 작업에 대한 필터
<a name="batch-replication-filters"></a>

배치 복제 작업을 생성할 때 선택적으로 객체 생성 날짜 및 복제 상태와 같은 추가 필터를 지정하여 작업 범위를 줄일 수 있습니다.

다음 값 중 하나 이상을 제공하여 `ObjectReplicationStatuses` 값을 기반으로 복제할 객체를 필터링할 수 있습니다.
+ `"NONE"` - Amazon S3가 이전에 객체 복제를 시도한 적이 없음을 나타냅니다.
+ `"FAILED"` - Amazon S3가 이전에 객체 복제를 시도했지만 실패했음을 나타냅니다.
+ `"COMPLETED"` - Amazon S3가 이전에 객체를 성공적으로 복제했음을 나타냅니다.
+ `"REPLICA"` - 이 객체가 Amazon S3가 다른 소스 버킷에서 복제한 복제본임을 나타냅니다.

복제 상태에 자세한 내용은 [복제 상태 정보 가져오기](replication-status.md) 섹션을 참조하세요.

배치 복제 작업을 필터링하지 않으면 Batch Operations는 기본적으로 복제되지 않는 특정 객체를 제외하고 복제 구성의 규칙과 매칭되는 매니페스트의 모든 객체(`ObjectReplicationStatus` 무관)를 복제하려고 시도합니다. 자세한 내용은 [복제 구성으로 복제되지 않는 것은 무엇입니까?](replication-what-is-isnot-replicated.md#replication-what-is-not-replicated) 섹션을 참조하세요.

목표에 따라 `ObjectReplicationStatuses`를 다음 값 중 하나 이상으로 설정할 수 있습니다.
+ 복제된 적이 없는 기존 객체만 복제하려면 `"NONE"`만 포함합니다.
+ 이전에 복제에 실패한 객체만 복제를 다시 시도하려는 경우 `"FAILED"`만 포함합니다.
+ 기존 객체를 복제하고 이전에 복제에 실패한 객체 복제를 다시 시도하려면 `"NONE"` 및 `"FAILED"`를 모두 포함합니다.
+ 다른 대상에 복제된 객체로 대상 버킷을 다시 채우려면 `"COMPLETED"`를 포함합니다.
+ 이전에 복제된 객체를 복제하려면 `"REPLICA"`를 포함합니다.

## 배치 복제 완료 보고서
<a name="batch-replication-completion-report"></a>

배치 복제 작업을 생성할 때 CSV 완료 보고서를 요청할 수 있습니다. 이 보고서에는 객체, 복제 성공 또는 실패 코드, 출력 및 설명이 표시됩니다. 작업 추적 및 완료 보고서에 대한 자세한 내용은 [완료 보고서](batch-ops-job-status.md#batch-ops-completion-report) 섹션을 참조하세요.

복제 실패 코드 및 설명 목록은 [Amazon S3 복제 실패 이유](replication-metrics-events.md#replication-failure-codes) 섹션을 참조하세요.

배치 복제의 문제 해결에 대한 자세한 내용은 [배치 복제 오류](replication-troubleshoot.md#troubleshoot-batch-replication-errors) 섹션을 참조하세요.

## 배치 복제 시작
<a name="batch-replication-tutorial"></a>

배치 복제를 사용하는 방법에 대해 자세히 알아보려면 [자습서: S3 배치 복제를 사용하여 Amazon S3 버킷의 기존 객체 복제](https://aws.amazon.com/getting-started/hands-on/replicate-existing-objects-with-amazon-s3-batch-replication/)를 참조하세요.

# S3 배치 복제를 위한 IAM 역할 구성
<a name="s3-batch-replication-policies"></a>

Amazon S3 배치 복제는 Batch Operations 작업의 일종이므로, 사용자를 대신하여 작업을 수행할 수 있는 Batch Operations 권한을 부여하려면 AWS Identity and Access Management(IAM) 역할을 만들어야 합니다. 또한 배치 복제 IAM 정책을 배치 작업 IAM 역할에 연결해야 합니다.

다음 절차에 따라 배치 복제 작업을 시작할 수 있는 Batch Operations 권한을 부여하는 정책과 IAM 역할을 만듭니다.

**배치 복제 정책을 만들려면**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. **액세스 관리(Access management)**에서 **정책(Policies)**을 선택합니다.

1. **정책 생성**을 선택합니다.

1. **권한 지정** 페이지에서 **JSON**을 선택합니다.

1. Amazon S3에서 매니페스트를 생성했는지 아니면 자체 매니페스트를 제공하는지에 따라 다음 정책 중 하나를 삽입합니다. 매니페스트에 관한 자세한 내용은 [배치복제 작업에 대한 매니페스트 지정](s3-batch-replication-batch.md#batch-replication-manifest) 단원을 참조하십시오.

   이러한 정책을 사용하기 전에 다음 정책의 `user input placeholders`를 복제 소스 버킷, 매니페스트 버킷 및 완료 보고서 버킷의 이름으로 바꿉니다.
**참고**  
배치 복제의 IAM 역할에는 매니페스트를 생성하는지 아니면 제공하는지에 따라 다른 권한이 필요하므로, 다음 예제에서 적절한 정책을 선택해야 합니다.

**Amazon S3 생성 매니페스트를 사용 및 저장하는 경우의 정책**

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
         {
            "Action": [
               "s3:InitiateReplication"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
            ]
         },
         {
            "Action": [
               "s3:GetReplicationConfiguration",
               "s3:PutInventoryConfiguration"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-source-bucket"
            ]
         },
         {
            "Action": [
               "s3:GetObject",
               "s3:GetObjectVersion"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
            ]
         },
         {
            "Effect": "Allow",
            "Action": [
               "s3:PutObject"
            ],
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*",
               "arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"    
            ]
         }
      ]
   }
   ```

------

**사용자 제공 매니페스트를 사용하는 경우의 정책**

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
         {
            "Action": [
               "s3:InitiateReplication"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
            ]
         },
         {
            "Action": [
               "s3:GetObject",
               "s3:GetObjectVersion"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-manifest-bucket/*"
            ]
         },
         {
            "Effect": "Allow",
            "Action": [
               "s3:PutObject"
            ],
            "Resource": [
               "arn:aws:s3:::amzn-s3-demo-completion-report-bucket/*"    
            ]
         }
      ]
   }
   ```

------

1. **다음**을 선택합니다.

1. 정책 이름을 지정한 다음 **정책 생성**을 선택합니다.

**배치 복제를 위한 IAM 역할을 만들려면**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. **액세스 관리**에서 **역할**을 선택합니다.

1. **역할 생성**을 선택합니다.

1. 신뢰할 수 있는 엔터티 유형으로 **AWS 서비스**를 선택합니다. **사용 사례** 섹션에서 **S3**를 서비스로, **S3 Batch Operations**를 사용 사례로 선택합니다.

1. **다음**을 선택합니다. **권한 추가** 페이지가 나타납니다. 검색 상자에서 이전 절차에서 만든 정책을 검색합니다. 정책 이름 옆에 있는 확인란을 선택하고 **다음**을 선택합니다.

1. **이름, 검토 및 만들기** 페이지에서 IAM 역할의 이름을 지정합니다.

1. **1단계: 신뢰 ID** 섹션에서 IAM 역할이 다음 신뢰 정책을 사용하고 있는지 확인합니다.

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

****  

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

------

1. **2단계: 권한 추가** 섹션에서 IAM 역할이 이전에 만든 정책을 사용하고 있는지 확인합니다.

1. **역할 생성**을 선택합니다.

# 새 복제 규칙 또는 대상에 대한 배치 복제 작업 만들기
<a name="s3-batch-replication-new-config"></a>

Amazon S3에서 라이브 복제는 복제 구성을 만들기 전에 소스 버킷에 이미 존재했던 객체를 복제하지 않습니다. 라이브 복제는 복제 구성이 생성된 후 버킷에 기록된 새 객체와 업데이트된 객체만 자동으로 복제합니다. 이미 존재하는 객체를 복제하려면 S3 배치 복제를 사용하여 요청 시 복제할 수 있습니다.

새로운 라이브 복제 구성의 첫 번째 규칙을 만들거나 Amazon S3 콘솔을 통해 기존 복제 구성에 새 대상 버킷을 추가할 때는 필요에 따라 배치 복제 작업을 만들 수 있습니다. 이 배치 복제 작업을 사용하여 소스 버킷의 기존 객체를 대상 버킷에 복제할 수 있습니다.

새 대상 버킷을 추가하지 않고 기존 구성에 배치 복제를 사용하려면 [기존 복제 규칙에 대한 배치 복제 작업 생성](s3-batch-replication-existing-config.md) 섹션을 참조하세요.

**사전 조건**  
배치 복제 작업을 만들기 전에 Batch Operations AWS Identity and Access Management(IAM) 역할을 만들어 사용자를 대신해서 작업을 수행할 수 있는 Amazon S3 권한을 부여해야 합니다. 자세한 내용은 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md) 섹션을 참조하세요.

## Amazon S3 콘솔을 통해 새 복제 규칙 또는 대상에 대한 배치 복제 사용
<a name="batch-replication-new-config-console"></a>

새 복제 구성의 첫 번째 규칙을 만들거나 Amazon S3 콘솔을 통해 기존 구성에 새 대상 버킷을 추가할 때 소스 버킷의 기존 객체를 복제하는 배치 복제 작업을 만들도록 선택할 수 있습니다.

**복제 구성을 만들거나 업데이트할 때 배치 복제 작업을 만들려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택합니다.

1. **범용 버킷** 목록에서 복제할 객체가 포함된 버킷 이름을 선택합니다.

1. 새 복제 규칙을 만들거나 기존 규칙을 편집하려면 **관리** 탭을 선택하고 아래로 스크롤하여 **복제 규칙**으로 이동합니다.
   + 새 복제 규칙을 생성하려면 **Create replication rule**(복제 규칙 생성)을 선택합니다. 기본 복제 규칙을 설정하는 방법에 대한 예제는 [라이브 복제 구성 예제](replication-example-walkthroughs.md) 섹션을 참조하세요.
   + 기존 복제 규칙을 편집하려면 규칙 이름 옆에 있는 옵션 버튼을 선택한 다음 **규칙 편집**을 선택합니다.

1. 새 복제 규칙을 생성하거나 기존 복제 규칙의 대상을 편집하고 **Save**(저장)를 선택합니다.

   새 복제 구성에서 첫 번째 규칙을 생성하거나 기존 구성을 편집하여 새 대상을 추가하면 **Replicate existing objects?**(기존 객체 복제?) 대화 상자에 배치 복제 작업을 생성할 수 있는 옵션이 제공됩니다.

1. 지금 이 작업을 만들고 실행하려면 **예, 기존 객체를 복제합니다**를 선택합니다.

   나중에 배치 복제 작업을 만들려는 경우 **아니요, 기존 객체를 복제하지 않습니다**를 선택합니다.

1. **예, 기존 객체를 복제합니다**를 선택한 경우 **Batch Operations 작업 만들기** 페이지가 나타납니다. S3 배치 복제 작업에는 다음과 같은 설정이 있습니다.  
**작업 실행 옵션**  
S3 배치 복제 작업을 즉시 실행하려면 **준비가 되면 자동으로 작업 실행**을 선택합니다. 나중에 작업을 실행하려면 **준비가 되면 작업 실행 대기**를 선택합니다.  
**준비가 되면 자동으로 작업 실행**을 선택한 경우 Batch Operations 매니페스트를 만들고 저장할 수 없습니다. Batch Operations 매니페스트를 저장하려면 **준비가 되면 작업 실행 대기**를 선택합니다.  
**배치 작업 매니페스트**  
**준비가 되면 작업 실행 대기**를 선택한 경우 **Batch Operations 매니페스트** 섹션이 나타납니다. 매니페스트는 지정된 작업을 실행해야 하는 모든 객체의 목록입니다. 매니페스트를 저장하도록 선택할 수 있습니다. S3 인벤토리 파일과 마찬가지로 매니페스트는 CSV 파일로 저장되고 버킷에 저장됩니다. 배치 작업 매니페스트에 대한 자세한 내용은 [매니페스트 지정](batch-ops-create-job.md#specify-batchjob-manifest) 섹션을 참조하세요.  
**완료 보고서**  
S3 Batch Operations는 매니페스트에 지정된 각 객체에 대해 하나의 태스크를 실행합니다. 완료 보고서를 사용하면 추가 설정을 하지 않아도 통합된 형식으로 작업 결과를 손쉽게 볼 수 있습니다. 모든 작업 또는 실패한 작업에만 대해 완료 보고서를 요청할 수 있습니다. 완료 보고서에 대한 자세한 내용은 [완료 보고서](batch-ops-job-status.md#batch-ops-completion-report) 섹션을 참조하세요.  
**권한**  
복제 실패의 가장 일반적인 원인 중 하나는 제공된 AWS Identity and Access Management(IAM) 역할의 사용 권한이 충분하지 않은 것입니다. 이 역할을 생성하는 방법에 대한 상세 정보는 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md)을(를) 참조하세요. 배치 복제에 필요한 권한을 가진 IAM 역할을 만들거나 선택해야 합니다.

1. **저장**을 선택합니다.

# 기존 복제 규칙에 대한 배치 복제 작업 생성
<a name="s3-batch-replication-existing-config"></a>

Amazon S3에서 라이브 복제는 복제 구성을 만들기 전에 소스 버킷에 이미 존재했던 객체를 복제하지 않습니다. 라이브 복제는 복제 구성이 생성된 후 버킷에 기록된 새 객체와 업데이트된 객체만 자동으로 복제합니다. 이미 존재하는 객체를 복제하려면 S3 배치 복제를 사용하여 요청 시 복제할 수 있습니다.

AWS SDK, AWS Command Line Interface(AWS CLI) 또는 Amazon S3 콘솔을 사용하여 기존 복제 구성에 대해 S3 배치 복제를 구성할 수 있습니다. 배치 복제에 대한 개요는 [배치 복제를 사용한 기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.

배치 복제 작업이 완료되면 완료 보고서를 수신합니다. 보고서를 사용하여 작업을 검사하는 방법에 대한 자세한 정보는 [작업 상태 및 완료 보고서 추적](batch-ops-job-status.md) 섹션을 참조하세요.

**사전 조건**  
배치 복제 작업을 만들기 전에 Batch Operations AWS Identity and Access Management(IAM) 역할을 만들어 사용자를 대신해서 작업을 수행할 수 있는 Amazon S3 권한을 부여해야 합니다. 자세한 내용은 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md) 섹션을 참조하세요.

## S3 콘솔 사용
<a name="batch-replication-existing-config-console"></a>

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **Batch Operations**를 선택합니다.

1. **작업 생성**을 선택합니다.

1. **AWS 리전** 섹션에 작업을 만들려는 리전이 표시되는지 확인합니다.

1. **매니페스트** 섹션에서 사용하려는 매니페스트 형식을 지정합니다. 매니페스트는 지정된 작업을 실행해야 하는 모든 객체의 목록입니다. 배치 작업 매니페스트에 대한 자세한 내용은 [매니페스트 지정](batch-ops-create-job.md#specify-batchjob-manifest) 섹션을 참조하세요.
   + 매니페스트를 준비한 경우 **S3 인벤토리 보고서(manifest.json)** 또는 **CSV**를 선택합니다. 매니페스트가 버전이 지정된 버킷에 있는 경우 매니페스트의 버전 ID를 지정할 수 있습니다. 버전 ID를 지정하지 않으면 Batch Operations에서는 매니페스트의 현재 버전을 사용합니다. 매니페스트 생성에 대한 자세한 내용은 [매니페스트 지정](batch-ops-create-job.md#specify-batchjob-manifest) 섹션을 참조하세요.
**참고**  
매니페스트의 객체가 버전 지정된 버킷에 있는 경우 객체의 버전 ID를 지정해야 합니다. 자세한 내용은 [매니페스트 지정](batch-ops-create-job.md#specify-batchjob-manifest) 섹션을 참조하세요.
   + 복제 구성을 기반으로 매니페스트를 생성하려면 **S3 복제 구성을 사용한 매니페스트 생성(Create manifest using S3 Replication Configuration)**을 선택합니다. 그런 다음 복제 구성의 소스 버킷을 선택합니다.

1. (선택 사항) **S3 복제 구성을 사용하여 매니페스트 만들기**를 선택한 경우 객체를 만든 날짜 및 복제 상태와 같은 추가 필터를 포함할 수 있습니다. 복제 상태별로 필터링하는 방법에 대한 예제는 [배치복제 작업에 대한 매니페스트 지정](s3-batch-replication-batch.md#batch-replication-manifest) 섹션을 참조하세요.

1. (선택 사항) **S3 복제 구성을 사용하여 매니페스트 만들기**를 선택한 경우 생성된 매니페스트를 저장할 수 있습니다. 이 매니페스트를 저장하려면 **Batch Operations 매니페스트 저장**을 선택합니다. 그런 다음 매니페스트의 대상 버킷을 지정하고 매니페스트를 암호화할지 여부를 선택합니다.
**참고**  
생성된 매니페스트는 소스 버킷과 동일한 AWS 리전에 저장되어야 합니다.

1. **다음**을 선택합니다.

1. **작업** 페이지에서 **복제**를 선택한 후 **다음**을 선택합니다.

1. (선택 사항) **설명**을 입력합니다.

1. 필요한 경우 작업의 **우선 순위**를 조정합니다. 숫자가 높을 수록 우선순위가 높아집니다. Amazon S3는 우선 순위가 낮은 작업에 앞서 우선 순위가 높은 작업을 실행하려고 시도합니다. 작업 우선 순위에 대한 자세한 내용은 [작업 우선 순위 지정](batch-ops-job-priority.md) 섹션을 참조하세요.

1. (선택 사항) 완료 보고서를 생성합니다. 이 보고서를 생성하려면 **완료 보고서 생성**을 선택합니다.

   완료 보고서를 생성하도록 선택한 경우 **실패한 작업만(Failed tasks only)** 또는 **모든 작업(All tasks)**을 선택하고 보고서의 대상 버킷을 제공해야 합니다.

1. **권한** 섹션에서 배치 복제에 필요한 권한이 있는 IAM 역할을 선택해야 합니다. 복제가 실패하는 가장 흔한 이유 중 하나는 제공된 IAM 역할의 사용 권한이 충분하지 않기 때문입니다. 이 역할을 생성하는 방법에 대한 상세 정보는 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md)을(를) 참조하세요.

1. (선택 사항) 배치 복제 작업에 작업 태그를 추가합니다.

1. **다음**을 선택합니다.

1. 작업 구성을 살펴본 후 **작업 만들기**를 선택합니다.

## S3 매니페스트와 AWS CLI 사용
<a name="batch-replication-existing-config-cli"></a>

다음 예제 `create-job` 명령에서는 AWS 계정 `111122223333`에 대해 S3 생성 매니페스트를 사용하여 S3 배치 복제 작업을 생성합니다. 이 예제에서는 기존 객체와 이전에 복제하지 못한 객체를 복제합니다. 복제 상태별 필터링에 대한 자세한 내용은 [배치복제 작업에 대한 매니페스트 지정](s3-batch-replication-batch.md#batch-replication-manifest) 섹션을 참조하세요.

이 명령을 사용하려면 *`user input placeholders`*를 사용자의 정보로 대체합니다. `role/batch-Replication-IAM-policy` IAM 역할을 이전에 만든 IAM 역할로 대체합니다. 자세한 내용은 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md) 섹션을 참조하세요.

```
aws s3control create-job --account-id 111122223333 \ 
--operation '{"S3ReplicateObject":{}}' \ 
--report '{"Bucket":"arn:aws:s3:::amzn-s3-demo-completion-report-bucket",\ 
"Prefix":"batch-replication-report", \ 
"Format":"Report_CSV_20180820","Enabled":true,"ReportScope":"AllTasks"}' \ 
--manifest-generator '{"S3JobManifestGenerator": {"ExpectedBucketOwner": "111122223333", \ 
"SourceBucket": "arn:aws:s3:::amzn-s3-demo-source-bucket", \ 
"EnableManifestOutput": false, "Filter": {"EligibleForReplication": true, \ 
"ObjectReplicationStatuses": ["NONE","FAILED"]}}}' \ 
--priority 1 \ 
--role-arn arn:aws:iam::111122223333:role/batch-Replication-IAM-policy \ 
--no-confirmation-required \ 
--region source-bucket-region
```

**참고**  
복제 소스 버킷과 동일한 AWS 리전에서 작업을 시작해야 합니다.

배치복제 작업을 성공적으로 시작한 후에는 작업 ID를 응답으로 받게 됩니다. 다음 `describe-job` 명령을 사용하여 이 작업을 모니터링할 수 있습니다. 이 명령을 사용하려면 *`user input placeholders`*를 사용자의 정보로 대체합니다.

```
aws s3control describe-job --account-id 111122223333 --job-id job-id --region source-bucket-region
```

## 사용자 제공 매니페스트와 AWS CLI 사용
<a name="batch-replication-existing-config-cli-customer-manifest"></a>

다음 예제에서는 AWS 계정 `111122223333`에 대해 사용자 정의 매니페스트를 사용하여 S3 배치 복제 작업을 생성합니다. 매니페스트의 객체가 버전 지정된 버킷에 있는 경우 객체의 버전 ID를 지정해야 합니다. 매니페스트에 지정된 버전 ID를 가진 객체만 복제됩니다. 매니페스트 생성에 대한 자세한 내용은 [매니페스트 지정](batch-ops-create-job.md#specify-batchjob-manifest) 섹션을 참조하세요.

이 명령을 사용하려면 *`user input placeholders`*를 사용자의 정보로 대체합니다. `role/batch-Replication-IAM-policy` IAM 역할을 이전에 만든 IAM 역할로 대체합니다. 자세한 내용은 [S3 배치 복제를 위한 IAM 역할 구성](s3-batch-replication-policies.md) 섹션을 참조하세요.

```
aws s3control create-job --account-id 111122223333 \ 
--operation '{"S3ReplicateObject":{}}' \
--report '{"Bucket":"arn:aws:s3:::amzn-s3-demo-completion-report-bucket",\
"Prefix":"batch-replication-report", \
"Format":"Report_CSV_20180820","Enabled":true,"ReportScope":"AllTasks"}' \
--manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20180820",\
"Fields":["Bucket","Key","VersionId"]},\
"Location":{"ObjectArn":"arn:aws:s3:::amzn-s3-demo-manifest-bucket/manifest.csv",\
"ETag":"Manifest Etag"}}' \
--priority 1 \
--role-arn arn:aws:iam::111122223333:role/batch-Replication-IAM-policy \
--no-confirmation-required \
--region source-bucket-region
```

**참고**  
복제 소스 버킷과 동일한 AWS 리전에서 작업을 시작해야 합니다.

배치복제 작업을 성공적으로 시작한 후에는 작업 ID를 응답으로 받게 됩니다. 다음 `describe-job` 명령을 사용하여 이 작업을 모니터링할 수 있습니다.

```
aws s3control describe-job --account-id 111122223333 --job-id job-id --region source-bucket-region
```

# 복제 문제 해결
<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 Replication Time Control(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 리소스 이름(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 키 정책에서 복제 역할에 `kms:GenerateDataKey` 및 `kms:Encrypt` 권한을 부여해야 합니다. 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` 명령문 또는 권한 경계로 인해 복제가 실패할 수 있습니다.
  + 소스 또는 대상 계정에 연결된 AWS Organizations 서비스 제어 정책(SCP)의 `Deny` 문으로 인해 복제가 실패할 수 있습니다.
  + 소스 또는 대상 버킷에 연결된 AWS Organizations 리소스 제어 정책(RCP)의 `Deny` 문으로 인해 복제가 실패할 수 있습니다.
+ 객체 복제본이 대상 버킷에 나타나지 않는 경우, 다음 문제로 복제가 차단된 것일 수 있습니다.
  + Amazon S3는 원본 버킷에서 다른 복제 구성이 생성한 복제본을 복제하지 않습니다. 예를 들어 버킷 A에서 버킷 B로, 버킷 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 객체 소유권 설정을 확인해야 합니다.

Batch Operations 작업에 대한 추가 문제 해결 팁은 [S3 Batch Operations 문제 해결](troubleshooting-batch-operations.md) 섹션을 참조하세요.

복제를 설정했는데 객체가 복제되지 않는 경우 AWS re:Post 지식 센터의 [버킷 간에 복제를 설정해도 Amazon S3 객체가 복제되지 않는 이유는 무엇입니까?](https://repost.aws/knowledge-center/s3-troubleshoot-replication)를 참조하세요.

배치 복제 사용 중에 다음 오류 중 하나가 발생할 수 있습니다.
+ 매니페스트 생성에서 필터 기준과 일치하는 키를 찾지 못함.

  이 오류는 다음과 같은 이유로 발생할 수 있습니다.
  + 소스 버킷이 S3 Glacier Flexible Retrieval 또는 S3 Glacier Deep Archive 스토리지 클래스에 저장된 경우.

    이러한 객체에 배치 복제를 사용하려면 먼저 Batch Operations 작업에서 **복원**(`S3InitiateRestoreObjectOperation`) 작업을 사용하여 S3 Standard 스토리지 클래스로 복원해야 합니다. 자세한 내용은 [아카이브된 객체 복원](restoring-objects.md) 및 [객체 복원(배치 작업)](batch-ops-initiate-restore-object.md)을 참조하세요. 객체를 복원한 후에는 배치 복제 작업을 사용하여 객체를 복제할 수 있습니다.
  + 제공된 필터 기준이 소스 버킷의 유효한 객체와 일치하지 않는 경우.

    필터 기준을 확인하고 수정합니다. 예를 들어, 배치 복제 규칙에서 필터 기준은 소스 버킷에서 `Tax/` 접두사가 있는 모든 객체를 찾는 것입니다. 접두사 이름을 잘못 입력한 경우, 슬래시가 끝에만 있는 것이 아니라 처음과 끝에 있는 경우(`/Tax/`) S3 객체를 찾을 수 없습니다. 오류를 해결하려면 복제 규칙에서 접두사를 수정하세요(이 경우 `/Tax/`에서 `Tax/`로).
+ 다음과 같은 이유로 배치 작업 상태가 실패했습니다. 작업 보고서를 보고서 버킷에 기록할 수 없습니다.

  이 오류는 배치 작업에 사용되는 IAM 역할이 작업을 생성할 때 지정한 위치에 완료 보고서를 넣을 수 없을 때 발생합니다. 이 오류를 해결하려면 IAM 역할에 Batch Operations 완료 보고서를 저장하려는 버킷에 대한 `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) 섹션을 참조하세요.

# 지표, 이벤트 알림 및 상태를 통한 복제 모니터링
<a name="replication-metrics"></a>

다음 메커니즘을 통해 라이브 복제 구성과 S3 배치 복제 작업을 모니터링할 수 있습니다.
+ **S3 복제 지표** - S3 복제 지표를 활성화하면 Amazon CloudWatch는 복제 규칙 수준에서 보류 중인 바이트, 보류 중인 작업, 복제 지연 시간을 추적하는 데 사용할 수 있는 지표를 내보냅니다. Amazon S3 콘솔과 Amazon CloudWatch 콘솔을 통해 S3 복제 지표를 볼 수 있습니다. Amazon S3 콘솔에 있는 소스 버킷의 **지표** 탭에서 이러한 지표를 볼 수 있습니다. S3 복제 지표에 대한 자세한 내용은 [S3 복제 지표 사용](repl-metrics.md) 섹션을 참조하세요.
+ **S3 Storage Lens 지표** - S3 복제 지표 외에도 S3 Storage Lens 대시보드에서 제공하는 복제 관련 데이터 보호 지표를 사용할 수 있습니다. 예를 들어, S3 Storage Lens의 무료 지표를 사용하면 소스 버킷에서 복제된 총 바이트 수 또는 소스 버킷에서 복제된 객체 수 등의 지표를 볼 수 있습니다.

  S3 Storage Lens에서 고급 지표를 활성화하여 전체 복제 상태를 감사할 수 있습니다. S3 Storage Lens의 고급 지표를 사용하면 복제 대상이 유효하지 않은 복제 규칙 수를 포함한 여러 유형의 복제 규칙 수를 확인할 수 있습니다.

  S3 Storage Lens에서 복제 지표를 사용하는 방법에 대한 자세한 내용은 [S3 Storage Lens 대시보드에서 복제 지표 보기](viewing-replication-metrics-storage-lens.md) 섹션을 참조하세요.
+ **S3 이벤트 알림** - S3 이벤트 알림은 객체가 대상 AWS 리전으로 복제되지 않거나 특정 임계값 내에서 객체가 복제되지 않은 경우 객체 수준에서 알림을 보낼 수 있습니다. S3 이벤트 알림은 `s3:Replication:OperationFailedReplication`, `s3:Replication:OperationMissedThreshold`, `s3:Replication:OperationReplicatedAfterThreshold`, `s3:Replication:OperationNotTracked` 등의 복제 이벤트 유형을 제공합니다.

  Amazon S3 이벤트는 Amazon Simple Queue Service(Amazon SQS), Amazon Simple Notification Service(Amazon SNS) 또는 AWS Lambda을 통해 사용할 수 있습니다. 자세한 내용은 [Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신](replication-metrics-events.md) 섹션을 참조하세요.
+ **복제 상태 값** - 객체의 복제 상태를 검색할 수도 있습니다. 복제 상태는 복제 중인 객체의 현재 상태를 확인하는 데 도움이 됩니다. 원본 객체의 복제 상태는 `PENDING`, `COMPLETED`, `FAILED` 중 하나를 반환합니다. 복제본의 복제 상태가 `REPLICA`을(를) 반환합니다.

  S3 배치 복제 작업을 만들 때 복제 상태 값을 사용할 수도 있습니다. 예를 들어, 이러한 상태 값을 사용하면 복제된 적이 없거나 복제에 실패한 객체를 복제할 수 있습니다.

  객체의 복제 상태를 검색하는 방법에 대한 자세한 내용은 [복제 상태 정보 가져오기](replication-status.md) 섹션을 참조하세요. 배치 복제에서 이러한 값을 사용하는 방법에 대한 자세한 내용은 [배치 복제 작업에 대한 필터](s3-batch-replication-batch.md#batch-replication-filters) 섹션을 참조하세요.

**Topics**
+ [S3 복제 지표 사용](repl-metrics.md)
+ [S3 Storage Lens 대시보드에서 복제 지표 보기](viewing-replication-metrics-storage-lens.md)
+ [Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신](replication-metrics-events.md)
+ [복제 상태 정보 가져오기](replication-status.md)

# S3 복제 지표 사용
<a name="repl-metrics"></a>

S3 복제 지표는 복제 구성의 복제 규칙에 대한 세부 지표를 제공합니다. 복제 지표를 사용하면 보류 중인 바이트, 보류 중인 작업, 복제 실패 작업, 복제 지연 시간을 추적하여 진행률을 분 단위로 모니터링할 수 있습니다.

**참고**  
S3 복제 지표는 Amazon CloudWatch 사용자 지정 지표와 동일한 요금으로 청구됩니다. 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요.
S3 Replication Time Control을 사용하는 경우 Amazon CloudWatch는 각 복제 규칙에서 S3 RTC를 활성화한 후 15분이 지나면 복제 지표 보고를 시작합니다.

S3 Replication Time Control(S3 RTC)을 활성화하면 S3 복제 지표가 자동으로 설정됩니다. [규칙을 만들거나 편집](replication-walkthrough1.md)하는 동안 S3 RTC와 독립적으로 S3 복제 지표를 활성화할 수도 있습니다. S3 RTC에는 SLA(서비스 수준 계약) 및 누락된 임계값에 대한 알림 같은 기타 기능이 포함되어 있습니다. 자세한 내용은 [S3 Replication Time Control을 사용하여 규정 준수 요구 사항 충족](replication-time-control.md) 섹션을 참조하세요.

S3 복제 지표가 활성화되면 Amazon S3는 다음 지표를 Amazon CloudWatch에 게시합니다. CloudWatch 지표를 전송하고자 최선을 다할 것입니다.


| 지표 이름 | 지표 설명 | 이 지표는 어떤 객체에 적용되나요? | 이 지표는 어느 리전에 게시되나요? | 대상 버킷이 삭제된 경우에도 지표가 계속 게시되나요? | 복제가 이루어지지 않는 경우에도 지표가 계속 게시되나요? | 
| --- | --- | --- | --- | --- | --- | 
| **복제 보류 중인 바이트** |  지정된 복제 규칙에 대해 복제 보류 중인 객체의 총 바이트 수입니다.  | 이 지표는 S3 Cross-Region Replication(S3 CRR) 또는 S3 Same-Region Replication(S3 SRR)으로 복제되는 새 객체에만 적용됩니다. | 이 지표는 대상 버킷의 리전에 게시됩니다. | 아니요 | 예 | 
| **복제 지연 시간** |  지정된 복제 규칙에 대해 복제 대상 버킷이 소스 버킷보다 늦어지는 최대 시간(초)입니다.  | 이 지표는 S3 CRR 또는 S3 SRR로 복제된 새 객체에만 적용됩니다. | 이 지표는 대상 버킷의 리전에 게시됩니다. | 아니요 | 예 | 
| **복제 보류 중인 작업** |  지정된 복제 규칙에 대해 복제 보류 중인 작업 수입니다. 이 지표는 객체, 삭제 마커, 태그, 액세스 제어 목록(ACL), S3 객체 잠금과 관련된 작업을 추적합니다.  | 이 지표는 S3 CRR 또는 S3 SRR로 복제된 새 객체에만 적용됩니다. | 이 지표는 대상 버킷의 리전에 게시됩니다. | 아니요 | 예 | 
| **복제 실패 작업** |  지정된 복제 규칙에 대해 복제에 실패한 작업 수입니다. 이 지표는 객체, 삭제 마커, 태그, 액세스 제어 목록(ACL), Object Lock과 관련된 작업을 추적합니다. **복제 실패 작업**은 분 간격으로 집계된 S3 복제 실패를 추적합니다. 복제에 실패한 특정 객체와 실패 이유를 파악하려면 Amazon S3 이벤트 알림에서 `OperationFailedReplication` 이벤트를 구독하세요. 자세한 내용은 [Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신](replication-metrics-events.md) 섹션을 참조하세요.  |  이 지표는 S3 CRR 또는 S3 SRR로 복제된 새 객체와 S3 배치 복제를 통해 복제된 기존 객체를 모두 추적합니다.  S3 배치 복제 작업이 전혀 실행되지 않으면 지표가 Amazon CloudWatch로 전송되지 않습니다. 예를 들어, S3 배치 복제 작업을 실행하는 데 필요한 권한이 없거나 복제 구성의 태그 또는 접두사가 일치하지 않는 경우 작업이 실행되지 않습니다.   | 이 지표는 소스 버킷의 리전에 게시됩니다. | 예 | 아니요 | 

CloudWatch에서 이러한 지표를 사용하는 방법에 대한 자세한 내용은 [CloudWatch의 S3 복제 지표](metrics-dimensions.md#s3-cloudwatch-replication-metrics) 섹션을 참조하세요.

## S3 복제 지표 활성화
<a name="enabling-replication-metrics"></a>

새 복제 규칙이나 기존 복제 규칙과 함께 S3 복제 지표를 사용할 수 있습니다. 복제 규칙 생성에 대한 전체 지침은 [동일한 계정에서 버킷 복제 구성](replication-walkthrough1.md) 섹션을 참조하세요. 복제 규칙을 전체 S3 버킷에 적용하거나 특정 접두사 또는 태그가 있는 Amazon S3 객체에 적용하도록 선택할 수 있습니다.

이 주제에서는 소스 및 대상 버킷을 동일하거나 서로 다른 AWS 계정이 소유한 경우에 복제 구성에서 S3 복제 지표를 사용하는 지침을 제공합니다.

AWS Command Line Interface(AWS CLI)를 사용하여 복제 지표를 활성화하려면 `Metrics` 사용 상태의 소스 버킷에 복제 구성을 추가해야 합니다. 이 예시 구성에서 접두사 `Tax` 아래의 객체는 대상 버킷 `amzn-s3-demo-bucket`에 복제되고 해당 객체에 대한 지표가 생성됩니다.

```
{
    "Rules": [
        {
            "Status": "Enabled",
            "Filter": {
                "Prefix": "Tax"
            },
            "Destination": {
                "Bucket": "arn:aws:s3:::amzn-s3-demo-bucket",
                "Metrics": {
                    "Status": "Enabled"
                }
            },
            "Priority": 1
        }
    ],
    "Role": "IAM-Role-ARN"
}
```

## 복제 지표 보기
<a name="viewing-replication-metrics"></a>

Amazon S3 콘솔에 있는 소스 범용 버킷의 **지표** 탭에서 S3 복제 지표를 볼 수 있습니다. 이러한 Amazon CloudWatch 지표는 Amazon CloudWatch 콘솔에서도 사용할 수 있습니다. S3 복제 지표를 활성화하면 Amazon CloudWatch는 복제 규칙 수준에서 보류 중인 바이트, 보류 중인 작업, 복제 지연 시간을 추적하는 데 사용할 수 있는 지표를 내보냅니다.

S3 복제 지표는 Amazon S3 콘솔 또는 Amazon S3 REST API를 사용하여 S3 Replication Time Control(S3 RTC)을 통해 복제를 활성화하면 자동으로 설정됩니다. [규칙을 만들거나 편집](replication-walkthrough1.md)하는 동안 S3 RTC와 독립적으로 S3 복제 지표를 활성화할 수도 있습니다.

S3 Replication Time Control을 사용하는 경우 Amazon CloudWatch는 각 복제 규칙에서 S3 RTC를 활성화한 후 15분이 지나면 복제 지표 보고를 시작합니다. 자세한 내용은 [S3 복제 지표 사용](#repl-metrics) 섹션을 참조하세요.

복제 지표는 복제 구성의 규칙 ID를 추적합니다. 복제 규칙 ID는 접두사, 태그 또는 둘의 조합에 대해 고유할 수 있습니다.

 Amazon S3용 CloudWatch 지표에 대한 자세한 내용은 [Amazon CloudWatch를 사용한 지표 모니터링](cloudwatch-monitoring.md) 섹션을 참조하십시오.

**사전 조건**  
S3 복제 지표가 활성화된 복제 규칙을 만듭니다. 자세한 내용은 [S3 복제 지표 활성화](#enabling-replication-metrics) 섹션을 참조하세요.

**소스 버킷의 **지표** 탭을 통해 S3 복제 지표를 보려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **범용 버킷**을 선택합니다.

1. 버킷 목록에서 요청 지표를 구성하려는 객체가 있는 소스 버킷의 이름을 선택합니다.

1. **지표** 탭을 선택합니다.

1. **복제 지표**에서 지표를 보려는 복제 규칙을 선택합니다.

1. **차트 표시**를 선택합니다.

   Amazon S3는 선택한 규칙에 대한 **복제 지연 시간**, **복제 보류 중인 바이트**, **복제 보류 중인 작업**, **복제 실패 작업** 차트를 표시합니다.

# S3 Storage Lens 대시보드에서 복제 지표 보기
<a name="viewing-replication-metrics-storage-lens"></a>

[S3 복제 지표](repl-metrics.md) 외에도 S3 Storage Lens에서 제공하는 복제 관련 데이터 보호 지표를 사용할 수 있습니다. S3 스토리지 렌즈는 조직 전반에서 객체 스토리지 사용 및 활동에 대한 가시성을 확보하는 데 사용할 수 있는 클라우드 스토리지 분석 기능입니다. 자세한 내용은 [Using S3 Storage Lens to protect your data(S3 스토리지 렌즈를 사용한 데이터 보호)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-data-protection.html#storage-lens-data-protection-replication-rule)를 참조하세요.

S3 Storage Lens에는 무료 지표와 고급 지표 및 권장 사항이라는 두 계층의 지표가 있는데, 추가 비용을 지불하고 업그레이드할 수 있습니다. 고급 지표 및 권장 사항을 통해 추가 지표 및 기능에 액세스하여 스토리지에 대한 인사이트를 얻을 수 있습니다. S3 스토리지 렌즈 요금에 대한 자세한 내용은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing)을 참조하십시오.

S3 Storage Lens의 무료 지표를 사용하면 소스 버킷에서 복제된 총 바이트 수 또는 소스 버킷에서 복제된 객체 수 등의 지표를 볼 수 있습니다.

S3 Storage Lens에서 고급 지표를 활성화하여 전체 복제 상태를 감사할 수 있습니다. S3 Storage Lens의 고급 지표를 사용하면 복제 대상이 유효하지 않은 복제 규칙 수를 포함한 여러 유형의 복제 규칙 수를 확인할 수 있습니다.

각 계층에 있는 복제 지표를 포함한 S3 Storage Lens 지표의 전체 목록은 [S3 Storage Lens 지표 용어집](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_replication.html)을 참조하세요.

**사전 조건**  
[라이브 복제 구성](replication-how-setup.md) 또는 [S3 배치 복제 작업](s3-batch-replication-batch.md)을 만듭니다.

**Amazon S3 Storage Lens에서 복제 지표를 보려면**

1. S3 Storage Lens 대시보드를 만듭니다. 단계별 지침은 [S3 콘솔 사용](storage_lens_creating_dashboard.md#storage_lens_console_creating)섹션을 참조하세요.

1. (선택 사항) 대시보드 설정 중에 모든 S3 Storage Lens 복제 지표를 보려면 **고급 지표 및 권장 사항**을 선택한 다음 **고급 데이터 보호 지표**를 선택합니다. 지표의 전체 목록은 [S3 Storage Lens 지표 용어집](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_replication.html)을 참조하세요.

   고급 지표 및 권장 사항을 활성화하면 복제 구성을 더 자세히 파악할 수 있습니다. 예를 들어, S3 Storage Lens 복제 규칙 수 지표를 사용하여 복제용으로 구성된 버킷에 대한 자세한 정보를 얻을 수 있습니다. 이 정보에는 버킷 및 리전 내부 및 리전 간의 복제 규칙이 포함됩니다. 자세한 내용은 [각 버킷의 총 복제 규칙 수 계산](storage-lens-data-protection.md#storage-lens-data-protection-replication-rule) 섹션을 참조하세요.

1. 대시보드를 만든 후 대시보드를 열고 **버킷** 탭을 선택합니다.

1. 아래로 스크롤하여 **Buckets**(버킷) 섹션을 찾습니다. **Metrics categories**(지표 범주)에서 **Data protection**(데이터 보호)을 선택합니다. 그런 다음 **Summary**(요약)를 지웁니다.

1. 복제 지표만 표시하도록 **버킷** 목록을 필터링하려면 기본 설정 아이콘(![\[The preferences icon in the S3 Storage Lens dashboard.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/preferences.png))을 선택합니다.

1. 복제 지표만 선택된 상태가 될 때까지 모든 데이터 보호 지표에 대한 토글을 지웁니다.

1. (선택 사항) **Page size**(페이지 크기)에서 목록에 표시할 버킷 수를 선택합니다.

1. **계속**을 선택합니다.

# Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신
<a name="replication-metrics-events"></a>

복제 구성에서 S3 복제 지표를 활성화한 경우 객체가 대상 AWS 리전으로 복제되지 않을 때 알리도록 Amazon S3 이벤트 알림을 설정할 수 있습니다. 복제 구성에서 S3 Replication Time Control(S3 RTC)을 활성화한 경우, 복제에 대한 15분 S3 RTC 임계값 내에 객체가 복제되지 않을 때도 알림을 받을 수 있습니다.

다음 `Replication` 이벤트 유형을 사용하여 보류 중인 바이트, 보류 중인 작업, 복제 지연 시간을 추적하면서 복제 이벤트의 진행 상황을 분 단위로 모니터링할 수 있습니다. S3 복제 지표에 대한 자세한 내용은 [S3 복제 지표 사용](repl-metrics.md) 섹션을 참조하세요.
+ `s3:Replication:OperationFailedReplication` 이벤트 유형은 복제에 적합한 객체가 복제에 실패할 때 알려줍니다.
+ `s3:Replication:OperationMissedThreshold` 이벤트 유형은 S3 RTC를 사용하는 복제 대상 객체가 복제 임계값인 15분을 초과하면 알려줍니다.
+ `s3:Replication:OperationReplicatedAfterThreshold` 이벤트 유형은 S3 RTC를 사용하는 복제 대상 객체가 15분 임계값 이후에 복제되면 알려줍니다.
+ `s3:Replication:OperationNotTracked` 이벤트 유형은 라이브 복제 대상 객체(동일 리전 복제[SRR] 또는 교차 리전 복제[CRR])가 더 이상 복제 지표로 추적되지 않으면 알려줍니다.

지원되는 모든 복제 이벤트 유형에 대한 자세한 설명은 [SQS, SNS 및 Lambda에 지원되는 이벤트 유형](notification-how-to-event-types-and-destinations.md#supported-notification-event-types) 섹션을 참조하세요.

S3 이벤트 알림에서 캡처한 실패 코드 목록은 [Amazon S3 복제 실패 이유](#replication-failure-codes) 섹션을 참조하세요.

Amazon Simple Queue Service(Amazon SQS), Amazon Simple Notification Service(Amazon SNS) 또는 AWS Lambda를 통해 S3 이벤트 알림을 받을 수 있습니다. 자세한 내용은 [Amazon S3 이벤트 알림](EventNotifications.md) 섹션을 참조하세요.

Amazon S3 이벤트 알림을 구성하는 방법에 대한 지침은 [이벤트 알림 사용 설정](how-to-enable-disable-notification-intro.md)를 참조하세요.

**참고**  
이벤트 알림뿐만 아니라 S3 복제 지표도 활성화해야 합니다. 자세한 내용은 [S3 복제 지표 활성화](repl-metrics.md#enabling-replication-metrics) 섹션을 참조하세요.

다음은 Amazon S3에서 `s3:Replication:OperationFailedReplication` 이벤트를 게시하기 위해 전송하는 메시지의 예입니다. 자세한 내용은 [이벤트 메시지 구조](notification-content-structure.md) 섹션을 참조하세요.

```
{
  "Records": [
    {
      "eventVersion": "2.2",
      "eventSource": "aws:s3",
      "awsRegion": "us-east-1",
      "eventTime": "2024-09-05T21:04:32.527Z",
      "eventName": "Replication:OperationFailedReplication",
      "userIdentity": {
        "principalId": "s3.amazonaws.com"
      },
      "requestParameters": {
        "sourceIPAddress": "s3.amazonaws.com"
      },
      "responseElements": {
        "x-amz-request-id": "123bf045-2b4b-4ca8-a211-c34a63c59426",
        "x-amz-id-2": "12VAWNDIHnwJsRhTccqQTeAPoXQmRt22KkewMV8G3XZihAuf9CLDdmkApgZzudaIe2KlLfDqGS0="
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "ReplicationEventName",
        "bucket": {
          "name": "amzn-s3-demo-bucket1",
          "ownerIdentity": {
            "principalId": "111122223333"
          },
          "arn": "arn:aws:s3:::amzn-s3-demo-bucket1"
        },
        "object": {
          "key": "replication-object-put-test.png",
          "size": 520080,
          "eTag": "e12345ca7e88a38428305d3ff7fcb99f",
          "versionId": "abcdeH0Xp66ep__QDjR76LK7Gc9X4wKO",
          "sequencer": "0066DA1CBF104C0D51"
        }
      },
      "replicationEventData": {
        "replicationRuleId": "notification-test-replication-rule",
        "destinationBucket": "arn:aws:s3:::amzn-s3-demo-bucket2",
        "s3Operation": "OBJECT_PUT",
        "requestTime": "2024-09-05T21:03:59.168Z",
        "failureReason": "AssumeRoleNotPermitted"
      }
    }
  ]
}
```

## Amazon S3 복제 실패 이유
<a name="replication-failure-codes"></a>

다음 테이블에는 Amazon S3 Replication 실패 이유가 나열되어 있습니다. Amazon S3 이벤트 알림이 포함된 `s3:Replication:OperationFailedReplication` 이벤트를 수신한 후 `failureReason` 값을 보면 그 이유를 알 수 있습니다.

S3 배치 복제 완료 보고서에서도 이러한 실패 이유를 확인할 수 있습니다. 자세한 내용은 [배치 복제 완료 보고서](s3-batch-replication-batch.md#batch-replication-completion-report) 섹션을 참조하세요.


| 복제 실패 이유 | 설명 | 
| --- | --- | 
| `AssumeRoleNotPermitted` | Amazon S3가 복제 구성 또는 배치 작업에 지정된 AWS Identity and Access Management(IAM) 역할을 맡을 수 없습니다. | 
| `DstBucketInvalidRegion` | 대상 버킷의 위치가 배치 작업에 지정된 AWS 리전과 동일하지 않습니다. 이 오류는 배치 복제에만 해당합니다. | 
| `DstBucketNotFound` | Amazon S3가 복제 구성에 지정된 대상 버킷을 찾을 수 없습니다. | 
| `DstBucketObjectLockConfigMissing` | 객체 잠금이 활성화된 소스 버킷에서 객체를 복제하려면 대상 버킷에도 객체 잠금이 활성화되어 있어야 합니다. 이 오류는 대상 버킷에서 객체 잠금이 활성화되지 않았을 수 있다는 것을 나타냅니다. 자세한 내용은 [객체 잠금 고려 사항](object-lock-managing.md) 섹션을 참조하세요. | 
| `DstBucketUnversioned` | S3 대상 버킷에서 버전 관리가 활성화되지 않았습니다. S3 복제로 객체를 복제하려면 대상 버킷에서 버전 관리를 활성화합니다. | 
| `DstDelObjNotPermitted` | Amazon S3가 대상 버킷으로 삭제 마커를 복제할 수 없습니다. 대상 버킷에 대한 `s3:ReplicateDelete` 권한이 누락되었을 수 있습니다. | 
| `DstKmsKeyInvalidState` | 대상 버킷의 AWS Key Management Service(AWS KMS) 키가 유효하지 않은 상태입니다. 필요한 AWS KMS 키를 검토하고 활성화합니다. AWS KMS 키 관리에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS 키의 키 상태](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)를 참조하세요. | 
| `DstKmsKeyNotFound` | 복제 구성에서 대상 버킷에 대해 구성된 AWS KMS 키가 존재하지 않습니다. | 
| `DstMultipartCompleteNotPermitted` | Amazon S3가 대상 버킷에 있는 객체의 멀티파트 업로드를 완료할 수 없습니다. 대상 버킷에 대한 `s3:ReplicateObject` 권한이 누락되었을 수 있습니다. | 
| `DstMultipartInitNotPermitted` | Amazon S3가 대상 버킷으로 객체의 멀티파트 업로드를 시작할 수 없습니다. 대상 버킷에 대한 `s3:ReplicateObject` 권한이 누락되었을 수 있습니다. | 
| `DstMultipartUploadNotPermitted` | Amazon S3가 대상 버킷으로 멀티파트 업로드 객체를 업로드할 수 없습니다. 대상 버킷에 대한 `s3:ReplicateObject` 권한이 누락되었을 수 있습니다. | 
| `DstObjectHardDeleted` | S3 배치 복제가 대상 버킷에서 객체의 버전 ID로 삭제된 객체를 다시 복제하는 것을 지원하지 않습니다. 이 오류는 배치 복제에만 해당합니다. | 
| `DstPutAclNotPermitted` | Amazon S3가 대상 버킷으로 객체 액세스 제어 목록(ACL)을 복제할 수 없습니다. 대상 버킷에 대한 `s3:ReplicateObject` 권한이 누락되었을 수 있습니다. | 
| `DstPutLegalHoldNotPermitted` | Amazon S3가 변경 불가능한 객체를 복제하는 동안 대상 객체에 Object Lock 법적 보류를 적용할 수 없습니다. 대상 버킷에 대한 `s3:PutObjectLegalHold` 권한이 누락되었을 수 있습니다. 자세한 내용은 [법적 보존](object-lock.md#object-lock-legal-holds) 섹션을 참조하세요. | 
|  `DstPutObjectNotPermitted` | Amazon S3가 대상 버킷으로 객체를 복제할 수 없습니다. 이는 대상 버킷에 필요한 권한(`s3:ReplicateObject` 또는 `s3:ObjectOwnerOverrideToBucketOwner` 권한)이 없거나 AWS KMS 키 정책에서 소스 버킷의 복제 역할이 대상 버킷에서 AWS KMS 키(`kms:Decrypt` 및 `kms:GenerateDataKey*` 작업)를 사용하도록 허용하지 않는 경우에 발생할 수 있습니다. | 
|  `DstPutRetentionNotPermitted` | Amazon S3가 변경 불가능한 객체를 복제하는 동안 대상 객체에 보존 기간을 적용할 수 없습니다. 대상 버킷에 대한 `s3:PutObjectRetention` 권한이 누락되었을 수 있습니다. | 
| `DstPutTaggingNotPermitted` | Amazon S3가 대상 버킷으로 객체 태그를 복제할 수 없습니다. 대상 버킷에 대한 `s3:ReplicateObject` 권한이 누락되었을 수 있습니다. | 
| `DstVersionNotFound ` | Amazon S3가 대상 버킷에서 메타데이터를 복제해야 하는 필요한 객체 버전을 찾을 수 없습니다. | 
| `InitiateReplicationNotPermitted` | Amazon S3가 객체에 복제를 시작할 수 없습니다. 배치 작업에 대한 `s3:InitiateReplication` 권한이 누락되었을 수 있습니다. 이 오류는 배치 복제에만 해당합니다. | 
| `SrcBucketInvalidRegion` | 소스 버킷의 위치가 배치 작업에 지정된 AWS 리전과 동일하지 않습니다. 이 오류는 배치 복제에만 해당합니다. | 
| `SrcBucketNotFound` | Amazon S3가 소스 버킷을 찾을 수 없습니다. | 
| `SrcBucketReplicationConfigMissing` | Amazon S3가 소스 버킷의 복제 구성을 찾을 수 없습니다. | 
| `SrcGetAclNotPermitted` |  Amazon S3가 복제를 위해 소스 버킷의 객체에 액세스할 수 없습니다. 소스 버킷 객체에 대한 `s3:GetObjectVersionAcl` 권한이 누락되었을 수 있습니다. 소스 버킷의 객체는 버킷 소유자가 소유하고 있어야 합니다. ACL이 사용 설정되어 있는 경우, 객체 소유권이 버킷 소유자 기본 설정 또는 객체 작성자로 설정되어 있는지 확인합니다. 객체 소유권이 버킷 소유자 선호로 설정된 경우, 버킷 소유자가 객체 소유자가 되려면 소스 버킷 객체에 `bucket-owner-full-control` ACL이 있어야 합니다. 소스 계정은 객체 소유권을 버킷 소유자 적용으로 설정하고 ACL을 사용 중지하여 버킷의 모든 객체에 대한 소유권을 가져올 수 있습니다.  | 
| `SrcGetLegalHoldNotPermitted` | Amazon S3가 S3 객체 잠금 법적 보존 정보에 액세스할 수 없습니다. | 
| `SrcGetObjectNotPermitted` | Amazon S3가 복제를 위해 소스 버킷의 객체에 액세스할 수 없습니다. 소스 버킷에 대한 `s3:GetObjectVersionForReplication` 권한이 누락되었을 수 있습니다. | 
| `SrcGetRetentionNotPermitted` | Amazon S3가 S3 객체 잠금 보존 기간 정보에 액세스할 수 없습니다. | 
| `SrcGetTaggingNotPermitted` | Amazon S3가 소스 버킷의 객체 태그 정보에 액세스할 수 없습니다. 소스 버킷에 대한 `s3:GetObjectVersionTagging` 권한이 누락되었을 수 있습니다. | 
| `SrcHeadObjectNotPermitted` | Amazon S3가 소스 버킷에서 객체 메타데이터를 검색할 수 없습니다. 소스 버킷에 대한 `s3:GetObjectVersionForReplication` 권한이 누락되었을 수 있습니다. | 
| `SrcKeyNotFound` | Amazon S3가 복제할 소스 객체 키를 찾을 수 없습니다. 복제가 완료되기 전에 소스 객체가 삭제되었을 수 있습니다. | 
| `SrcKmsKeyInvalidState` | 소스 버킷의 AWS KMS 키가 유효하지 않은 상태입니다. 필요한 AWS KMS 키를 검토하고 활성화합니다. AWS KMS 키 관리에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS 키의 키 상태](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)를 참조하세요. | 
| `SrcObjectNotEligible` | 일부 객체가 복제 요건을 충족하지 않습니다. 이는 객체의 스토리지 클래스 또는 객체 태그가 복제 구성과 일치하지 않기 때문일 수 있습니다. | 
| `SrcObjectNotFound` | 소스 객체가 존재하지 않습니다. | 
| `SrcReplicationNotPending` | Amazon S3에서 이미 이 객체를 복제했습니다. 이 객체가 더 이상 복제 보류 중이 아닙니다. | 
| `SrcVersionNotFound` | Amazon S3가 복제할 소스 객체 버전을 찾을 수 없습니다. 복제가 완료되기 전에 소스 객체 버전이 삭제되었을 수 있습니다. | 

### 관련 주제
<a name="replication-metrics-related-topics"></a>

[라이브 복제에 대한 권한 설정](setting-repl-config-perm-overview.md)

[복제 문제 해결](replication-troubleshoot.md)

# 복제 상태 정보 가져오기
<a name="replication-status"></a>

복제 상태는 복제 중인 객체의 현재 상태를 확인하는 데 도움이 될 수 있습니다. 원본 객체의 복제 상태는 `PENDING`, `COMPLETED`, `FAILED` 중 하나를 반환합니다. 복제본의 복제 상태가 `REPLICA`을(를) 반환합니다.

S3 배치 복제 작업을 만들 때 복제 상태 값을 사용할 수도 있습니다. 예를 들어, 이러한 상태 값을 사용하면 복제된 적이 없거나 복제에 실패한 객체를 복제할 수 있습니다. 배치 복제에서 이러한 값을 사용하는 방법에 대한 자세한 내용은 [배치 복제 작업에서 복제 상태 정보 사용](#replication-status-batch-replication) 섹션을 참조하세요.

**Topics**
+ [복제 상태 개요](#replication-status-overview)
+ [여러 대상 버킷에 복제하는 경우 복제 상태](#replication-status-multiple-destinations)
+ [Amazon S3 복제본 수정 동기화가 사용 설정된 경우 복제 상태](#replication-status-replica-mod-syn)
+ [배치 복제 작업에서 복제 상태 정보 사용](#replication-status-batch-replication)
+ [복제 상태 찾기](#replication-status-usage)

## 복제 상태 개요
<a name="replication-status-overview"></a>

복제에는 복제를 구성하는 소스 버킷과 Amazon S3가 객체를 복제하는 하나 이상의 대상 버킷이 있습니다. 이러한 버킷에서 객체(`GetObject` 사용) 또는 객체 메타데이터(`HeadObject` 사용)를 요청하면 Amazon S3는 응답에서 `x-amz-replication-status` 헤더를 반환합니다.
+ 원본 버킷에서 객체를 요청하면 요청한 객체가 복제에 적합한 경우 Amazon S3가 `x-amz-replication-status` 헤더를 반환합니다.

  예를 들어 복제 구성에 객체 접두사 `TaxDocs`를 지정해 키 이름 접두사가 `TaxDocs`인 객체만 복제하도록 Amazon S3에 지시한다고 가정해 봅시다. 이 키 이름 접두사(예: `TaxDocs/document1.pdf`)를 갖는 객체를 업로드하면 모두 복제됩니다. 이 키 이름 접두사를 사용한 객체 요청에 대해 Amazon S3는 객체 복제 상태를 표시하는 값 `x-amz-replication-status`, `PENDING` 또는 `COMPLETED`가 포함된 `FAILED` 헤더를 반환합니다.
**참고**  
객체를 업로드한 후 객체 복제가 실패할 경우 복제를 재시도할 수 없습니다. 객체를 다시 업로드하거나 S3 배치 복제를 사용하여 실패한 객체를 복제해야 합니다. 배치 복제 사용 방법에 대한 자세한 내용은 [배치 복제를 사용한 기존 객체 복제](s3-batch-replication-batch.md) 섹션을 참조하세요.  
복제 역할 권한, AWS Key Management Service(AWS KMS) 권한 또는 버킷 권한 누락과 같은 문제의 경우 객체가 `FAILED` 상태로 전환됩니다. 버킷 또는 리전을 사용할 수 없는 경우와 같은 일시적인 실패의 경우 복제 상태는 `FAILED`로 전환되지 않고 `PENDING` 상태 그대로 유지됩니다. 리소스가 다시 온라인 상태가 되면 Amazon S3는 해당 객체 복제를 재개합니다.
+ 대상 버킷으로부터 객체를 요청하면 해당 객체가 Amazon S3에서 생성한 복제본인 경우 Amazon S3는 값이 `x-amz-replication-status`인 `REPLICA` 헤더를 반환합니다.

**참고**  
복제가 활성화된 소스 버킷에서 객체를 삭제하려면 먼저 해당 객체의 복제 상태를 통해 객체가 복제되었는지 확인해야 합니다.  
소스 버킷에서 S3 수명 주기 구성이 활성화된 경우 객체 상태가 `COMPLETED` 또는 `FAILED`로 표시될 때까지 Amazon S3는 수명 주기 작업을 보류합니다.

## 여러 대상 버킷에 복제하는 경우 복제 상태
<a name="replication-status-multiple-destinations"></a>

객체를 여러 대상 버킷에 복제하면 `x-amz-replication-status` 헤더가 다르게 작동합니다. 소스 객체의 헤더는 복제가 모든 대상에 대해 성공하는 경우에만 `COMPLETED` 값을 반환합니다. 헤더는 복제가 모든 대상에 대해 완료될 때까지 `PENDING` 값으로 유지됩니다. 하나 이상의 대상이 복제에 실패하면 헤더가 `FAILED`을(를) 반환합니다.

## Amazon S3 복제본 수정 동기화가 사용 설정된 경우 복제 상태
<a name="replication-status-replica-mod-syn"></a>

복제 규칙에서 Amazon S3 복제본 수정 동기화를 사용 설정하면 복제본은 `REPLICA` 이외의 상태를 보고할 수 있습니다. 메타데이터 변경 사항이 복제 과정에 있는 경우 `x-amz-replication-status` 헤더가 `PENDING`을 반환합니다. 복제본 수정 동기화가 메타데이터 복제에 실패하면 헤더가 `FAILED`를 반환합니다. 메타데이터가 올바르게 복제되면 복제본이 헤더 `REPLICA`를 반환합니다.

## 배치 복제 작업에서 복제 상태 정보 사용
<a name="replication-status-batch-replication"></a>

배치 복제 작업을 만들 때 필요에 따라 객체 생성 날짜 및 복제 상태와 같은 추가 필터를 지정하여 작업 범위를 줄일 수 있습니다.

다음 값 중 하나 이상을 제공하여 `ObjectReplicationStatuses` 값을 기반으로 복제할 객체를 필터링할 수 있습니다.
+ `"NONE"` - Amazon S3가 이전에 객체 복제를 시도한 적이 없음을 나타냅니다.
+ `"FAILED"` - Amazon S3가 이전에 객체 복제를 시도했지만 실패했음을 나타냅니다.
+ `"COMPLETED"` - Amazon S3가 이전에 객체를 성공적으로 복제했음을 나타냅니다.
+ `"REPLICA"` - Amazon S3가 다른 소스에서 복제한 복제본 객체임을 나타냅니다.

배치 복제에서 이러한 복제 상태 값을 사용하는 방법에 대한 자세한 내용은 [배치 복제 작업에 대한 필터](s3-batch-replication-batch.md#batch-replication-filters) 섹션을 참조하세요.

## 복제 상태 찾기
<a name="replication-status-usage"></a>

버킷에 있는 객체의 복제 상태를 가져오기 위해 Amazon S3 인벤토리 도구를 사용할 수 있습니다. Amazon S3는 인벤토리 구성에서 사용자가 지정한 대상 버킷으로 CSV 파일을 전송합니다. 또한 Amazon Athena를 사용하여 인벤토리 보고서의 복제 상태를 쿼리할 수도 있습니다. Amazon S3 인벤토리에 대한 자세한 정보는 [S3 Inventory를 사용한 데이터 카탈로그화 및 분석](storage-inventory.md) 섹션을 참조하세요.

Amazon S3 콘솔, AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용하여 객체 복제 상태를 확인할 수도 있습니다.

### S3 콘솔 사용
<a name="replication-status-console"></a>

Amazon S3 콘솔의 객체 세부 정보 페이지에서 객체의 복제 상태를 볼 수 있습니다.

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택합니다.

1. **범용 버킷** 목록에서 복제 소스 버킷의 이름을 선택합니다.

1. **객체(Objects)** 목록에서 객체 이름을 선택합니다. 객체 세부 정보 페이지가 나타납니다.

1. **속성** 탭에서 아래로 스크롤하여 **객체 관리 개요** 섹션을 찾습니다. **관리 구성**에서 **복제 상태** 아래의 값을 확인합니다.

### AWS CLI 사용
<a name="replication-status-cli"></a>

다음 예제와 같이 AWS Command Line Interface(AWS CLI) `head-object` 명령을 사용하여 객체 메타데이터를 검색합니다. `amzn-s3-demo-source-bucket1`을 복제 소스 버킷 이름으로, 다른 `user input placeholders`를 사용자의 정보로 대체합니다.

```
aws s3api head-object --bucket amzn-s3-demo-source-bucket1 --key object-key --version-id object-version-id           
```

이 명령은 다음의 응답 예와 같이 `ReplicationStatus`가 포함된 객체 메타데이터를 반환합니다.

```
{
   "AcceptRanges":"bytes",
   "ContentType":"image/jpeg",
   "LastModified":"Mon, 23 Mar 2015 21:02:29 GMT",
   "ContentLength":3191,
   "ReplicationStatus":"COMPLETED",
   "VersionId":"jfnW.HIMOfYiD_9rGbSkmroXsFj3fqZ.",
   "ETag":"\"6805f2cfc46c0f04559748bb039d69ae\"",
   "Metadata":{

   }
}
```

### AWS SDK 사용
<a name="replication-status-sdk"></a>

다음 코드 조각은 각각 AWS SDK for Java 및 AWS SDK for .NET를 사용하여 복제 상태를 가져옵니다.

------
#### [ Java ]

```
GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest(bucketName, key);
ObjectMetadata metadata = s3Client.getObjectMetadata(metadataRequest);

System.out.println("Replication Status : " + metadata.getRawMetadataValue(Headers.OBJECT_REPLICATION_STATUS));
```

------
#### [ .NET ]

```
GetObjectMetadataRequest getmetadataRequest = new GetObjectMetadataRequest
    {
         BucketName = sourceBucket,
         Key        = objectKey
    };

GetObjectMetadataResponse getmetadataResponse = client.GetObjectMetadata(getmetadataRequest);
Console.WriteLine("Object replication status: {0}", getmetadataResponse.ReplicationStatus);
```

------