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.

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

  • 444455556666: 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

A política de chave AWS KMS a seguir permite o acesso entre contas entre seus serviços do DynamoDB e do Amazon Redshift. Neste exemplo, a conta 444455556666 contém a tabela e a chave AWS KMS do DynamoDB, enquanto a conta 111122223333 contém o cluster do Amazon Redshift que precisa de acesso para descriptografar os dados.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow Redshift to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333: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)

A política do IAM a seguir permite que um serviço do Amazon Redshift acesse tabelas do DynamoDB e as chaves de criptografia AWS KMS associadas em um cenário entre contas. Neste exemplo, a conta 444455556666 contém os recursos do DynamoDB e as chaves do AWS KMS que o serviço Amazon Redshift precisa acessar.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBAccess", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:BatchGetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:ListStreams" ], "Resource": [ "arn:aws:dynamodb:*:444455556666:table/TABLE_NAME", "arn:aws:dynamodb:*:444455556666:table/TABLE_NAME/stream/*" ] }, { "Sid": "AllowKMSAccess", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "arn:aws:kms:us-east-1:444455556666:key/KMS_KEY_ID" } ] }

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

JSON
{ "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)

A política baseada em recursos a seguir permite que um serviço do Amazon Redshift na conta 111122223333 acesse tabelas e fluxos do DynamoDB na conta 444455556666. Anexe essa política à sua tabela do DynamoDB para permitir o acesso entre contas.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowRedshiftAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/REDSHIFT_ROLE_NAME" }, "Action": [ "dynamodb:DescribeTable", "dynamodb:BatchGetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:ListStreams" ], "Resource": [ "arn:aws:dynamodb:*:444455556666:table/TABLE_NAME", "arn:aws:dynamodb:*:444455556666: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.