Consideraciones sobre la integración entre regiones con CMK
Cuando intenta realizar la integración de DynamoDB en Amazon Redshift, la acción inicial se lanza desde Amazon Redshift. Sin los permisos adecuados, esta acción podría provocar un error silencioso. En las siguientes secciones se detallan los permisos necesarios para esta integración entre cuentas.
Permisos y políticas de AWS KMS necesarios
Reemplace los marcadores de posición siguientes en los ejemplos:
-
REDSHIFT_ACCOUNT_ID
: el ID de Cuenta de AWS en el que se aloja Amazon Redshift -
DYNAMODB_ACCOUNT_ID
: el ID de Cuenta de AWS en el que se aloja DynamoDB -
REDSHIFT_ROLE_NAME
: el nombre del rol de IAM que utiliza Amazon Redshift -
REGION
: la Región de AWS en la que se ubican los recursos -
TABLE_NAME
: el nombre de la tabla de DynamoDB -
KMS_KEY_ID
: el ID de la clave de KMS
Política de claves de KMS en la cuenta de 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 de IAM para el rol de Amazon Redshift (en la cuenta de 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" } ] }
Relación de confianza para el rol de Amazon Redshift
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Política de tabla de DynamoDB (si se utilizan políticas basadas en 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/*" ] } ] }
Consideraciones importantes
-
Asegúrese de que la clave de KMS esté en la misma región que la tabla de DynamoDB.
-
La clave de KMS debe ser una clave administrada por el cliente (CMK), no una Clave administrada de AWS.
-
Si está utilizando tablas globales de DynamoDB, configure los permisos para todas las regiones pertinentes.
-
Considere agregar declaraciones de condición para restringir el acceso en función de los puntos de conexión de VPC o los rangos de IP.
-
Para mejorar la seguridad, considere el uso de la condición
aws:PrincipalOrgID
para restringir el acceso a la organización. -
Supervise el uso de la clave de KMS mediante métricas de CloudTrail y CloudWatch.