Acceso a DAX a través de las cuentas de AWS
Imagine que tiene un clúster de DynamoDB Accelerator (DAX) ejecutándose en una cuenta de AWS (cuenta A) y que el clúster de DAX debe ser accesible desde una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en otra cuenta de AWS (cuenta B). En este tutorial, lo logrará lanzando una instancia EC2 en la cuenta B con un rol de IAM de la cuenta B. A continuación, utiliza las credenciales de seguridad temporales de la instancia EC2 para asumir un rol de IAM de la cuenta A. Por último, utiliza las credenciales de seguridad temporales de asumir el rol de IAM en la cuenta A para realizar llamadas a la aplicación a través de una interconexión de Amazon VPC al clúster de DAX en la cuenta A. Para realizar estas tareas necesitará acceso administrativo en ambas cuentas de AWS.
importante
No es posible hacer que un clúster DAX acceda a una tabla de DynamoDB desde una cuenta diferente.
Temas
Configurar IAM
-
Cree un archivo de texto denominado
AssumeDaxRoleTrust.json
con el siguiente contenido, que permite a Amazon EC2 trabajar en su nombre.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
En la cuenta B, cree un rol que Amazon EC2 pueda utilizar al lanzar instancias.
aws iam create-role \ --role-name AssumeDaxRole \ --assume-role-policy-document file://AssumeDaxRoleTrust.json
-
Cree un archivo de texto denominado
AssumeDaxRolePolicy.json
con el siguiente contenido, que permite que el código que se ejecuta en la instancia EC2 en la cuenta B asuma un rol de IAM en la cuenta A. ReemplaceaccountA
por el ID real de la cuenta A.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
accountA
:role/DaxCrossAccountRole" } ] } -
Agregue esa política al rol que acaba de crear.
aws iam put-role-policy \ --role-name AssumeDaxRole \ --policy-name AssumeDaxRolePolicy \ --policy-document file://AssumeDaxRolePolicy.json
-
Cree un perfil de instancia para permitir que las instancias utilicen el rol.
aws iam create-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile
-
Asocie el rol con el perfil de instancia.
aws iam add-role-to-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile \ --role-name AssumeDaxRole
-
Cree un archivo de texto denominado
DaxCrossAccountRoleTrust.json
con el siguiente contenido, lo que permite a la cuenta B asumir un rol de cuenta A. ReemplacecuentaB
por el ID real de la cuenta B.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
accountB
:role/AssumeDaxRole" }, "Action": "sts:AssumeRole" } ] } -
En la cuenta A, cree el rol que la cuenta B puede asumir.
aws iam create-role \ --role-name DaxCrossAccountRole \ --assume-role-policy-document file://DaxCrossAccountRoleTrust.json
-
Cree un archivo de texto denominado
DaxCrossAccountPolicy.json
que permita el acceso al clúster de DAX. Reemplacedax-cluster-arn
por el nombre de recurso de Amazon (ARN) correcto de su clúster de DAX.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan", "dax:PutItem", "dax:UpdateItem", "dax:DeleteItem", "dax:BatchWriteItem", "dax:ConditionCheckItem" ], "Resource": "
dax-cluster-arn
" } ] } -
En la cuenta A, agregue la política al rol.
aws iam put-role-policy \ --role-name DaxCrossAccountRole \ --policy-name DaxCrossAccountPolicy \ --policy-document file://DaxCrossAccountPolicy.json
Configurar una VPC
-
Busque el grupo de subred del clúster de DAX de la cuenta A. Reemplace
cluster-name
por el nombre del clúster de DAX al que debe tener acceso la cuenta B.aws dax describe-clusters \ --cluster-name
cluster-name
--query 'Clusters[0].SubnetGroup' -
Utilizando ese
grupo de subred
, busque la VPC del clúster.aws dax describe-subnet-groups \ --subnet-group-name
subnet-group
\ --query 'SubnetGroups[0].VpcId' -
Usando ese
vpc-id
, busque el CIDR de la VPC.aws ec2 describe-vpcs \ --vpc
vpc-id
\ --query 'Vpcs[0].CidrBlock' -
Desde la cuenta B, cree una VPC utilizando un CIDR diferente y no superpuesto que el encontrado en el paso anterior. A continuación, cree al menos una subred. Puede utilizar el asistente de creación de VPC en la AWS Management Console o en la AWS CLI.
-
Desde la cuenta B, solicite una interconexión a la VPC de la cuenta A como se describe en Creación y aceptación de una conexión de emparejamiento de VPC. Desde la cuenta A, acepte la conexión.
-
En la cuenta B, busque la nueva tabla de ruteo de la VPC. Reemplace
vpc-id
por el ID de la VPC que creó en la cuenta B.aws ec2 describe-route-tables \ --filters 'Name=vpc-id,Values=
vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
Agregue una ruta para enviar tráfico destinado al CIDR de la cuenta A a la interconexión de VPC. Recuerde reemplazar cada
marcador de posición de entrada de usuario
por los valores correctos para sus cuentas.aws ec2 create-route \ --route-table-id
accountB-route-table-id
\ --destination-cidraccountA-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
En la cuenta A, busque la tabla de enrutamiento del clúster de DAX utilizando el
vpc-id
que encontró anteriormente.aws ec2 describe-route-tables \ --filters 'Name=vpc-id, Values=
accountA-vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
Desde la cuenta A, agregue una ruta para enviar tráfico destinado al CIDR de la cuenta B a la interconexión de VPC. Reemplace cada
marcador de posición de entrada de usuario
por los valores correctos para sus cuentas.aws ec2 create-route \ --route-table-id
accountA-route-table-id
\ --destination-cidraccountB-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
Desde la cuenta B, lance una instancia EC2 en la VPC que creó anteriormente. Dele el
AssumeDaxInstanceProfile
. Puede utilizar el asistente de inicio en la AWS Management Console o en la AWS CLI. Tome nota del grupo de seguridad de la instancia. -
En la cuenta A, busque el grupo de seguridad utilizado por el clúster de DAX. Recuerde sustituir
cluster-name
por el nombre de su clúster de DAX.aws dax describe-clusters \ --cluster-name
cluster-name
\ --query 'Clusters[0].SecurityGroups[0].SecurityGroupIdentifier' -
Actualice el grupo de seguridad del clúster de DAX para permitir el tráfico entrante desde el grupo de seguridad de la instancia EC2 que creó en la cuenta B. Recuerde sustituir los
marcadores de posición de entrada del usuario
por los valores correctos para sus cuentas.aws ec2 authorize-security-group-ingress \ --group-id
accountA-security-group-id
\ --protocol tcp \ --port 8111 \ --source-groupaccountB-security-group-id
\ --group-owneraccountB-id
En este punto, una aplicación en la instancia EC2 de la cuenta B puede utilizar el perfil de instancias para asumir el rol arn:aws:iam::
y utilizar el clúster de DAX.accountA-id
:role/DaxCrossAccountRole
Modificar el cliente de DAX para permitir el acceso entre cuentas
nota
Las credenciales de AWS Security Token Service (AWS STS) son credenciales temporales. Algunos clientes manejan la actualización automáticamente, mientras que otros requieren lógica adicional para actualizar las credenciales. Le recomendamos que siga las instrucciones de la documentación correspondiente.