Collegamento di una policy a una tabella DynamoDB esistente
È possibile collegare una policy basata su risorse a una tabella esistente o modificare una policy esistente utilizzando la console DynamoDB, l’API PutResourcePolicy, la AWS CLI, l’SDK AWS o un modello CloudFormation.
Il seguente esempio di policy IAM utilizza il comando della AWS CLI put-resource-policy per collegare una policy basata su risorse a una tabella esistente. Questo esempio consente all’utente John di eseguire le azioni API GetItem, PutItem, UpdateItem e UpdateTable su una tabella esistente denominata MusicCollection.
Ricorda di sostituire il testo in corsivo con le informazioni specifiche delle risorse.
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\" } ] }"
Per aggiornare in modo condizionale una policy basata su risorse esistente di una tabella, è possibile utilizzare il parametro opzionale expected-revision-id. L’esempio seguente aggiornerà la policy solo se esiste in DynamoDB e il suo ID di revisione corrente corrisponde al parametro expected-revision-id fornito.
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\" } ] }"
Accedi alla console Console di gestione AWS e apri la console DynamoDB all'indirizzo https://console.aws.amazon.com/elasticache/
. -
Dalla dashboard seleziona una tabella esistente.
-
Vai alla scheda Autorizzazioni e seleziona Crea una policy per le tabelle.
-
Nell’editor della policy basata su risorse, aggiungi la policy che desideri collegare e seleziona Crea policy.
Il seguente esempio di policy IAM consente all’utente
Johndi eseguire le azioni API GetItem, PutItem, UpdateItem e UpdateTable su una tabella esistente denominataMusicCollection.Ricorda di sostituire il testo
in corsivocon le informazioni specifiche delle risorse.
Il seguente esempio di policy IAM utilizza il metodo putResourcePolicy per collegare una policy basata su risorse a una tabella esistente. Questo criterio consente a un utente di eseguire l’azione API GetItem su una tabella esistente.
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" + "}"; } }