같은 계정의 버킷 복제 구성하기
같은 계정의 버킷 복제 구성하기
라이브 복제(Live replication)는 같은 리전이나 다른 AWS 리전에 있는 일반 목적 버킷(general purpose bucket) 간에 객체를 자동으로 비동기 복사하는 기능이에요. 새로 만들어진 객체와 객체 업데이트를 소스 버킷에서 대상 버킷으로 복사해 주죠. 이 기능에 대한 자세한 내용은 리전 내·리전 간 객체 복제 문서를 참고하세요.
복제를 구성할 때는 소스 버킷에 복제 규칙을 추가해요. 복제 규칙은 어떤 소스 버킷 객체를 복제할지, 복제된 객체를 어느 대상 버킷에 저장할지 정의합니다. 버킷의 모든 객체를 복제하는 규칙을 만들 수도 있고, 특정 키 이름 접두사나 객체 태그를 기준으로 원하는 객체만 고를 수도 있어요. 대상 버킷은 소스 버킷과 같은 계정에 있을 수도 있고, 다른 계정에 있을 수도 있습니다.
특정 객체 버전 ID를 지정해서 삭제하면 Amazon S3는 소스 버킷에서 그 객체 버전을 삭제해요. 하지만 그 삭제를 대상 버킷에는 복제하지 않아요. 다시 말해 대상 버킷에서 똑같은 객체 버전을 삭제하지는 않는 거죠. 이렇게 해서 악의적인 삭제로부터 데이터를 보호합니다.
버킷에 복제 규칙을 추가하면 규칙은 기본적으로 활성화되어 있어요. 그래서 저장하자마자 바로 동작합니다.
이 예시에서는 소스 버킷과 대상 버킷이 같은 AWS 계정에 속한 라이브 복제를 구성해 볼게요. Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK for Java, AWS SDK for .NET을 사용하는 예시가 제공됩니다.
출처: 문서
사전 요구 사항
아래 절차를 쓰기 전에, 소스 버킷과 대상 버킷이 같은 계정에 속했는지 다른 계정에 속했는지에 따라 복제에 필요한 권한을 먼저 설정해 둬야 해요. 자세한 내용은 라이브 복제 권한 설정 문서를 참고하세요.
참고: 암호화된 객체를 복제하려면 필요한 AWS Key Management Service(AWS KMS) 키 권한도 추가로 부여해야 해요. 자세한 내용은 암호화된 객체 복제(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C) 문서를 참고하세요. 복제에 Object Lock을 쓰려면 복제를 설정할 때 사용하는 AWS Identity and Access Management(IAM) 역할의 소스 S3 버킷에
s3:GetObjectRetention과s3:GetObjectLegalHold권한 두 가지를 추가로 부여해야 해요. 역할에s3:Get*권한 문장이 있다면 그 문장으로 충족될 수 있어요. 자세한 내용은 S3 복제와 함께 Object Lock 사용 문서를 참고하세요.
대상 버킷이 소스 버킷과 같은 AWS 계정에 있을 때 복제 규칙을 구성하는 방법은 다음과 같아요.
대상 버킷이 소스 버킷과 다른 계정에 있는 경우에는 대상 버킷에 버킷 정책을 추가해서 소스 버킷 계정의 소유자에게 대상 버킷에 객체를 복제할 권한을 부여해야 해요. 자세한 내용은 (선택 사항) 3단계: 소스·대상 버킷이 서로 다른 AWS 계정에 속할 때 권한 부여 문서를 참고하세요.
콘솔에서 설정하기
- AWS Management Console에 로그인하고 Amazon S3 콘솔을 엽니다. (https://console.aws.amazon.com/s3/)
- 왼쪽 탐색 창에서 **일반 목적 버킷(General purpose buckets)**을 선택해요.
- 버킷 목록에서 원하는 버킷 이름을 선택합니다.
- 관리(Management) 탭에서 **복제 규칙(Replication rules)**까지 아래로 스크롤한 뒤 **복제 규칙 만들기(Create replication rule)**를 선택해요.
- 복제 규칙 구성(Replication rule configuration) 섹션의 복제 규칙 이름(Replication rule name) 아래에 나중에 규칙을 식별할 수 있게 이름을 입력해요. 이름은 필수이며 버킷 안에서 고유해야 해요.
- 상태(Status) 아래에서 **활성화(Enabled)**가 기본적으로 선택되어 있어요. 활성화된 규칙은 저장하자마자 동작해요. 나중에 규칙을 활성화하려면 **비활성화(Disabled)**를 선택하면 됩니다.
- 버킷에 기존 복제 규칙이 이미 있다면 규칙의 우선순위를 설정하라는 안내가 나와요. 객체가 둘 이상의 규칙 범위에 포함되어 생기는 충돌을 피하려면 규칙에 우선순위를 설정해야 해요. 규칙이 겹치는 경우 Amazon S3는 규칙 우선순위를 보고 어떤 규칙을 적용할지 결정합니다. 숫자가 클수록 우선순위가 높아요. 규칙 우선순위에 대한 자세한 내용은 복제 구성 파일 요소 문서를 참고하세요.
- 소스 버킷(Source bucket) 아래에서 복제 소스를 설정하는 다음 옵션을 고를 수 있어요.
- 버킷 전체를 복제하려면 **버킷의 모든 객체에 적용(Apply to all objects in the bucket)**을 선택해요.
- 같은 접두사를 가진 모든 객체를 복제하려면 **하나 이상의 필터로 이 규칙의 범위 제한(Limit the scope of this rule using one or more filters)**을 선택해요. 이렇게 하면 지정한 접두사(예:
pictures)로 시작하는 이름을 가진 모든 객체로 복제가 제한돼요. 접두사(Prefix) 상자에 접두사를 입력하면 됩니다.- 참고: 폴더 이름을 접두사로 입력할 때는 마지막 문자로
/(슬래시)를 사용해야 해요(예:pictures/).
- 참고: 폴더 이름을 접두사로 입력할 때는 마지막 문자로
- 하나 이상의 객체 태그를 가진 모든 객체를 복제하려면 **태그 추가(Add tag)**를 선택하고 상자에 키-값 쌍을 입력해요. 이 과정을 반복해서 태그를 더 추가할 수 있어요. 접두사와 태그를 함께 조합할 수도 있습니다. 객체 태그에 대한 자세한 내용은 객체에 태그 지정 문서를 참고하세요.
- 새 복제 구성 XML 스키마는 접두사·태그 필터링과 규칙 우선순위를 지원해요. 새 스키마에 대한 자세한 내용은 이전 버전 호환성 고려 사항 문서를 참고하세요. 사용자 인터페이스 뒤에서 동작하는 Amazon S3 API에 쓰는 XML에 대한 자세한 내용은 복제 구성 파일 요소 문서를 참고해요. 새 스키마는 replication configuration XML V2라고 불러요.
- 대상(Destination) 아래에서 Amazon S3가 객체를 복제할 버킷을 선택해요.
- 참고: 대상 버킷의 수는 특정 파티션에 있는 AWS 리전 수로 제한돼요. 파티션은 리전의 그룹이에요. AWS에는 현재
aws(표준 리전),aws-cn(중국 리전),aws-us-gov(AWS GovCloud(US) 리전) 세 가지 파티션이 있습니다. 대상 버킷 할당량 증가를 요청하려면 서비스 할당량을 사용할 수 있어요. - 같은 계정의 버킷으로 복제하려면 **이 계정의 버킷 선택(Choose a bucket in this account)**을 선택하고 대상 버킷 이름을 입력하거나 찾아봐요.
- 다른 AWS 계정의 버킷으로 복제하려면 **다른 계정의 버킷 지정(S specify a bucket in another account)**을 선택하고 대상 버킷의 계정 ID와 버킷 이름을 입력해요.
- 대상이 소스 버킷과 다른 계정에 있다면 대상 버킷에 버킷 정책을 추가해서 소스 버킷 계정의 소유자에게 객체 복제 권한을 부여해야 해요. 자세한 내용은 (선택 사항) 3단계: 소스·대상 버킷이 서로 다른 AWS 계정에 속할 때 권한 부여 문서를 참고하세요.
- 대상 버킷에서 새 객체의 소유권을 표준화하려면 **객체 소유권을 대상 버킷 소유자로 변경(Change object ownership to the destination bucket owner)**을 선택할 수 있어요. 이 옵션에 대한 자세한 내용은 버킷의 객체 소유권 제어 및 ACL 비활성화 문서를 참고하세요.
- 참고: 대상 버킷에 버전 관리가 활성화되어 있지 않으면 버전 관리 활성화(Enable versioning) 버튼이 포함된 경고가 표시돼요. 이 버튼을 눌러 버킷의 버전 관리를 활성화하면 됩니다.
- 참고: 대상 버킷의 수는 특정 파티션에 있는 AWS 리전 수로 제한돼요. 파티션은 리전의 그룹이에요. AWS에는 현재
- 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 서비스에 전달할 권한 부여를 참고하세요.
- IAM 역할을 설정하려면 IAM 역할 섹션의 IAM 역할 드롭다운 목록에서 다음 중 하나를 선택해요.
- AWS KMS 키(SSE-KMS)로 암호화된 소스 버킷의 객체를 복제하려면 암호화(Encryption) 아래에서 **AWS KMS로 암호화된 객체 복제(Replicate objects encrypted with AWS KMS)**를 선택해요. 대상 객체 암호화용 AWS KMS 키 아래에는 복제에 사용할 수 있게 허용한 소스 키가 있어요. 기본적으로 모든 소스 KMS 키가 포함됩니다. KMS 키 선택을 좁히려면 별칭이나 키 ID를 고를 수 있어요.
- 선택하지 않은 AWS KMS 키로 암호화된 객체는 복제되지 않아요. KMS 키나 키 그룹이 기본으로 선택되어 주어지지만, 원한다면 KMS 키를 직접 고를 수도 있어요. 복제에 AWS KMS를 사용하는 방법에 대한 자세한 내용은 암호화된 객체 복제(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C) 문서를 참고하세요.
- 중요: AWS KMS로 암호화된 객체를 복제하면 AWS KMS 요청 속도가 소스 리전에서 두 배가 되고 대상 리전에서도 같은 양만큼 증가해요. 이렇게 AWS KMS 호출 속도가 늘어나는 이유는 복제 대상 리전에 정의한 KMS 키로 데이터를 다시 암호화하는 방식 때문입니다. AWS KMS에는 호출 계정과 리전별 요청 속도 할당량이 있어요. 할당량 기본값에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 AWS KMS 할당량 — 초당 요청 수: 다양함을 참고하세요.
- 복제 중 현재 Amazon S3의
PUT객체 요청 속도가 계정의 기본 AWS KMS 속도 제한 절반을 넘는다면 AWS KMS 요청 속도 할당량 증가를 요청하는 걸 권장해요. 증가를 요청하려면 문의하기의 Support Center에서 케이스를 만들어요. 예를 들어 현재PUT객체 요청 속도가 초당 1,000건이고 객체를 AWS KMS로 암호화한다고 해 볼게요. 이 경우 소스·대상 리전(다른 경우) 모두에서 AWS KMS 속도 제한을 초당 2,500건으로 늘려 달라고 Support에 요청해서 AWS KMS가 스로틀링하지 않도록 하는 게 좋아요. - 소스 버킷의
PUT객체 요청 속도를 보려면 Amazon S3의 Amazon CloudWatch 요청 지표에서PutRequests를 확인해요. CloudWatch 지표 보기에 대한 자세한 내용은 S3 콘솔 사용 문서를 참고하세요.
- AWS KMS로 암호화된 객체를 복제하기로 했다면 다음을 수행해요.
- 대상 객체 암호화용 AWS KMS 키 아래에서 KMS 키를 다음 중 한 가지 방식으로 지정해요.
- 사용 가능한 KMS 키 목록에서 고르려면 **사용자의 AWS KMS 키에서 선택(Choose from your AWS KMS keys)**을 선택하고 사용 가능한 키 목록에서 KMS 키를 골라요. AWS 관리형 키(
aws/s3)와 고객 관리형 키 모두 이 목록에 나타나요. 고객 관리형 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 고객 키와 AWS 키를 참고하세요. - KMS 키 Amazon 리소스 이름(ARN)을 입력하려면 **AWS KMS 키 ARN 입력(Enter AWS KMS key ARN)**을 선택하고 나타난 필드에 KMS 키 ARN을 입력해요. 이렇게 하면 대상 버킷의 복제본이 암호화됩니다. KMS 키의 ARN은 IAM 콘솔의 암호화 키 아래에서 찾을 수 있어요.
- AWS KMS 콘솔에서 새 고객 관리형 키를 만들려면 **KMS 키 만들기(Create a KMS key)**를 선택해요. AWS KMS 키 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 만들기를 참고하세요.
- 사용 가능한 KMS 키 목록에서 고르려면 **사용자의 AWS KMS 키에서 선택(Choose from your AWS KMS keys)**을 선택하고 사용 가능한 키 목록에서 KMS 키를 골라요. AWS 관리형 키(
- 중요: 버킷과 같은 AWS 리전에서 활성화된 KMS 키만 사용할 수 있어요. 사용자의 KMS 키에서 선택을 고르면 S3 콘솔은 리전별로 KMS 키 100개만 나열합니다. 같은 리전에 KMS 키가 100개를 넘으면 S3 콘솔에서 처음 100개만 볼 수 있어요. 콘솔에 나열되지 않은 KMS 키를 쓰려면 AWS KMS 키 ARN 입력을 선택하고 KMS 키 ARN을 입력해요.
- Amazon S3에서 서버 측 암호화에 AWS KMS 키를 쓸 때는 대칭 암호화 KMS 키를 선택해야 해요. Amazon S3는 대칭 암호화 KMS 키만 지원하며 비대칭 KMS 키는 지원하지 않아요. 자세한 내용은 AWS Key Management Service 개발자 안내서의 대칭·비대칭 KMS 키 식별을 참고하세요.
- AWS KMS 키 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 만들기를, Amazon S3에서 AWS KMS를 사용하는 방법은 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 문서를 참고하세요.
- 대상 객체 암호화용 AWS KMS 키 아래에서 KMS 키를 다음 중 한 가지 방식으로 지정해요.
- 대상 스토리지 클래스(Destination storage class) 아래에서 데이터를 대상의 특정 스토리지 클래스로 복제하려면 **복제 객체의 스토리지 클래스 변경(Change the storage class for the replicated objects)**을 선택해요. 그리고 복제 객체에 사용할 스토리지 클래스를 선택하세요. 이 옵션을 선택하지 않으면 복제 객체의 스토리지 클래스는 원본 객체와 동일한 클래스가 됩니다.
- **추가 복제 옵션(Additional replication options)**을 설정하며 다음 옵션을 추가할 수 있어요.
- 복제 구성에서 S3 Replication Time Control(S3 RTC)을 활성화하려면 **Replication Time Control(RTC)**을 선택해요. 이 옵션에 대한 자세한 내용은 S3 Replication Time Control로 규정 준수 요구 사항 충족 문서를 참고하세요.
- 복제 구성에서 S3 복제 지표를 활성화하려면 **복제 지표 및 이벤트(Replication metrics and events)**를 선택해요. 자세한 내용은 지표·이벤트 알림·상태로 복제 모니터링 문서를 참고하세요.
- 복제 구성에서 삭제 마커 복제를 활성화하려면 **삭제 마커 복제(Delete marker replication)**를 선택해요. 자세한 내용은 버킷 간 삭제 마커 복제 문서를 참고하세요.
- 복제 구성에서 Amazon S3 복제본 수정 동기화를 활성화하려면 **복제본 수정 동기화(Replica modification sync)**를 선택해요. 자세한 내용은 복제본 수정 동기화로 메타데이터 변경 복제 문서를 참고하세요.
- 참고: S3 RTC나 S3 복제 지표를 쓸 때는 추가 요금이 적용돼요.
- 마무리하려면 **저장(Save)**을 선택해요. 규칙을 저장한 뒤에는 규칙을 선택하고 **규칙 편집(Edit rule)**을 눌러 규칙을 편집·활성화·비활성화·삭제할 수 있어요.
AWS CLI로 설정하기
소스 버킷과 대상 버킷이 같은 AWS 계정에 속할 때 AWS CLI로 복제를 설정하려면 다음을 수행해요.
소스·대상 버킷을 만든다 → 버킷에서 버전 관리를 활성화한다 → Amazon S3에 객체 복제 권한을 주는 IAM 역할을 만든다 → 소스 버킷에 복제 구성을 추가한다 → 설정을 검증하기 위해 테스트한다.
- AWS CLI의 자격 증명 프로필을 설정해요. 이 예시에서는 프로필 이름
acctA를 사용해요. 자격 증명 프로필 설정과 명명된 프로필 사용에 대한 자세한 내용은 AWS Command Line Interface 사용자 안내서의 구성 및 자격 증명 파일 설정을 참고하세요.- 중요: 이 예시에 쓰는 프로필은 필요한 권한을 갖고 있어야 해요. 예를 들어 복제 구성에서 Amazon S3가 가정할 수 있는 IAM 역할을 지정하는데, 이는 사용하는 프로필에
iam:PassRole권한이 있을 때만 가능해요. 자세한 내용은 IAM 사용자 안내서의 사용자에게 역할을 AWS 서비스에 전달할 권한 부여를 참고하세요. 관리자 자격 증명으로 명명된 프로필을 만들면 모든 작업을 수행할 수 있어요.
- 중요: 이 예시에 쓰는 프로필은 필요한 권한을 갖고 있어야 해요. 예를 들어 복제 구성에서 Amazon S3가 가정할 수 있는 IAM 역할을 지정하는데, 이는 사용하는 프로필에
- 다음 AWS CLI 명령으로 소스 버킷을 만들고 버전 관리를 활성화해요. 이 명령을 쓰려면
user input placeholders를 자신의 정보로 바꿔야 해요.- 다음
create-bucket명령은 US East(N. Virginia)(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
- 다음 AWS CLI 명령으로 대상 버킷을 만들고 버전 관리를 활성화해요. 명령을 쓰려면
user input placeholders를 자신의 정보로 바꿔야 해요.- 참고: 소스·대상 버킷이 모두 같은 AWS 계정에 있을 때 복제 구성을 설정하려면 소스·대상 버킷에 같은 프로필을 사용해요. 이 예시에서는
acctA를 사용합니다. 버킷이 서로 다른 AWS 계정에 속할 때 복제 구성을 테스트하려면 각 계정에 다른 프로필을 지정하세요. 예를 들어 대상 버킷에는acctB프로필을 사용해요. - 다음
create-bucket명령은 US West(Oregon)(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 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
-
IAM 역할을 만들어요. 나중에 소스 버킷에 추가하는 복제 구성에 이 역할을 지정해요. Amazon S3는 이 역할을 가정해서 사용자를 대신해 객체를 복제합니다. IAM 역할은 역할 만들기 → 역할에 권한 정책 연결, 두 단계로 만들 수 있어요.
IAM 역할 만들기
다음 신뢰 정책을 복사해서 로컬 컴퓨터의 현재 디렉터리에
s3-role-trust-policy.json라는 파일로 저장해요. 이 정책은 Amazon S3 서비스 보안 주체에 역할을 가정할 수 있는 권한을 부여합니다.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
다음 명령을 실행해 역할을 만들어요.
aws iam create-role \
--role-name replicationRole \
--assume-role-policy-document file://s3-role-trust-policy.json \
--profile acctA
역할에 권한 정책 연결
다음 권한 정책을 복사해서 로컬 컴퓨터의 현재 디렉터리에 s3-role-permissions-policy.json라는 파일로 저장해요. 이 정책은 다양한 Amazon S3 버킷·객체 작업에 대한 권한을 부여합니다.
{
"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 KMS 키 권한도 추가로 부여해야 해요. 자세한 내용은 암호화된 객체 복제(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C) 문서를 참고하세요. 복제에 Object Lock을 쓰려면 복제를 설정할 때 사용하는 IAM 역할의 소스 S3 버킷에
s3:GetObjectRetention과s3:GetObjectLegalHold권한 두 가지를 추가로 부여해야 해요. 역할에s3:Get*권한 문장이 있다면 그 문장으로 충족돼요. 자세한 내용은 S3 복제와 함께 Object Lock 사용 문서를 참고하세요. 객체 주석(annotation)을 복제하려면 IAM 역할 권한 정책의 소스 S3 버킷에s3:GetObjectVersionAnnotationForReplication권한도 부여해야 해요. 자세한 내용은 복제본 수정 동기화로 메타데이터 변경 복제 문서를 참고하세요.
다음 명령으로 정책을 만들고 역할에 연결해요. user input placeholders를 자신의 정보로 바꿔야 해요.
aws iam put-role-policy \
--role-name replicationRole \
--policy-document file://s3-role-permissions-policy.json \
--policy-name replicationRolePolicy \
--profile acctA
-
소스 버킷에 복제 구성을 추가해요.
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"
}
}
]
}
amzn-s3-demo-destination-bucket과 IAM-role-ARN 값을 자신의 정보로 바꿔서 JSON을 갱신해요. 변경 사항을 저장합니다.
다음 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
- Amazon S3 콘솔에서 다음 단계로 설정을 테스트해요.
- AWS Management Console에 로그인하고 Amazon S3 콘솔을 엽니다. (https://console.aws.amazon.com/s3/)
- 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택하고 일반 목적 버킷 목록에서 소스 버킷을 골라요.
- 소스 버킷에서
Tax라는 폴더를 만들어요. - 소스 버킷의
Tax폴더에 샘플 객체를 추가해요.- 참고: Amazon S3가 객체를 복제하는 데 걸리는 시간은 객체 크기에 따라 달라져요. 복제 상태를 보는 방법에 대한 자세한 내용은 복제 상태 정보 가져오기 문서를 참고하세요.
- 대상 버킷에서 다음을 확인해요.
- Amazon S3가 객체를 복제했는지 확인합니다.
- 객체가 복제본인지 확인해요. 객체의 속성(Properties) 탭에서 객체 관리 개요(Object management overview) 섹션까지 아래로 스크롤한 뒤 관리 구성(Management configurations) 아래 복제 상태(Replication status) 값을 확인해요. 이 값이
REPLICA로 설정되어 있는지 확인하세요. - 복제본이 소스 버킷 계정이 소유하는지 확인해요. 객체의 권한(Permissions) 탭에서 객체 소유권을 확인할 수 있어요.
- 소스·대상 버킷이 서로 다른 계정에 속한다면 복제본 소유권을 대상 계정으로 바꾸라고 Amazon S3에 지시하는 선택적 구성을 추가할 수 있어요. 예시는 복제본 소유자 변경 방법 문서를 참고하세요.
SDK로 설정하기
아래 코드 예시를 사용해 AWS SDK for Java와 AWS SDK for .NET에서 각각 버킷에 복제 구성을 추가할 수 있어요.
- 참고: 암호화된 객체를 복제하려면 필요한 AWS KMS 키 권한도 추가로 부여해야 해요. 자세한 내용은 암호화된 객체 복제(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C) 문서를 참고하세요. 복제에 Object Lock을 쓰려면 복제를 설정할 때 사용하는 IAM 역할의 소스 S3 버킷에
s3:GetObjectRetention과s3:GetObjectLegalHold권한 두 가지를 추가로 부여해야 해요. 역할에s3:Get*권한 문장이 있다면 그 문장으로 충족돼요. 자세한 내용은 S3 복제와 함께 Object Lock 사용 문서를 참고하세요.
Java
AWS SDK for Java로 버킷에 복제 구성을 추가한 뒤 검색·검증하려면 S3Client를 사용해 복제 설정을 프로그래밍 방식으로 관리할 수 있어요. AWS SDK for Java로 복제를 구성하는 방법에 대한 예시는 Amazon S3 API Reference의 버킷에 복제 구성 설정을 참고하세요.
C#
다음 AWS SDK for .NET 코드 예시는 버킷에 복제 구성을 추가한 뒤 검색해요. 이 코드를 쓰려면 버킷 이름과 IAM 역할의 Amazon 리소스 이름(ARN)을 제공해야 해요. 코드 예시를 설정하고 실행하는 방법에 대한 자세한 내용은 AWS SDK for .NET 개발자 안내서의 AWS SDK for .NET 시작하기를 참고하세요.
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);
}
}
}
}