

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configurar el acceso entre cuentas a Amazon DynamoDB
<a name="configure-cross-account-access-to-amazon-dynamodb"></a>

*Shashi Dalmia, Imhoertha Ojior y Esteban Serna Parra, Amazon Web Services*

## Resumen
<a name="configure-cross-account-access-to-amazon-dynamodb-summary"></a>

Este patrón explica los pasos para configurar el acceso entre cuentas a Amazon DynamoDB mediante políticas basadas en recursos. En el caso de las cargas de trabajo que utilizan DynamoDB, cada vez es más común utilizar [estrategias de aislamiento de cargas de trabajo](https://aws.amazon.com/solutions/guidance/workload-isolation-on-aws/?did=sl_card&trk=sl_card) para minimizar las amenazas a la seguridad y cumplir con los requisitos de conformidad. La implementación de estrategias de aislamiento de la carga de trabajo a menudo requiere el acceso entre cuentas y regiones a los recursos de DynamoDB mediante AWS Identity and Access Management políticas basadas en la identidad (IAM). Esto implica establecer los permisos de IAM y establecer una relación de confianza entre. Cuentas de AWS

[Las políticas basadas en recursos para DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html) simplifican en gran medida la postura de seguridad de las cargas de trabajo entre cuentas. Este patrón proporciona pasos y código de ejemplo para demostrar cómo se pueden configurar AWS Lambda las funciones en una sola cuenta Cuenta de AWS para escribir datos en una tabla de base de datos de DynamoDB en una cuenta diferente.

## Requisitos previos y limitaciones
<a name="configure-cross-account-access-to-amazon-dynamodb-prereqs"></a>

**Requisitos previos **
+ Dos activas. Cuentas de AWS Este patrón hace referencia a estas cuentas como *Cuenta A* y *Cuenta B*.
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) para acceder a la cuenta A y crear la tabla de DynamoDB. Los demás pasos de este patrón proporcionan instrucciones para usar las consolas IAM, DynamoDB y Lambda. Si piensa utilizarla AWS CLI en su lugar, configúrela para acceder a ambas cuentas.

**Limitaciones**
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para conocer la disponibilidad de las regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para los puntos de conexión específicos, consulte la página [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="configure-cross-account-access-to-amazon-dynamodb-architecture"></a>

El siguiente diagrama muestra una arquitectura de cuenta única. AWS Lambda, Amazon Elastic Compute Cloud (Amazon EC2) y DynamoDB están todos en la misma cuenta. En este escenario, las funciones de Lambda y las EC2 instancias de Amazon pueden acceder a DynamoDB. Para conceder acceso a la tabla de DynamoDB, puede crear una política basada en identidades en IAM o una política basada en recursos en DynamoDB.

![Use los permisos de IAM para obtener acceso a una tabla de DynamoDB de la misma cuenta.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/cbb009eb-422d-4833-a1bc-0c571d83c21f.png)


En el siguiente diagrama se muestra una arquitectura de varias cuentas. Si los recursos de una de ellas Cuenta de AWS requieren acceso a una tabla de DynamoDB de una cuenta diferente, debe configurar una política basada en recursos en DynamoDB para conceder el acceso necesario. Por ejemplo, en el siguiente diagrama, el acceso a la tabla de DynamoDB de la cuenta A se concede a una función de Lambda de la cuenta B mediante una política basada en recursos.

![Uso de una política basada en recursos para obtener acceso a una tabla de DynamoDB de otra cuenta.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/9f9165a8-b767-4427-a2ae-31b5b8c83326.png)


En este patrón se describe el acceso entre cuentas entre Lambda y DynamoDB. Puede seguir estos pasos con otros pasos Servicios de AWS si se configuran los permisos adecuados en ambas cuentas. Por ejemplo, si desea proporcionar a una función de Lambda acceso a un bucket de Amazon Simple Storage Service (Amazon S3) en la cuenta A, puede crear una [política basada en recursos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) en Amazon S3 y añadir los permisos al [rol de ejecución de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) en la cuenta B.

## Tools (Herramientas)
<a name="configure-cross-account-access-to-amazon-dynamodb-tools"></a>

**Servicios de AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus recursos de AWS al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

**Código**

Este patrón incluye código de muestra en la sección de [Información adicional](#configure-cross-account-access-to-amazon-dynamodb-additional) para ilustrar cómo se puede configurar una función de Lambda en la cuenta B para escribir en la tabla de DynamoDB de la cuenta A. El código se proporciona únicamente con fines ilustrativos y de prueba. Si va a implementar este patrón en un entorno de producción, utilice el código como referencia y personalícelo para su propio entorno.

## Prácticas recomendadas
<a name="configure-cross-account-access-to-amazon-dynamodb-best-practices"></a>
+ Siga las [prácticas recomendadas para las políticas basadas en recursos](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-best-practices.html) de la documentación de DynamoDB.
+ Cumpla con el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="configure-cross-account-access-to-amazon-dynamodb-epics"></a>

### Creación de una política y rol de IAM para la función de Lambda en la cuenta B
<a name="create-an-iam-policy-and-role-for-the-lam-function-in-account-b"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una política en la cuenta B. | Esta política de IAM permite la [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)acción para una tabla de DynamoDB en la cuenta A.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS general | 
| Cree un rol en la cuenta B. | La función de Lambda de la cuenta B utiliza este rol de IAM para acceder a la tabla de DynamoDB de la cuenta A.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)<br />Para obtener más información sobre los usuarios de IAM, consulte la [documentación de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). | AWS general | 
| Apunte el ARN del rol . | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS general | 

### Crear una tabla en DynamoDB en la cuenta A
<a name="create-a-ddb-table-in-account-a"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una tabla de DynamoDB. | Utilice el siguiente AWS CLI comando para crear una tabla de DynamoDB.<pre> aws dynamodb create-table \<br />    --table-name Table-Account-A \<br />    --attribute-definitions \<br />      AttributeName=category,AttributeType=S \<br />      AttributeName=item,AttributeType=S \<br />    --key-schema \<br />      AttributeName=category,KeyType=HASH \<br />      AttributeName=item,KeyType=RANGE \<br />    --provisioned-throughput \<br />      ReadCapacityUnits=5,WriteCapacityUnits=5 \<br />    --resource-policy \<br />      '{         <br />          "Version": "2012-10-17",		 	 	 <br />          "Statement": [<br />            {                    <br />               "Sid": "Statement1",<br />               "Effect": "Allow",<br />               "Principal": {<br />                  "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>"<br />               },<br />               "Action": "dynamodb:PutItem",<br />               "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A"<br />            }            <br />         ]<br />      }'</pre><br />Sustituya lo siguiente en el código de muestra:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)Para especificar la configuración de la política basada en los recursos en la declaración `create-table`, utilice el indicador `--resource-policy`. Esta política hace referencia al ARN de la tabla de DynamoDB de la cuenta A.<br />Para obtener más información acerca de la creación de tablas, consulte la [documentación de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html). | AWS general | 

### Creación de una función de Lambda en la cuenta B
<a name="create-a-lam-function-in-account-b"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una función de Lambda para escribir datos en DynamoDB. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)Para obtener más información sobre la creación de funciones de Lambda, consulte la [documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html). | AWS general | 

### Limpieza
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Delete resources (Eliminar recursos). | Para evitar generar costos asociados a los recursos creados con este patrón, haga lo siguiente para eliminar los recursos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS general | 

## Resolución de problemas
<a name="configure-cross-account-access-to-amazon-dynamodb-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Al crear la función de Lambda, recibe un error `ResourceNotFoundException`. | Confirme que ha introducido correctamente el ID Región de AWS y el ID de la cuenta A. Forman parte del ARN de la tabla de DynamoDB. | 

## Recursos relacionados
<a name="configure-cross-account-access-to-amazon-dynamodb-resources"></a>
+ [Introducción a DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) (documentación de DynamoDB)
+ [Introducción a Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) (documentación de Lambda)
+ [Uso de políticas basadas en recursos de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html) (documentación de DynamoDB)
+ [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) (documentación de IAM)
+ [Lógica de evaluación de políticas entre cuentas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html) (documentación de IAM)
+ [Referencia de los elementos de las políticas de JSON de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) (documentación de IAM)

## Información adicional
<a name="configure-cross-account-access-to-amazon-dynamodb-additional"></a>

*Código de muestra*

```
import boto3
from datetime import datetime

dynamodb_client = boto3.client('dynamodb')

def lambda_handler(event, context):
     now = datetime.now().isoformat()
     data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}})
     return data
```

**nota**  
Cuando se crea el cliente de DynamoDB, se proporciona el ARN de la tabla de DynamoDB en lugar del nombre de la tabla. Esto es necesario para que la función de Lambda se conecte a la tabla de DynamoDB correcta cuando se ejecute.