S3 Tables 복제 설정하기
S3 Tables 복제 설정하기 (Setting up S3 Tables replication)
소스 테이블에서 최대 5개의 대상 테이블 버킷으로 테이블 복제본을 자동으로 만들도록 복제를 설정할 수 있어요. 복제는 버킷 수준(버킷의 모든 테이블에 적용)이나 테이블 수준(특정 테이블)으로 구성할 수 있어요. 이 항목에서는 Amazon S3 콘솔이나 AWS Command Line Interface(AWS CLI)로 복제를 구성하는 방법을 설명해요.
출처: 문서
본문
복제 설정 사전 조건
복제를 구성하기 전에 다음이 있는지 확인하세요.
필수 리소스
- 소스 테이블 버킷 – 복제하려는 테이블을 담고 있는 테이블 버킷
- 대상 테이블 버킷 – 테이블을 복제할 하나 이상의 테이블 버킷(최대 5개)
- 소스 테이블 – 복제할 소스 테이블 버킷의 기존 테이블
- IAM 역할 – 사용자를 대신해 테이블 복제 권한을 Amazon S3에 부여하는 IAM 역할
필수 권한
복제를 설정할 때 사용하는 IAM 자격 증명에는 다음 권한이 있어야 해요.
버킷 수준 복제:
- 소스 테이블 버킷에 대한
s3tables:PutTableBucketReplication - 소스 테이블 버킷에 대한
s3tables:GetTableBucketReplication - 복제 IAM 역할에 대한
iam:PassRole
테이블 수준 복제:
- 소스 테이블에 대한
s3tables:PutTableReplication - 소스 테이블에 대한
s3tables:GetTableReplication - 복제 IAM 역할에 대한
iam:PassRole
크로스 계정 복제:
- 대상 계정의 버킷 정책에서 부여한 권한
크로스 계정 복제를 위한 추가 요구 사항
소스와 대상 테이블 버킷이 다른 AWS 계정에 있다면 다음도 필요해요.
- 소스 계정이 테이블을 복제할 수 있는 권한을 부여하는 대상 테이블 버킷의 버킷 정책
- 대상 계정 ID와 테이블 버킷 Amazon Resource Name(ARN)
암호화된 테이블을 위한 추가 요구 사항
복제 테이블을 AWS KMS로 암호화하려면:
- 대상 리전의 KMS 키
- IAM 복제 역할에서 KMS 키를 사용할 권한
- 복제 역할이 데이터를 암호화할 수 있게 허용하는 KMS 키 정책
복제 구성 이해하기
복제 구성은 Amazon S3가 소스 테이블 버킷에서 테이블을 어떻게 복제할지 정의해요. 복제는 두 수준에서 구성할 수 있어요.
버킷 수준 복제
버킷 수준 복제 구성은 소스 테이블 버킷의 모든 테이블에 적용돼요. 버킷 수준 복제를 구성하면 Amazon S3가 버킷의 기존 테이블과 새로 만드는 테이블을 모두 자동으로 복제해요.
버킷 수준 복제는 다음 경우에 사용해요.
- 버킷의 모든 테이블을 복제하려는 경우
- 모든 테이블에 걸쳐 일관된 복제 동작을 원하는 경우
- 단일 구성으로 관리를 단순화하려는 경우
테이블 수준 복제
테이블 수준 복제 구성은 특정 테이블에 적용돼요. 테이블 수준 구성이 해당 테이블에 대해 버킷 수준 구성을 재정의해요.
테이블 수준 복제는 다음 경우에 사용해요.
- 특정 테이블만 복제하려는 경우
- 테이블마다 다른 복제 대상을 원하는 경우
- 특정 테이블에 대해 버킷 수준 구성을 재정의하려는 경우
복제 구성 요소
각 복제 구성은 다음을 포함해요.
- IAM 역할 – 복제 작업을 수행하기 위해 Amazon S3가 수임(assume)하는 역할
- 규칙(Rules) – 하나 이상의 복제 규칙(출시 시 1개 규칙으로 제한). 각 규칙은 다음을 포함해요.
- 대상(Destinations): 대상 테이블 버킷 ARN 목록(최대 5개 대상)
- 상태(Status): 규칙이 활성 또는 비활성인지 여부
- 버전 토큰(Version token) – 구성을 업데이트할 때 쓰기 충돌을 방지하는 데 사용하는 토큰
버킷 수준 복제와 테이블 수준 복제 중 선택하기
구성 우선순위
버킷 수준과 테이블 수준 구성이 모두 존재하면:
- 테이블 수준 구성이 해당 특정 테이블에 대해 우선해요.
- 다른 테이블은 버킷 수준 구성을 따르요.
Amazon S3 콘솔로 복제 설정하기
이 절차는 Amazon S3 콘솔로 복제를 구성하는 방법을 보여줘요.
Amazon S3 콘솔로 테이블 버킷 복제 구성을 만드는 절차는 다음과 같아요. 테이블 버킷 복제 구성은 소스 테이블 버킷의 모든 테이블에 적용돼요.
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 탐색 창에서 Table buckets를 선택해요.
- Table buckets 목록에서 복제를 구성하려는 테이블 버킷 이름을 선택해요.
- Management 탭을 선택해요.
- Table bucket replication configuration 섹션에서 Create table bucket replication configuration을 선택해요.
- Destination 섹션에서 복제 대상을 구성해요.
- Table bucket ARN 필드에 대상 테이블 버킷의 ARN을 입력해요. 형식은
arn:aws:s3tables:region:account-id:bucket/table-bucket-name이에요. 또는 Browse S3를 선택해 계정에서 테이블 버킷을 선택할 수 있어요. - (선택 사항) 대상을 더 추가하려면 Add destination을 선택해요. 총 5개 대상을 위해 테이블 버킷을 최대 4개 더 추가할 수 있어요.
- Table bucket ARN 필드에 대상 테이블 버킷의 ARN을 입력해요. 형식은
- IAM role 섹션에서 복제 역할을 구성해요.
- IAM role selection method에서 다음 옵션 중 하나를 선택해요.
- Create new IAM role – Amazon S3가 복제에 필요한 권한이 있는 새 역할을 만들어요.
- Choose from existing IAM roles – 필요한 복제 권한이 있는 기존 역할을 선택해요.
- Enter IAM role ARN – 기존 IAM 역할의 ARN을 직접 입력해요.
- Choose from existing IAM roles를 선택했다면 IAM role 드롭다운 목록에서 역할을 선택해요.
- (선택 사항) View를 선택해 IAM 콘솔에서 선택한 역할의 권한을 검토해요.
- IAM role selection method에서 다음 옵션 중 하나를 선택해요.
- Create replication configuration을 선택해요. 복제 구성을 만든 뒤 Amazon S3가 초기 백필 프로세스를 시작해요. Table replication status 섹션에서 복제 상태를 모니터링할 수 있는데, 여기에는 복제 상태, 대상 테이블 ARN, 마지막으로 복제된 메타데이터 같은 각 대상에 대한 정보가 표시돼요.
Amazon S3 콘솔로 테이블 수준 복제 구성을 만드는 절차는 다음과 같아요. 테이블 복제 구성은 특정 테이블에 적용되며 해당 테이블에 대한 버킷 수준 복제 구성을 재정의해요.
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 탐색 창에서 Table buckets를 선택해요.
- Table buckets 목록에서 복제하려는 테이블이 들어 있는 테이블 버킷 이름을 선택해요.
- Tables 탭을 선택해요.
- Tables 목록에서 복제하려는 테이블 이름을 선택해요.
- Management 탭을 선택해요.
- Table replication configuration 섹션에서 Create table replication configuration을 선택해요.
- Destination 섹션에서 복제 대상을 구성해요.
- Table bucket ARN 필드에 대상 테이블 버킷의 ARN을 입력해요. 형식은
arn:aws:s3tables:region:account-id:bucket/table-bucket-name이에요. 또는 Browse S3를 선택해 계정에서 테이블 버킷을 선택할 수 있어요. - (선택 사항) 대상을 더 추가하려면 Add destination을 선택해요. 총 5개 대상을 위해 테이블 버킷을 최대 4개 더 추가할 수 있어요.
- Table bucket ARN 필드에 대상 테이블 버킷의 ARN을 입력해요. 형식은
- IAM role 섹션에서 복제 역할을 구성해요.
- IAM role selection method에서 다음 옵션 중 하나를 선택해요.
- Create new IAM role – Amazon S3가 복제에 필요한 권한이 있는 새 역할을 만들어요.
- Choose from existing IAM roles – 필요한 복제 권한이 있는 기존 역할을 선택해요.
- Enter IAM role ARN – 기존 IAM 역할의 ARN을 직접 입력해요.
- Choose from existing IAM roles를 선택했다면 IAM role 목록에서 역할을 선택해요.
- (선택 사항) View를 선택해 IAM 콘솔에서 선택한 역할의 권한을 검토해요.
- IAM role selection method에서 다음 옵션 중 하나를 선택해요.
- Create replication configuration을 선택해요.
그 다음은 어떻게 되나요?
복제 구성을 만든 후:
- Amazon S3가 초기 백필 프로세스를 시작해 각 대상 버킷에 복제 테이블을 만들어요.
- 백필이 시작되면 복제 상태가 Replicating으로 바뀌어요.
- Management 탭에서 복제 진행 상황을 모니터링할 수 있어요.
- 초기 복제 시간은 소스 테이블의 크기에 따라 달라져요.
AWS CLI로 복제 설정하기
이 절차는 AWS CLI로 복제를 구성하는 방법을 보여줘요. 계정 ID, 리전, 버킷 이름을 실제 값으로 바꾸세요. 모든 대상 버킷을 권한에 추가해요.
1단계: 복제용 IAM 역할 만들기
먼저 Amazon S3가 복제를 위해 수임할 수 있는 IAM 역할을 만들어요.
- S3 Tables가 역할을 수임할 수 있게 하는 신뢰 정책 문서를 만들어요. 이 파일을
trust-policy.json으로 저장해요.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "replication.s3tables.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - IAM 역할을 만들어요.
aws iam create-role \ --role-name S3TablesReplicationRole \ --assume-role-policy-document file://trust-policy.json \ --description "Role for S3 Tables replication" - 복제 권한을 부여하는 권한 정책을 만들어요. 이 파일을
replication-permissions.json으로 저장해요.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3tables:GetTable", "s3tables:GetTableMetadataLocation", "s3tables:GetTableMaintenanceConfiguration", "s3tables:GetTableData" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source/table/*" }, { "Effect": "Allow", "Action": [ "s3tables:ListTables" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source" }, { "Effect": "Allow", "Action": [ "s3tables:CreateTable", "s3tables:CreateNamespace" ], "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination" }, { "Effect": "Allow", "Action": [ "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:PutTableMaintenanceConfiguration" ], "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination/table/*" } ] } - 역할에 권한 정책을 연결해요.
aws iam put-role-policy \ --role-name S3TablesReplicationRole \ --policy-name S3TablesReplicationPermissions \ --policy-document file://replication-permissions.json참고: 권한 정책은 작업이 서로 다른 수준에서 동작하기 때문에 두 개의 리소스 범위를 사용해요.
CreateTable과CreateNamespace는 버킷에 리소스를 만드는 버킷 수준 작업이라/table/*이 없는 버킷 ARN을 사용해요.PutTableData,GetTableData,UpdateTableMetadataLocation,PutTableMaintenanceConfiguration은 기존 테이블에 대해 동작하므로/table/*이 있는 버킷 ARN을 사용해요. - (선택 사항) KMS 암호화를 사용한다면 정책에 KMS 권한을 추가해요.
{ "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Condition": { "StringLike": { "kms:ViaService": [ "s3.us-east-1.amazonaws.com" ] }, "ArnLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket-source/table/*" } }, "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Condition": { "StringLike": { "kms:ViaService": [ "s3.us-west-2.amazonaws.com" ] }, "ArnLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3tables:us-west-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination/table/*" ] } }, "Resource": "*" }
(크로스 계정만) 2단계: 대상 버킷 정책 구성하기
다른 AWS 계정으로 복제하는 경우 대상 계정이 소스 계정에 권한을 부여해야 해요.
- 대상 계정에서 대상 테이블 버킷의 버킷 정책을 만들어요. 이 파일을
destination-bucket-policy.json으로 저장해요.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/S3TablesReplicationRole" }, "Action": [ "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:PutTableMaintenanceConfiguration" ], "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-cross-account-destination/table/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/S3TablesReplicationRole" }, "Action": [ "s3tables:CreateTable", "s3tables:CreateNamespace" ], "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-cross-account-destination" } ] } - S3 Tables API로 정책을 적용해요.
aws s3tables put-table-bucket-policy \ --table-bucket-arn arn:aws:s3tables:us-west-2:444455556666:bucket/amzn-s3-demo-table-bucket-cross-account-destination \ --resource-policy file://destination-bucket-policy.json \ --profile destination-account - 소스 KMS 키를 S3 Tables 복제와 유지 관리가 가능하도록 수정해요.
{ "Version": "2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "allow replication to decrypt", "Effect": "Allow", "Principal": { "AWS": "replication_role_arn" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID" }, { "Sid": "allow maintenance", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID" } ] } - 마찬가지로 대상 KMS 키 정책에 권한을 추가해요.
{ "Version": "2012-10-17", "Id": "key-policy-3", "Statement": [ { "Sid": "allow maintenance", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1" }, { "Sid": "allow replication to encrypt/decrypt", "Effect": "Allow", "Principal": { "AWS": "replication_role_arn" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1" } ] }
3단계: 복제 구성 만들기
테이블 버킷 수준이나 테이블 수준에서 AWS CLI로 복제 구성을 만들 수 있어요. 자세한 내용은 다음 절차들을 참고하세요.
이 방법으로 버킷의 모든 테이블을 복제해요.
- 복제 구성 파일을 만들어요. 이 파일을
bucket-replication-config.json으로 저장해요.- 예: 같은 계정의 단일 대상
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr" } ] } ] } - 예: 여러 리전의 다중 대상
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr" }, { "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu" }, { "destinationTableBucketARN": "arn:aws:s3tables:ap-south-1:111122223333:bucket/amzn-s3-demo-table-bucket-apac" } ] } ] } - 예: 크로스 계정 복제
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-east-1:444455556666:bucket/amzn-s3-demo-table-bucket-partner" } ] } ] }
- 예: 같은 계정의 단일 대상
- 버킷 수준 복제 구성을 적용해요.
예상 출력:aws s3tables put-table-bucket-replication \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --configuration file://bucket-replication-config.json{ "versionToken": "3HL4kqtJl40Nr8X8gdRQBpUMLUo", "status": "Success" }
이 방법으로 특정 테이블을 복제하거나 버킷 수준 복제를 재정의해요.
- 복제 구성 파일을 만들어요. 이 파일을
table-replication-config.json으로 저장해요.- 예: 단일 테이블 복제
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-analytics-bucket" } ] } ] } - 예: 다중 대상이 있는 테이블
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr" }, { "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu" } ] } ] }
- 예: 단일 테이블 복제
- 테이블 수준 복제 구성을 적용해요.
예상 출력:aws s3tables put-table-replication \ --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/amzn-s3-demo-table-bucket-sales-data \ --configuration file://table-replication-config.json{ "versionToken": "xT2LZkFZ0UuTC2h8XqtGLx2Ak6M", "status": "Success" }
더 알아보기 (Learn more)
- S3 Tables 복제는 어떻게 동작하나요 (How S3 Tables replication works)
- S3 Tables 복제 관리하기 (Managing S3 Tables replication)