Configurar el acceso entre cuentas a Amazon DynamoDB - Recomendaciones de AWS

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

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

Resumen

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 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 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

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 y configurado 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. Para los puntos de conexión específicos, consulte la página Service endpoints and quotas y elija el enlace del servicio.

Arquitectura

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.

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.

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 en Amazon S3 y añadir los permisos al rol de ejecución de Lambda en la cuenta B.

Tools (Herramientas)

Servicios de AWS

  • Amazon DynamoDB 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) 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 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 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

Epics

TareaDescripciónHabilidades requeridas

Cree una política en la cuenta B.

Esta política de IAM permite la PutItemacción para una tabla de DynamoDB en la cuenta A.

  1. Inicie sesión en la cuenta B en. Consola de administración de AWS

  2. Abra la consola de IAM.

  3. En el panel de navegación, seleccione Políticas y, a continuación, Crear política.

  4. En la página Especificar permisos del editor de políticas, seleccione JSON.

  5. Escriba la siguiente política.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }
  6. Sustituya <Region> y <Account-A-ID> por sus valores y, a continuación, seleccione Siguiente.

  7. En Nombre de la política, especifique un nombre único para la política; por ejemplo DynamoDB-PutItem-Policy.

  8. (Opcional) Añada una descripción de la política.

  9. Elija Crear política.

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.

  1. Abra la consola de IAM.

  2. En el panel de navegación, seleccione Roles y luego seleccione Crear rol.

  3. En Select trusted entity (Seleccionar entidad de confianza), elija Servicio de AWS.

  4. En la sección Caso de uso, elija Lambda.

  5. Elija Next: Permissions (Siguiente: Permisos).

  6. En el cuadro Filter policies (Políticas de filtro), escriba DynamoDB.

  7. En la lista de políticas de DynamoDB, elija DynamoDB-PutItem-Policy.

  8. Desactive la casilla Filtrar políticas y, a continuación, escriba Lambda.

  9. En la lista de políticas Lambda, elija AWSLambda Ejecutar.

  10. Seleccione Siguiente: asigne un nombre, revise y cree.

  11. En Nombre del rol, ingrese un nombre único para su rol, por ejemplo, DynamoDB-PutItemAccess.

  12. (Opcional) Añada una descripción del rol.

  13. De manera opcional, agregue metadatos al rol al asociar etiquetas como pares de clave-valor.

  14. Seleccione Crear rol.

Para obtener más información sobre los usuarios de IAM, consulte la documentación de IAM.

AWS general

Apunte el ARN del rol .

  1. Abra la consola de IAM.

  2. Seleccione Roles en el panel de navegación.

  3. En el cuadro de búsqueda, introduzca DynamoDB-PutItemAccess y, a continuación, seleccione el rol.

  4. En la página de resumen del rol, copie el nombre de recurso de Amazon (ARN). El ARN se usa al configurar la función de Lambda.

AWS general
TareaDescripciónHabilidades requeridas

Crear una tabla de DynamoDB.

Utilice el siguiente AWS CLI comando para crear una tabla de DynamoDB.

aws dynamodb create-table \ --table-name Table-Account-A \ --attribute-definitions \ AttributeName=category,AttributeType=S \ AttributeName=item,AttributeType=S \ --key-schema \ AttributeName=category,KeyType=HASH \ AttributeName=item,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=5,WriteCapacityUnits=5 \ --resource-policy \ '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>" }, "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }'

Sustituya lo siguiente en el código de muestra:

  • <Account-B-ID> es el ID de la cuenta B.

  • <Role-Name> es el nombre del rol de IAM que ha creado, como DynamoDB-PutItemAccess.

  • <Region>es Región de AWS donde se va a crear la tabla de DynamoDB.

  • <Account-A-ID> es el ID de la cuenta A.

nota

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.

Para obtener más información acerca de la creación de tablas, consulte la documentación de DynamoDB.

AWS general
TareaDescripciónHabilidades requeridas

Cree una función de Lambda para escribir datos en DynamoDB.

  1. Inicie sesión en la cuenta B en. Consola de administración de AWS

  2. Abra la consola de Lambda.

  3. En el panel de navegación, seleccione Funciones y, a continuación, Crear una función.

  4. En Nombre, escriba lambda_write_function.

  5. En Runtime (Tiempo de ejecución), elija Python 3.8 o una versión más reciente.

  6. En Cambiar rol de ejecución predeterminado, seleccione Usar un rol existente.

  7. En Rol existente, elija el rol de IAM que creó, como DynamoDB-PutItemAccess.

  8. Elija Crear función.

  9. En la pestaña Código, pegue el código de ejemplo que se proporciona en la sección Información adicional de este patrón. Sustituya lo siguiente en el código de muestra:

    • <Account-A-ID> es el ID de la cuenta A.

    • <Region>es Región de AWS donde creó la tabla de DynamoDB.

  10. Elija Implementar.

  11. Seleccione Probar Esto le pide que configure un evento de prueba. Cree un evento nuevo con el nombre que prefiera, como MyTestEventForWrite, y guarde la configuración.

  12. Elija Test (Probar) de nuevo. Esto ejecuta la función de Lambda con el nombre del evento que ha proporcionado.

  13. Compruebe el resultado de la función. Esto indica que la función accedió a la tabla de DynamoDB en la cuenta A y pudo escribir datos en ella.

Para obtener más información sobre la creación de funciones de Lambda, consulte la documentación de Lambda.

AWS general
TareaDescripciónHabilidades 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:

  1. En la cuenta B, elimine la función de Lambda que haya creado para conectarse a DynamoDB. Para obtener instrucciones, consulte la documentación de Lambda.

  2. En la cuenta A, elimine la tabla de DynamoDB que creó. Para obtener instrucciones, consulte la documentación de DynamoDB.

  3. Para seguir las prácticas recomendadas de seguridad, elimine la política de IAM (DynamoDB-PutItem-Policy) cuando ya no sea necesaria. Para obtener más información, consulte la documentación de IAM.

  4. Para seguir las prácticas recomendadas de seguridad, elimine el rol de IAM (DynamoDB-PutItemAccess) cuando ya no sea necesario. Para obtener más información, consulte la documentación de IAM.

AWS general

Resolución de problemas

ProblemaSolució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

Información adicional

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.