Asociación de una política a una tabla de DynamoDB existente
Puede asociar una política basada en recursos a una tabla existente o modificar una política existente desde la consola de DynamoDB, la API PutResourcePolicy, la AWS CLI, el SDK de AWS o la plantilla de AWS CloudFormation.
En el siguiente ejemplo de política de IAM se utiliza el comando put-resource-policy
de la AWS CLI para asociar una política basada en recursos a una tabla existente. En este ejemplo, el usuario John
puede ejecutar las acciones de la API GetItem, PutItem, UpdateItem y UpdateTable en una tabla existente denominada MusicCollection
.
Recuerde reemplazar el texto en cursiva
por la información específica del recurso.
aws dynamodb put-resource-policy \ --resource-arn arn:aws:dynamodb:us-west-2:
123456789012
:table/MusicCollection
\ --policy \ "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"AWS\": \"arn:aws:iam::111122223333
:user/John
\" }, \"Action\": [ \"dynamodb:GetItem\", \"dynamodb:PutItem\", \"dynamodb:UpdateItem\", \"dynamodb:UpdateTable\" ], \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012
:table/MusicCollection
\" } ] }"
Para actualizar condicionalmente una política basada en recursos existente de una tabla, puede usar el parámetro expected-revision-id
opcional. En el siguiente ejemplo solo se actualiza la política si existe en DynamoDB y si su ID de revisión actual coincide con el parámetro expected-revision-id
proporcionado.
aws dynamodb put-resource-policy \ --resource-arn arn:aws:dynamodb:us-west-2:123456789012:table/
MusicCollection
\ --expected-revision-id 1709841168699 \ --policy \ "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"AWS\": \"arn:aws:iam::111122223333:user/John
\" }, \"Action\": [ \"dynamodb:GetItem\", \"dynamodb:UpdateItem\", \"dynamodb:UpdateTable\" ], \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection
\" } ] }"
Inicie sesión en la AWS Management Console y abra la consola de DynamoDB en https://console.aws.amazon.com/dynamodb/
. -
En el panel de, elija una tabla existente.
-
Vaya a la pestaña Permisos y elija Crear política de tabla.
-
En el editor de políticas basadas en recursos, añada la política que desea asociar y elija Crear política.
En el siguiente ejemplo de política de IAM, el usuario
John
puede ejecutar las acciones de la API GetItem, PutItem, UpdateItem y UpdateTable en una tabla existente denominadaMusicCollection
.Recuerde reemplazar el texto en
cursiva
por la información específica del recurso.
En el siguiente ejemplo de política de IAM se utiliza el método putResourcePolicy
para asociar una política basada en recursos a una tabla existente. Esta política permite a un usuario realizar la acción de la API GetItem en una tabla existente.
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.model.PutResourcePolicyRequest; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * Get started with the AWS SDK for Java 2.x */ public class PutResourcePolicy { public static void main(String[] args) { final String usage = """ Usage: <tableArn> <allowedAWSPrincipal> Where: tableArn - The Amazon DynamoDB table ARN to attach the policy to. For example, arn:aws:dynamodb:us-west-2:
123456789012
:table/MusicCollection
. allowedAWSPrincipal - Allowed AWS principal ARN that the example policy will give access to. For example, arn:aws:iam::123456789012
:user/John
. """; if (args.length != 2) { System.out.println(usage); System.exit(1); } String tableArn = args[0]; String allowedAWSPrincipal = args[1]; System.out.println("Attaching a resource-based policy to the Amazon DynamoDB table with ARN " + tableArn); Region region = Region.US_WEST_2; DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build(); String result = putResourcePolicy(ddb, tableArn, allowedAWSPrincipal); System.out.println("Revision ID for the attached policy is " + result); ddb.close(); } public static String putResourcePolicy(DynamoDbClient ddb, String tableArn, String allowedAWSPrincipal) { String policy = generatePolicy(tableArn, allowedAWSPrincipal); PutResourcePolicyRequest request = PutResourcePolicyRequest.builder() .policy(policy) .resourceArn(tableArn) .build(); try { return ddb.putResourcePolicy(request).revisionId(); } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); } return ""; } private static String generatePolicy(String tableArn, String allowedAWSPrincipal) { return "{\n" + " \"Version\": \"2012-10-17\",\n" + " \"Statement\": [\n" + " {\n" + " \"Effect\": \"Allow\",\n" + " \"Principal\": {\"AWS\":\"" + allowedAWSPrincipal + "\"},\n" + " \"Action\": [\n" + " \"dynamodb:GetItem\"\n" + " ],\n" + " \"Resource\": \"" + tableArn + "\"\n" + " }\n" + " ]\n" + "}"; } }