Considerações sobre a integração entre contas com a CMK - Amazon DynamoDB

Considerações sobre a integração entre contas com a CMK

Quando você tenta fazer a integração com o Amazon Redshift pelo DynamoDB, a ação inicial é iniciada pelo Amazon Redshift. Sem as permissões adequadas, essa ação pode gerar uma falha silenciosa. As seções a seguir detalham as permissões necessárias para essa integração entre contas.

Políticas e permissões obrigatórias do AWS KMS

Substitua os seguintes espaços reservados nos exemplos.

  • REDSHIFT_ACCOUNT_ID: o ID da Conta da AWS em que o Amazon Redshift está hospedado.

  • DYNAMODB_ACCOUNT_ID: o ID da Conta da AWS em que o DynamoDB está hospedado.

  • REDSHIFT_ROLE_NAME: o nome do perfil do IAM usado pelo Amazon Redshift.

  • REGION: a Região da AWS em que seus recursos estão localizados.

  • TABLE_NAME: o nome da sua tabela do DynamoDB.

  • KMS_KEY_ID: o ID da sua chave do KMS.

Política de chave do KMS na conta do DynamoDB

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

Política do IAM para o perfil do Amazon Redshift (na conta do 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" } ] }

Relação de confiança para o perfil do Amazon Redshift

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Política de tabela do DynamoDB (se estiver usando políticas baseadas em recursos)

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

Considerações importantes

  1. Verifique se a chave do KMS está na mesma região que sua tabela do DynamoDB.

  2. A chave do KMS deve ser uma chave gerenciada pelo cliente (CMK), não uma Chave gerenciada pela AWS.

  3. Se você estiver usando tabelas globais do DynamoDB, configure as permissões para todas as regiões relevantes.

  4. Considere a possibilidade de adicionar declarações condicionais para restringir o acesso com base em endpoints da VPC ou intervalos de IP.

  5. Para aumentar a segurança, considere a possibilidade de usar a condição aws:PrincipalOrgID para restringir o acesso à sua organização.

  6. Monitore o uso da chave do KMS por meio das métricas do CloudTrail e do CloudWatch.