CMK와 교차 계정 통합 시 고려 사항
DynamoDB에서 Amazon Redshift로 통합을 시도하면 Amazon Redshift에서 초기 작업이 시작됩니다. 적절한 권한이 없는 경우 이 작업이 자동으로 실패할 수 있습니다. 다음 섹션에서는 이 교차 계정 통합에 필요한 권한을 자세히 설명합니다.
필요한 AWS KMS 정책 및 권한
예시의 다음 자리 표시자를 교체합니다.
-
REDSHIFT_ACCOUNT_ID: Amazon Redshift가 호스팅되는 AWS 계정 ID -
DYNAMODB_ACCOUNT_ID: DynamoDB가 호스팅되는 AWS 계정 ID -
REDSHIFT_ROLE_NAME: Amazon Redshift에서 사용하는 IAM 역할 이름 -
REGION: 리소스가 위치한 AWS 리전 -
TABLE_NAME: DynamoDB 테이블의 이름 -
KMS_KEY_ID: KMS 키의 ID
DynamoDB 계정의 KMS 키 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::DYNAMODB_ACCOUNT_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow Redshift to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::REDSHIFT_ACCOUNT_ID:role/REDSHIFT_ROLE_NAME" }, "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "*" } ] }
Amazon Redshift 역할에 대한 IAM 정책(Amazon Redshift 계정)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBAccess", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:ParitalBatchGetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:ListStreams" ], "Resource": [ "arn:aws:dynamodb:REGION:DYNAMODB_ACCOUNT_ID:table/TABLE_NAME", "arn:aws:dynamodb:REGION:DYNAMODB_ACCOUNT_ID:table/TABLE_NAME/stream/*" ] }, { "Sid": "AllowKMSAccess", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "arn:aws:kms:REGION:DYNAMODB_ACCOUNT_ID:key/KMS_KEY_ID" } ] }
Amazon Redshift 역할의 신뢰 관계
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
DynamoDB 테이블 정책(리소스 기반 정책을 사용하는 경우)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRedshiftAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::REDSHIFT_ACCOUNT_ID:role/REDSHIFT_ROLE_NAME" }, "Action": [ "dynamodb:DescribeTable", "dynamodb:ParitalBatchGetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:ListStreams" ], "Resource": [ "arn:aws:dynamodb:REGION:DYNAMODB_ACCOUNT_ID:table/TABLE_NAME", "arn:aws:dynamodb:REGION:DYNAMODB_ACCOUNT_ID:table/TABLE_NAME/stream/*" ] } ] }
중요 고려 사항
-
KMS 키가 DynamoDB 테이블과 동일한 리전에 있어야 합니다.
-
KMS 키가 AWS 관리형 키가 아닌 고객 관리형 키(CMK)여야 합니다.
-
DynamoDB 글로벌 테이블을 사용하는 경우 모든 관련 리전에 대한 권한을 구성합니다.
-
VPC 엔드포인트 또는 IP 범위에 따라 액세스를 제한하는 조건문을 추가하는 것이 좋습니다.
-
보안 강화를 위해
aws:PrincipalOrgID조건을 사용하여 조직에 대한 액세스를 제한하는 것이 좋습니다. -
CloudTrail 및 CloudWatch 지표를 통해 KMS 키 사용을 모니터링합니다.