CMK와 교차 계정 통합 시 고려 사항 - Amazon DynamoDB

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/*" ] } ] }

중요 고려 사항

  1. KMS 키가 DynamoDB 테이블과 동일한 리전에 있어야 합니다.

  2. KMS 키가 AWS 관리형 키가 아닌 고객 관리형 키(CMK)여야 합니다.

  3. DynamoDB 글로벌 테이블을 사용하는 경우 모든 관련 리전에 대한 권한을 구성합니다.

  4. VPC 엔드포인트 또는 IP 범위에 따라 액세스를 제한하는 조건문을 추가하는 것이 좋습니다.

  5. 보안 강화를 위해 aws:PrincipalOrgID 조건을 사용하여 조직에 대한 액세스를 제한하는 것이 좋습니다.

  6. CloudTrail 및 CloudWatch 지표를 통해 KMS 키 사용을 모니터링합니다.