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\" } ] }"
Connectez-vous à l’AWS Management Console et ouvrez la console DynamoDB à l’adresse https://console.aws.amazon.com/dynamodb/
. -
Sur le tableau de bord, choisissez une table existante.
-
Accédez à l’onglet Autorisations, puis choisissez Créer une politique pour la table.
-
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
Johnd’exécuter les actions d’API GetItem, PutItem, UpdateItem et UpdateTable sur une table existante nomméeMusicCollection.N’oubliez pas de remplacer le texte en
italiquepar les informations spécifiques à la ressource.
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" + "}"; } }