S3 Tables 복제 설정 - Amazon Simple Storage Service

S3 Tables 복제 설정

소스 테이블에서 최대 5개의 대상 테이블 버킷으로 테이블 복제본을 자동으로 생성하도록 복제를 설정할 수 있습니다. 복제는 버킷 수준(버킷의 모든 테이블에 적용) 또는 테이블 수준(특정 테이블의 경우)에서 구성할 수 있습니다. 이 주제에서는 Amazon S3 콘솔 또는 AWS 명령줄 인터페이스(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 리소스 이름(ARN)

암호화된 테이블에 대한 추가 요구 사항

AWS KMS를 사용하여 복제본 테이블을 암호화하려는 경우:

  • 대상 리전의 KMS 키

  • IAM 복제 역할에서 KMS 키를 사용할 수 있는 권한

  • 복제 역할이 데이터를 암호화하도록 허용하는 KMS 키 정책

복제 구성 이해

복제 구성은 Amazon S3가 소스 테이블 버킷에서 테이블을 복제하는 방법을 정의합니다. 복제는 두 가지 수준에서 구성할 수 있습니다.

버킷 수준 복제

버킷 수준 복제 구성은 소스 테이블 버킷의 모든 테이블에 적용됩니다. 버킷 수준 복제를 구성하면 Amazon S3는 버킷에 생성된 기존 테이블과 새 테이블을 자동으로 복제합니다.

다음과 같은 경우 버킷 수준 복제를 사용합니다.

  • 버킷의 모든 테이블을 복제하려는 경우

  • 모든 테이블에서 일관된 복제 동작을 원하는 경우

  • 단일 구성을 사용하여 관리를 간소화하려는 경우

테이블 수준 복제

테이블 수준 복제 구성은 특정 테이블에 적용됩니다. 테이블 수준 구성은 해당 특정 테이블에 대한 버킷 수준 구성을 재정의합니다.

다음과 같은 경우 테이블 수준 복제를 사용합니다.

  • 특정 테이블만 복제하려는 경우

  • 테이블마다 다른 복제 대상이 필요한 경우

  • 특정 테이블에 대한 버킷 수준 구성을 재정의하려는 경우

복제 구성 요소

각 복제 구성에는 다음이 포함됩니다.

  • IAM 역할 - Amazon S3가 복제 작업을 수행하기 위해 수임하는 역할

  • 규칙 - 하나 이상의 복제 규칙(시작 시 규칙 1개로 제한). 각 규칙에는 다음이 포함됩니다.

    • 대상 - 대상 테이블 버킷 ARN(최대 5개의 대상)

    • 상태 - 규칙의 활성화 또는 비활성화 여부

  • 버전 토큰 - 구성을 업데이트할 때 쓰기 충돌을 방지하는 데 사용되는 토큰

버킷 수준 복제와 테이블 수준 복제 중에서 선택

구성 우선 순위

버킷 수준 구성과 테이블 수준 구성이 모두 있는 경우:

  • 특정 테이블에는 테이블 수준 구성이 우선합니다.

  • 다른 테이블은 버킷 수준 구성을 따릅니다.

Amazon S3 콘솔을 사용하여 복제 설정

이 절차에서는 Amazon S3 콘솔을 사용하여 복제를 구성하는 방법을 보여줍니다.

이 절차에서는 Amazon S3 콘솔을 사용하여 테이블 버킷 복제 구성을 생성하는 방법을 보여줍니다. 테이블 버킷 복제 구성은 소스 테이블 버킷의 모든 테이블에 적용됩니다.

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

  2. 탐색 창에서 테이블 버킷을 선택합니다.

  3. 테이블 버킷 목록에서 복제를 구성할 테이블 버킷의 이름을 선택합니다.

  4. [Management] 탭을 선택한 후

  5. 테이블 버킷 복제 구성 섹션에서 테이블 버킷 복제 구성 생성을 선택합니다.

  6. 대상 섹션에서 복제 대상을 구성합니다.

    1. 테이블 버킷 ARN 필드에 대상 테이블 버킷의 ARN을 입력합니다. 형식은 arn:aws:s3tables:region:account-id:bucket/table-bucket-name입니다.

      또는 S3 찾아보기를 선택하여 계정에서 테이블 버킷을 선택합니다.

    2. (선택 사항) 대상을 추가하려면 대상 추가를 선택합니다. 총 5개의 대상에 최대 4개의 테이블 버킷을 추가할 수 있습니다.

  7. IAM 역할 섹션에서 복제 역할을 구성합니다.

    1. IAM 역할 선택 방법에서 다음 옵션 중 하나를 선택합니다.

      • 새 IAM 역할 생성 - Amazon S3는 복제에 필요한 권한을 가진 새 역할을 생성합니다.

      • 기존 IAM 역할에서 선택 - 필요한 복제 권한이 있는 기존 역할을 선택합니다.

      • IAM 역할 ARN 입력 - 기존 IAM 역할의 ARN을 수동으로 입력합니다.

    2. 기존 IAM 역할에서 선택을 선택했다면 IAM 역할 드롭다운 목록에서 역할을 선택합니다.

    3. (선택 사항) 보기를 선택하여 IAM 콘솔에서 선택한 역할의 권한을 검토합니다.

  8. 복제 구성 생성을 선택합니다.

    복제 구성을 생성하면 Amazon S3는 초기 채우기 프로세스를 시작합니다. 테이블 복제 상태 섹션에서 복제 상태, 대상 테이블 ARN 및 마지막으로 복제된 메타데이터를 비롯하여 각 대상에 대해 표시되는 정보를 보며 복제 상태를 모니터링할 수 있습니다.

이 절차에서는 Amazon S3 콘솔을 사용하여 테이블 수준 복제 구성을 생성하는 방법을 보여줍니다. 테이블 복제 구성은 특정 테이블에 적용되며 해당 테이블에 대한 버킷 수준 복제 구성을 재정의합니다.

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

  2. 탐색 창에서 테이블 버킷을 선택합니다.

  3. 테이블 버킷 목록에서 복원할 테이블이 포함된 테이블 버킷 이름을 선택합니다.

  4. 테이블 탭을 선택합니다.

  5. 테이블 목록에서 복제하려는 테이블의 이름을 선택합니다.

  6. [Management] 탭을 선택한 후

  7. 테이블 복제 구성 섹션에서 테이블 복제 구성 생성을 선택합니다.

  8. 대상 섹션에서 복제 대상을 구성합니다.

    1. 테이블 버킷 ARN 필드에 대상 테이블 버킷의 ARN을 입력합니다. 형식은 arn:aws:s3tables:region:account-id:bucket/table-bucket-name입니다.

      또는 S3 찾아보기를 선택하여 계정에서 테이블 버킷을 선택합니다.

    2. (선택 사항) 대상을 추가하려면 대상 추가를 선택합니다. 총 5개의 대상에 최대 4개의 테이블 버킷을 추가할 수 있습니다.

  9. IAM 역할 섹션에서 복제 역할을 구성합니다.

    1. IAM 역할 선택 방법에서 다음 옵션 중 하나를 선택합니다.

      • 새 IAM 역할 생성 - Amazon S3는 복제에 필요한 권한을 가진 새 역할을 생성합니다.

      • 기존 IAM 역할에서 선택 - 필요한 복제 권한이 있는 기존 역할을 선택합니다.

      • IAM 역할 ARN 입력 - 기존 IAM 역할의 ARN을 수동으로 입력합니다.

    2. 기존 IAM 역할에서 선택을 선택했다면 IAM 역할 목록에서 역할을 선택합니다.

    3. (선택 사항) 보기를 선택하여 IAM 콘솔에서 선택한 역할의 권한을 검토합니다.

  10. 복제 구성 생성을 선택합니다.

다음 단계

복제 구성 생성 후:

  • Amazon S3가 초기 채우기 프로세스를 시작하여 각 대상 버킷에 복제본 테이블 생성

  • 채우기가 시작되면 복제 상태가 복제 중으로 변경됨

  • 관리 탭에서 복제 진행 상황을 모니터링할 수 있음

  • 초기 복제 시간은 소스 테이블의 크기에 따라 다릅니다.

AWS CLI를 사용하여 복제 설정

이 절차에서는 AWS CLI를 사용하여 복제를 구성하는 방법을 보여줍니다. 계정 ID, 리전 및 버킷 이름을 실제 값으로 바꿉니다. 모든 대상 버킷을 권한에 추가합니다.

1단계: 복제를 위한 IAM 역할 만들기

먼저 Amazon S3가 테이블을 복제하기 위해 수임할 수 있는 IAM 역할을 생성합니다.

  1. S3 Tables가 역할을 수임하도록 허용하는 신뢰 정책 문서를 생성합니다. trust-policy.json으로 저장합니다.

    { "Version": "2012-10-17" "Statement": [ { "Effect": "Allow", "Principal": { "Service": "replication.s3tables.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. IAM 역할 생성:

    aws iam create-role \ --role-name S3TablesReplicationRole \ --assume-role-policy-document file://trust-policy.json \ --description "Role for S3 Tables replication"
  3. 복제 권한을 부여하는 권한 정책을 생성합니다. 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/*" } ] }
  4. 역할에 권한 정책 연결:

    aws iam put-role-policy \ --role-name S3TablesReplicationRole \ --policy-name S3TablesReplicationPermissions \ --policy-document file://replication-permissions.json
  5. (선택 사항) KMS 암호화를 사용하는 경우 정책에 KMS 권한을 추가합니다.

    { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1" ] }

(교차 계정만 해당) 2단계: 대상 버킷 정책 구성

다른 AWS 계정으로 복제하는 경우 대상 계정은 소스 계정에 권한을 부여해야 합니다.

  1. 대상 계정에서 대상 테이블 버킷에 대한 버킷 정책을 생성합니다. destination-bucket-policy.json으로 저장합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/cross-account-test" }, "Action": [ "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:PutTableMaintenanceConfiguration" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination/table/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/cross-account-test" }, "Action": [ "s3tables:CreateTable", "s3tables:CreateNamespace" ], "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination" } ] }
  2. 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 \ --policy file://destination-bucket-policy.json \ --profile destination-account
  3. 소스 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" } ] }
  4. 마찬가지로 대상 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" } ]

2단계: 복제 구성 생성

AWS CLI를 사용하여 테이블 버킷 수준 또는 테이블 수준에서 복제 구성을 생성할 수 있습니다. 자세한 내용은 다음 절차를 참조하세요.

이 접근 방식을 사용하여 버킷의 모든 테이블을 복제합니다.

  1. 복제 구성 파일을 만듭니다. 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" } ] } ] }
  2. 버킷 수준 복제 구성 적용:

    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" }

이 접근 방식을 사용하여 특정 테이블을 복제하거나 버킷 수준 복제를 재정의합니다.

  1. 복제 구성 파일을 만듭니다. 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" } ] } ] }
  2. 테이블 수준 복제 구성 적용:

    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" }