Amazon DynamoDB
Guía para desarrolladores (Versión de API 2012-08-10)

Uso de políticas basadas en identidad (políticas de IAM) de Amazon DynamoDB

En este tema se ofrecen ejemplos de políticas basadas en identidad que muestran cómo un administrador de la cuenta puede asociar políticas de permisos a identidades de IAM (es decir, usuarios, grupos y roles) y, de ese modo, conceder permisos para realizar operaciones en recursos de Amazon DynamoDB.

importante

Le recomendamos que consulte primero los temas de introducción en los que se explican los conceptos básicos y las opciones disponibles para administrar el acceso a sus recursos de Amazon DynamoDB. Para obtener más información, consulte Información general sobre la administración de los permisos de acceso a los recursos de Amazon DynamoDB.

En las secciones de este tema se explica lo siguiente:

A continuación se muestra un ejemplo de una política de permisos.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DescribeQueryScanBooksTable", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:us-west-2:account-id:table/Books" } ] }

La política contiene una instrucción que concede permisos para tres acciones de DynamoDB (dynamodb:DescribeTable, dynamodb:Query y dynamodb:Scan) en una tabla de la región us-west-2, propiedad de la cuenta de AWS especificada por account-id. El nombre de recurso de Amazon (ARN) del valor de Resource especifica la tabla a la que se aplican los permisos.

Permisos necesarios para usar la consola de Amazon DynamoDB

Para que un usuario pueda trabajar con la consola de DynamoDB, debe tener un conjunto mínimo de permisos que le permitan trabajar con los recursos de DynamoDB de su cuenta de AWS. Además de estos permisos de DynamoDB, la consola requiere permisos de los servicios siguientes:

  • Permisos de Amazon CloudWatch para mostrar las métricas y los gráficos.

  • Permisos de AWS Data Pipeline para exportar e importar datos de DynamoDB.

  • Permisos de AWS Identity and Access Management para obtener acceso a los roles necesarios para importar y exportar.

  • Permisos de Amazon Simple Notification Service para recibir notificaciones cada vez que se active una alarma de CloudWatch.

  • Permisos de AWS Lambda para procesar registros de Flujos de DynamoDB.

Si crea una política de IAM que sea más restrictiva que el mínimo de permisos necesarios, la consola no funcionará del modo esperado para los usuarios con esa política de IAM. Para asegurarse de que esos usuarios puedan seguir usando la consola de DynamoDB, asocie también la política administrada AmazonDynamoDBReadOnlyAccess al usuario, según se explica en Políticas administradas (predefinidas) por AWS para Amazon DynamoDB.

No es necesario que conceda permisos mínimos para la consola a los usuarios que solo realizan llamadas a la CLI de AWS o a la API de Amazon DynamoDB.

Políticas administradas (predefinidas) por AWS para Amazon DynamoDB

AWS aborda muchos casos de uso comunes proporcionando políticas de IAM independientes creadas y administradas por AWS. Estas políticas administradas por AWS conceden los permisos necesarios para casos de uso comunes, lo que le evita tener que investigar los permisos que se necesitan. Para obtener más información, consulte Políticas administradas de AWS en la Guía del usuario de IAM.

Las siguientes políticas administradas de AWS, que puede asociar a los usuarios de su cuenta, son específicas de DynamoDB y se agrupan según los escenarios de caso de uso:

  • AmazonDynamoDBReadOnlyAccess – Concede acceso de solo lectura a los recursos de DynamoDB mediante el uso de la Consola de administración de AWS.

  • AmazonDynamoDBFullAccess – Concede acceso pleno a los recursos de DynamoDB mediante el uso de la Consola de administración de AWS.

  • AmazonDynamoDBFullAccesswithDataPipeline – Concede acceso pleno a los recursos de DynamoDB, incluidos los permisos de exportación e importación por medio de AWS Data Pipeline, mediante el uso de Consola de administración de AWS.

nota

Para consultar estas políticas de permisos, inicie sesión en la consola de IAM y busque las políticas específicas.

También puede crear sus propias políticas de IAM personalizadas para conceder permisos para acciones y recursos de DynamoDB. Puede asociar estas políticas personalizadas a los usuarios o grupos de IAM que requieran esos permisos.

Ejemplos de políticas administradas por el cliente

En esta sección, encontrará ejemplos de políticas de usuario que conceden permisos para diversas acciones de DynamoDB. Estas políticas funcionan cuando se utilizan los SDK o la AWS CLI de AWS. Cuando se utiliza la consola, debe conceder permisos adicionales específicos a la consola, tal y como se explica en Permisos necesarios para usar la consola de Amazon DynamoDB.

nota

Todos los ejemplos utilizan la región us-west-2 y contienen identificadores de cuenta ficticios.

Ejemplo 1: Permiso para que un usuario realice cualquier acción de DynamoDB en una tabla

La siguiente política concede permisos para realizar todas las acciones de DynamoDB en una tabla. El valor de ARN especificado en el campo Resource identifica una tabla de una región determinada.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllAPIActionsOnBooks", "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

nota

Si sustituye el nombre de la tabla en el ARN del recurso (Books) por un carácter comodín (*), permitirá que se realice cualquier acción de DynamoDB en todas las tablas de la cuenta. Es importante estudiar con atención las implicaciones para la seguridad que podría acarrear una decisión de este tipo.

Ejemplo 2: Permiso para obtener acceso de solo lectura a los elementos de una tabla

La siguiente política concede permisos para las acciones GetItem y BatchGetItem de DynamoDB exclusivamente, por lo que establece el acceso de solo lectura a la tabla.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOnlyAPIActionsOnBooks", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Ejemplo 3: Permiso para realizar las operaciones Put, Update y Delete en una tabla determinada

La siguiente política concede permisos para realizar las acciones PutItem, UpdateItem y DeleteItem en una tabla concreta de DynamoDB.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PutUpdateDeleteOnBooks", "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Ejemplo 4: Permiso para obtener acceso a una tabla concreta y a todos sus índices

La siguiente política concede permisos para realizar todas las acciones de DynamoDB en una tabla (Book) y en todos los índices de esta última. Para obtener más información sobre cómo funcionan los índices, consulte Uso de índices secundarios para mejorar el acceso a los datos.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessAllIndexesOnBooks", "Effect": "Allow", "Action": [ "dynamodb:*" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Books", "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*" ] } ] }

Ejemplo 5: Configuración de políticas de permisos para entornos de pruebas y producción independientes

Supongamos que tiene entornos de pruebas y producción independientes, de tal forma que cada uno de ellos mantiene su propia versión de una tabla denominada ProductCatalog. Si crea estas tablas ProductCatalog desde la misma cuenta de AWS, las pruebas podrían afectar al entorno de producción, debido al modo en que se configuran los permisos. (Por ejemplo, los límites relativos a las acciones de creación y eliminación concurrentes se establecen para toda la cuenta de AWS). Por este motivo, cada acción que se realiza en el entorno de pruebas reduce el número de acciones que quedan disponibles en el entorno de producción. Además, existe el riesgo de que el código del entorno de pruebas obtenga por error acceso del entorno de producción. Para evitar estos problemas, puede ser conveniente crear cuentas de AWS independientes para los entornos de pruebas y de producción.

Supongamos, además, que tiene dos desarrolladores, Bob y Alice, que están realizando las pruebas de la tabla ProductCatalog. En lugar de crear una cuenta de AWS independiente para cada desarrollador, los desarrolladores pueden compartir la misma cuenta de prueba. En esta cuenta, puede crear una copia de la misma tabla para cada desarrollador; por ejemplo, Alice_ProductCatalog y Bob_ProductCatalog. En este caso, puede crear a los usuarios de IAM Alice y Bob en la cuenta de AWS que creó para el entorno de pruebas. A continuación, puede conceder permisos a estos usuarios para que lleven a cabo acciones de DynamoDB en las tablas de su propiedad.

Para conceder permisos a estos usuarios, puede realizar uno de los siguientes procedimientos:

  • Cree una política independiente para cada usuario y, a continuación, adjunte cada política a su usuario por separado. Por ejemplo, puede adjuntar la siguiente política al usuario Alice para concederle acceso a todas las acciones de DynamoDB en la tabla Alice_ProductCatalog:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllAPIActionsOnAliceTable", "Effect": "Allow", "Action": [ "dynamodb:*" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Alice_ProductCatalog" } ] }

    Después, puede crear una política distinta con un recurso diferente (la tabla Bob_ProductCatalog) para el usuario Bob.

  • En vez de adjuntar políticas a cada usuario, puede usar variables de políticas de IAM para escribir una sola política y adjuntársela a un grupo. Debe crear un grupo y, en el caso de este ejemplo, agregar a ese grupo a los dos usuarios, Alice y Bob. A continuación, se muestra un ejemplo en el que se conceden permisos para llevar a cabo todas las acciones de DynamoDB en la tabla ${aws:username}_ProductCatalog. Al evaluar la política, la variable ${aws:username} se reemplaza por el nombre de usuario del solicitante. Por ejemplo, si Alice envía una solicitud para que se agregue un elemento, la acción solamente se permite si Alice está agregando elementos a la tabla Alice_ProductCatalog.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllAPIActionsOnUserSpecificTable", "Effect": "Allow", "Action": [ "dynamodb:*" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_ProductCatalog" }, { "Sid": "AdditionalPrivileges", "Effect": "Allow", "Action": [ "dynamodb:ListTables", "dynamodb:DescribeTable", "cloudwatch:*", "sns:*" ], "Resource": "*" } ] }

nota

Cuando se utilizan variables de políticas de IAM, es preciso especificar de forma explícita en la política la versión 2012-10-17 del lenguaje de la política de acceso. La versión predeterminada del lenguaje de la política de acceso (2008-10-17) no admite variables de políticas.

En lugar de identificar una tabla específica como un recurso, puede utilizar un carácter comodín (*) para conceder permisos en todas las tablas cuyo nombre lleve antepuesto el nombre del usuario de IAM que realiza la solicitud, tal y como se muestra a continuación.

"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"

Ejemplo 6: Cómo evitar que un usuario adquiera ofertas de capacidad reservada

Los clientes de DynamoDB pueden adquirir capacidad reservada, como se describe en Precios de Amazon DynamoDB. Con capacidad reservada, se abona una tarifa inicial única y se adquiere el compromiso de abonar un nivel de uso mínimo, con un ahorro significativo, durante un periodo concreto. Puede utilizar la Consola de administración de AWS para consultar y adquirir capacidad reservada. Sin embargo, puede que no sea conveniente que todos los usuarios de la organización tengan los mismos niveles de acceso.

DynamoDB ofrece las siguientes operaciones de API para controlar el acceso a la administración de la capacidad reservada:

  • dynamodb:DescribeReservedCapacity – Devuelve las adquisiciones de capacidad reservada que se encuentran en vigor.

  • dynamodb:DescribeReservedCapacityOfferings – Devuelve detalles sobre los planes de capacidad reservada que AWS ofrece en ese momento.

  • dynamodb:PurchaseReservedCapacityOfferings – Lleva a cabo la adquisición propiamente dicha de la capacidad reservada.

La Consola de administración de AWS utiliza estas operaciones de API para mostrar información sobre la capacidad reservada y realizar adquisiciones. No puede llamar a estas operaciones desde un programa de aplicación, ya que solo son accesibles desde la consola. Sin embargo, sí puede permitir o denegar el acceso a estas operaciones en una política de permisos de IAM.

La siguiente política permite a los usuarios consultar las ofertas y las adquisiciones actuales de capacidad reservada mediante la Consola de administración de AWS —pero no permite llevar a cabo nuevas adquisiciones.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReservedCapacityDescriptions", "Effect": "Allow", "Action": [ "dynamodb:DescribeReservedCapacity", "dynamodb:DescribeReservedCapacityOfferings" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*" }, { "Sid": "DenyReservedCapacityPurchases", "Effect": "Deny", "Action": "dynamodb:PurchaseReservedCapacityOfferings", "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*" } ] }

Ejemplo 7: Permiso de acceso de lectura para una secuencia de DynamoDB solamente (no para la tabla)

Cuando se habilita un Flujos de DynamoDB en una tabla, obtiene información sobre cada modificación de los elementos de datos de esa tabla. Para obtener más información, consulte Captura de la actividad de las tablas con Flujos de DynamoDB.

En algunos casos, es posible que desee impedir que una aplicación lea datos desde una tabla de DynamoDB, pero al mismo tiempo desee permitir que se pueda obtener acceso a la secuencia de esa tabla. Por ejemplo, puede configurar AWS Lambda para que sondee la secuencia e invoque una función Lambda cuando se detecten actualizaciones de elementos y, a continuación, realice un procesamiento adicional.

Existen las siguientes acciones disponibles para controlar el acceso a Flujos de DynamoDB:

  • dynamodb:DescribeStream

  • dynamodb:GetRecords

  • dynamodb:GetShardIterator

  • dynamodb:ListStreams

En el ejemplo siguiente se crea una política que concede a los usuarios permisos para obtener acceso a las secuencias de una tabla denominada GameScores. El carácter comodín (*) que aparece al final del ARN permite obtener todos los identificadores de secuencia asociados a esa tabla.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessGameScoresStreamOnly", "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListStreams" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/stream/*" } ] }

Observe que esta política permite obtener acceso a las secuencias de la tabla GameScores, pero no a la tabla en sí.

Ejemplo 8: Permiso para que una función AWS Lambda procese registros de secuencias de DynamoDB

Si desea llevar a acabo determinadas acciones basándose en los nuevos eventos de una secuencia de DynamoDB, puede escribir una función AWS Lambda que sea activada por esos nuevos eventos. Para obtener más información acerca del uso de Lambda con eventos de secuencia, consulte Disparadores de Flujos de DynamoDB y AWS Lambda. Una función Lambda de este tipo requiere permisos para leer los datos de la secuencia de DynamoDB.

Para conceder permisos a Lambda, se utiliza la política de permisos asociada al rol de IAM (rol de ejecución) de la función Lambda. Este rol se especifica al crear dicha función Lambda.

Por ejemplo, puede asociar la siguiente política de permisos al rol de ejecución con el fin de conceder permisos a Lambda para realizar las acciones de Flujos de DynamoDB indicadas.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaFunctionInvocation", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "*" ] }, { "Sid": "AllAPIAccessForDynamoDBStreams", "Effect": "Allow", "Action": [ "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream", "dynamodb:ListStreams" ], "Resource": "*" } ] }

Para obtener más información, consulte Modelo de permisos de AWS Lambda en la AWS Lambda Developer Guide.