

# 암호화(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) 섹션을 참조하세요. 복제 구성을 적절히 수정해야 합니다.

 