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
-
Verifique se a chave do KMS está na mesma região que sua tabela do DynamoDB.
-
A chave do KMS deve ser uma chave gerenciada pelo cliente (CMK), não uma Chave gerenciada pela AWS.
-
Se você estiver usando tabelas globais do DynamoDB, configure as permissões para todas as regiões relevantes.
-
Considere a possibilidade de adicionar declarações condicionais para restringir o acesso com base em endpoints da VPC ou intervalos de IP.
-
Para aumentar a segurança, considere a possibilidade de usar a condição
aws:PrincipalOrgIDpara restringir o acesso à sua organização. -
Monitore o uso da chave do KMS por meio das métricas do CloudTrail e do CloudWatch.