Attache d’une politique à une table DynamoDB existante - Amazon DynamoDB

Attache d’une politique à une table DynamoDB existante

Vous pouvez associer une politique basée sur les ressources à une table existante ou modifier une politique existante à l’aide de la console DynamoDB, de l’API PutResourcePolicy, de l’AWS CLI, du kit AWS SDK ou d’un modèle CloudFormation.

L’exemple de politique IAM suivant utilise la commande d’AWS CLI put-resource-policy pour attacher une politique basée sur les ressources à une table existante. Cet exemple permet à l’utilisateur John d’exécuter les actions d’API GetItem, PutItem, UpdateItem et UpdateTable sur une table existante nommée MusicCollection.

N’oubliez pas de remplacer le texte en italique par les informations spécifiques à la ressource.

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\" } ] }"

Pour mettre à jour de manière conditionnelle la politique basée sur les ressources existante d’une table, vous pouvez utiliser le paramètre facultatif expected-revision-id. L’exemple suivant met à jour la politique uniquement si elle existe dans DynamoDB et si son ID de révision actuel correspond au paramètre expected-revision-id fourni.

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\" } ] }"
  1. Connectez-vous à l’AWS Management Console et ouvrez la console DynamoDB à l’adresse https://console.aws.amazon.com/dynamodb/.

  2. Sur le tableau de bord, choisissez une table existante.

  3. Accédez à l’onglet Autorisations, puis choisissez Créer une politique pour la table.

  4. Dans l’éditeur de politique basée sur les ressources, ajoutez la politique que vous souhaitez associer et choisissez Créer une politique.

    L’exemple de politique IAM suivant permet à l’utilisateur John d’exécuter les actions d’API GetItem, PutItem, UpdateItem et UpdateTable sur une table existante nommée MusicCollection.

    N’oubliez pas de remplacer le texte en italique par les informations spécifiques à la ressource.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/username" }, "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:UpdateTable" ], "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection" } ] }

L’exemple de politique IAM suivant utilise la méthode putResourcePolicy pour attacher une politique basée sur les ressources à une table existante. Cette politique permet à un utilisateur d’exécuter l’action de l’API GetItem sur une table existante.

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" + "}"; } }