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 콘솔로 테이블 버킷 복제 구성을 만드는 절차는 다음과 같아요. 테이블 버킷 복제 구성은 소스 테이블 버킷의 모든 테이블에 적용돼요.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
  2. 탐색 창에서 Table buckets를 선택해요.
  3. Table buckets 목록에서 복제를 구성하려는 테이블 버킷 이름을 선택해요.
  4. Management 탭을 선택해요.
  5. Table bucket replication configuration 섹션에서 Create table bucket replication configuration을 선택해요.
  6. Destination 섹션에서 복제 대상을 구성해요.
    • Table bucket ARN 필드에 대상 테이블 버킷의 ARN을 입력해요. 형식은 arn:aws:s3tables:region:account-id:bucket/table-bucket-name이에요. 또는 Browse S3를 선택해 계정에서 테이블 버킷을 선택할 수 있어요.
    • (선택 사항) 대상을 더 추가하려면 Add destination을 선택해요. 총 5개 대상을 위해 테이블 버킷을 최대 4개 더 추가할 수 있어요.
  7. 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 콘솔에서 선택한 역할의 권한을 검토해요.
  8. Create replication configuration을 선택해요. 복제 구성을 만든 뒤 Amazon S3가 초기 백필 프로세스를 시작해요. Table replication status 섹션에서 복제 상태를 모니터링할 수 있는데, 여기에는 복제 상태, 대상 테이블 ARN, 마지막으로 복제된 메타데이터 같은 각 대상에 대한 정보가 표시돼요.

Amazon S3 콘솔로 테이블 수준 복제 구성을 만드는 절차는 다음과 같아요. 테이블 복제 구성은 특정 테이블에 적용되며 해당 테이블에 대한 버킷 수준 복제 구성을 재정의해요.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
  2. 탐색 창에서 Table buckets를 선택해요.
  3. Table buckets 목록에서 복제하려는 테이블이 들어 있는 테이블 버킷 이름을 선택해요.
  4. Tables 탭을 선택해요.
  5. Tables 목록에서 복제하려는 테이블 이름을 선택해요.
  6. Management 탭을 선택해요.
  7. Table replication configuration 섹션에서 Create table replication configuration을 선택해요.
  8. Destination 섹션에서 복제 대상을 구성해요.
    • Table bucket ARN 필드에 대상 테이블 버킷의 ARN을 입력해요. 형식은 arn:aws:s3tables:region:account-id:bucket/table-bucket-name이에요. 또는 Browse S3를 선택해 계정에서 테이블 버킷을 선택할 수 있어요.
    • (선택 사항) 대상을 더 추가하려면 Add destination을 선택해요. 총 5개 대상을 위해 테이블 버킷을 최대 4개 더 추가할 수 있어요.
  9. 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 콘솔에서 선택한 역할의 권한을 검토해요.
  10. Create replication configuration을 선택해요.

그 다음은 어떻게 되나요?

복제 구성을 만든 후:

  • Amazon S3가 초기 백필 프로세스를 시작해 각 대상 버킷에 복제 테이블을 만들어요.
  • 백필이 시작되면 복제 상태가 Replicating으로 바뀌어요.
  • Management 탭에서 복제 진행 상황을 모니터링할 수 있어요.
  • 초기 복제 시간은 소스 테이블의 크기에 따라 달라져요.

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
    

    참고: 권한 정책은 작업이 서로 다른 수준에서 동작하기 때문에 두 개의 리소스 범위를 사용해요. CreateTable과 CreateNamespace는 버킷에 리소스를 만드는 버킷 수준 작업이라 /table/*이 없는 버킷 ARN을 사용해요. PutTableData, GetTableData, UpdateTableMetadataLocation, PutTableMaintenanceConfiguration은 기존 테이블에 대해 동작하므로 /table/*이 있는 버킷 ARN을 사용해요.

  5. (선택 사항) 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 계정으로 복제하는 경우 대상 계정이 소스 계정에 권한을 부여해야 해요.

  1. 대상 계정에서 대상 테이블 버킷의 버킷 정책을 만들어요. 이 파일을 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"
            }
        ]
    }
    
  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 \
        --resource-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"
            }
        ]
    }
    

3단계: 복제 구성 만들기

테이블 버킷 수준이나 테이블 수준에서 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"
    }
    

더 알아보기 (Learn more)

  • S3 Tables 복제는 어떻게 동작하나요 (How S3 Tables replication works)
  • S3 Tables 복제 관리하기 (Managing S3 Tables replication)