

# 라이브 복제 설정 개요
<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) 섹션을 참조하세요.