Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Esempi di utilizzo di ABAC con tabelle e indici DynamoDB
Gli esempi seguenti illustrano alcuni casi d'uso per implementare condizioni basate sugli attributi utilizzando i tag.
Esempio 1: consentire un'azione utilizzando aws: ResourceTag
Utilizzando la chiave aws:ResourceTag/tag-key
condition, puoi confrontare la coppia chiave-valore del tag specificata in una policy IAM con la coppia chiave-valore allegata in una tabella DynamoDB. Ad esempio, puoi consentire un'azione specifica, ad esempio se le condizioni del tag corrispondono in una policy IAM e in una tabella. PutItem A tale scopo, procedi nel seguente modo:
- Using the AWS CLI
-
-
Creare una tabella . L'esempio seguente utilizza il AWS CLI comando create-table per creare una tabella denominata. myMusicTable
aws dynamodb create-table \
--table-name myMusicTable \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--region us-east-1
-
Aggiungi un tag a questa tabella. Il seguente esempio di AWS CLI comando tag-resource aggiunge la coppia chiave-valore del tag a. Title: ProductManager
myMusicTable
aws dynamodb tag-resource --region us-east-1
--resource-arn arn:aws:dynamodb:us-east-1
:123456789012
:table/myMusicTable --tags Key=Title,Value=ProductManager
-
Create una policy in linea e aggiungetela a un ruolo a cui è associata la policy AmazonDynamoDBReadOnlyAccess AWS gestita, come illustrato nell'esempio seguente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Questa politica consente l'PutItem
azione sulla tabella quando la chiave e il valore del tag allegati alla tabella corrispondono ai tag specificati nella politica.
-
Assumi il ruolo con le politiche descritte nella Fase 3.
-
Utilizzate il AWS CLI comando put-item per inserire un elemento in. myMusicTable
aws dynamodb put-item \
--table-name myMusicTable --region us-east-1 \
--item '{
"id": {"S": "2023"},
"title": {"S": "Happy Day"},
"info": {"M": {
"rating": {"N": "9"},
"Artists": {"L": [{"S": "Acme Band"}, {"S": "No One You Know"}]},
"release_date": {"S": "2023-07-21"}
}}
}'
-
Scansiona la tabella per verificare se l'elemento è stato aggiunto alla tabella.
aws dynamodb scan --table-name myMusicTable --region us-east-1
- Using the AWS SDK for Java 2.x
-
-
Creare una tabella . L'esempio seguente utilizza l'CreateTableAPI per creare una tabella denominatamyMusicTable
.
DynamoDbClient dynamoDB = DynamoDbClient.builder().region(region).build();
CreateTableRequest createTableRequest = CreateTableRequest.builder()
.attributeDefinitions(
Arrays.asList(
AttributeDefinition.builder()
.attributeName("id")
.attributeType(ScalarAttributeType.S)
.build()
)
)
.keySchema(
Arrays.asList(
KeySchemaElement.builder()
.attributeName("id")
.keyType(KeyType.HASH)
.build()
)
)
.provisionedThroughput(ProvisionedThroughput.builder()
.readCapacityUnits(5L)
.writeCapacityUnits(5L)
.build()
)
.tableName("myMusicTable")
.build();
CreateTableResponse createTableResponse = dynamoDB.createTable(createTableRequest);
String tableArn = createTableResponse.tableDescription().tableArn();
String tableName = createTableResponse.tableDescription().tableName();
-
Aggiungi un tag a questa tabella. L'TagResourceAPI nell'esempio seguente aggiunge la coppia chiave-valore del tag Title: ProductManager
a. myMusicTable
TagResourceRequest tagResourceRequest = TagResourceRequest.builder()
.resourceArn(tableArn)
.tags(
Arrays.asList(
Tag.builder()
.key("Title")
.value("ProductManager")
.build()
)
)
.build();
dynamoDB.tagResource(tagResourceRequest);
-
Create una policy in linea e aggiungetela a un ruolo a cui è associata la policy AmazonDynamoDBReadOnlyAccess AWS gestita, come illustrato nell'esempio seguente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Questa politica consente l'PutItem
azione sulla tabella quando la chiave e il valore del tag allegati alla tabella corrispondono ai tag specificati nella politica.
-
Assumi il ruolo con le politiche descritte nella Fase 3.
-
Usa l'PutItemAPI per inserire un elemento inmyMusicTable
.
HashMap<String, AttributeValue> info = new HashMap<>();
info.put("rating", AttributeValue.builder().s("9").build());
info.put("artists", AttributeValue.builder().ss(List.of("Acme Band","No One You Know").build());
info.put("release_date", AttributeValue.builder().s("2023-07-21").build());
HashMap<String, AttributeValue> itemValues = new HashMap<>();
itemValues.put("id", AttributeValue.builder().s("2023").build());
itemValues.put("title", AttributeValue.builder().s("Happy Day").build());
itemValues.put("info", AttributeValue.builder().m(info).build());
PutItemRequest putItemRequest = PutItemRequest.builder()
.tableName(tableName)
.item(itemValues)
.build();
dynamoDB.putItem(putItemRequest);
-
Scansiona la tabella per verificare se l'elemento è stato aggiunto alla tabella.
ScanRequest scanRequest = ScanRequest.builder()
.tableName(tableName)
.build();
ScanResponse scanResponse = dynamoDB.scan(scanRequest);
- Using the AWS SDK per Python (Boto3)
-
-
Creare una tabella . L'esempio seguente utilizza l'CreateTableAPI per creare una tabella denominatamyMusicTable
.
create_table_response = ddb_client.create_table(
AttributeDefinitions=[
{
'AttributeName': 'id',
'AttributeType': 'S'
},
],
TableName='myMusicTable',
KeySchema=[
{
'AttributeName': 'id',
'KeyType': 'HASH'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 5,
'WriteCapacityUnits': 5
},
)
table_arn = create_table_response['TableDescription']['TableArn']
-
Aggiungi un tag a questa tabella. L'TagResourceAPI nell'esempio seguente aggiunge la coppia chiave-valore del tag Title: ProductManager
a. myMusicTable
tag_resouce_response = ddb_client.tag_resource(
ResourceArn=table_arn,
Tags=[
{
'Key': 'Title',
'Value': 'ProductManager'
},
]
)
-
Create una policy in linea e aggiungetela a un ruolo a cui è associata la policy AmazonDynamoDBReadOnlyAccess AWS gestita, come illustrato nell'esempio seguente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Questa politica consente l'PutItem
azione sulla tabella quando la chiave e il valore del tag allegati alla tabella corrispondono ai tag specificati nella politica.
-
Assumi il ruolo con le politiche descritte nella Fase 3.
-
Usa l'PutItemAPI per inserire un elemento inmyMusicTable
.
put_item_response = client.put_item(
TableName = 'myMusicTable'
Item = {
'id': '2023',
'title': 'Happy Day',
'info': {
'rating': '9',
'artists': ['Acme Band','No One You Know'],
'release_date': '2023-07-21'
}
}
)
-
Scansiona la tabella per verificare se l'elemento è stato aggiunto alla tabella.
scan_response = client.scan(
TableName='myMusicTable'
)
Senza ABAC
Se ABAC non è abilitato per te Account AWS, le condizioni dei tag nella policy IAM e nella tabella DynamoDB non corrispondono. Di conseguenza, l'PutItem
azione restituisce un effetto AccessDeniedException
dovuto all'effetto della policy. AmazonDynamoDBReadOnlyAccess
An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::123456789012:assumed-role/DynamoDBReadOnlyAccess/Alice is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable because no identity-based policy allows the dynamodb:PutItem action.
Con ABAC
Se ABAC è abilitato per te Account AWS, l'put-item
azione viene completata correttamente e aggiunge un nuovo elemento alla tua tabella. Questo perché la politica in linea sulla tabella consente l'PutItem
azione se le condizioni del tag nella politica IAM e nella tabella corrispondono.
Esempio 2: consenti un'azione utilizzando aws: RequestTag
Utilizzando la chiave di condizione aws: RequestTag /tag-key, puoi confrontare la coppia chiave-valore del tag passata nella tua richiesta con la coppia di tag specificata nella policy IAM. Ad esempio, puoi consentire un'azione specificaCreateTable
, come utilizzare le condizioni del tag aws:RequestTag
if the tag non corrispondono. A tale scopo, procedi nel seguente modo:
- Using the AWS CLI
-
-
Create una policy in linea e aggiungetela a un ruolo a cui è associata la policy AmazonDynamoDBReadOnlyAccess AWS gestita, come illustrato nell'esempio seguente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:CreateTable",
"dynamodb:TagResource"
],
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Owner": "John"
}
}
}
]
}
-
Crea una tabella che contenga la coppia chiave-valore del tag di. "Owner": "John"
aws dynamodb create-table \
--attribute-definitions AttributeName=ID,AttributeType=S \
--key-schema AttributeName=ID,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1000,WriteCapacityUnits=500 \
--region us-east-1
\
--tags Key=Owner,Value=John \
--table-name myMusicTable
- Using the AWS SDK per Python (Boto3)
-
-
Create una policy in linea e aggiungetela a un ruolo a cui è associata la policy AmazonDynamoDBReadOnlyAccess AWS gestita, come illustrato nell'esempio seguente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:CreateTable",
"dynamodb:TagResource"
],
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Owner": "John"
}
}
}
]
}
-
Crea una tabella che contenga la coppia chiave-valore del tag di. "Owner": "John"
ddb_client = boto3.client('dynamodb')
create_table_response = ddb_client.create_table(
AttributeDefinitions=[
{
'AttributeName': 'id',
'AttributeType': 'S'
},
],
TableName='myMusicTable',
KeySchema=[
{
'AttributeName': 'id',
'KeyType': 'HASH'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 1000,
'WriteCapacityUnits': 500
},
Tags=[
{
'Key': 'Owner',
'Value': 'John'
},
],
)
Senza ABAC
Se ABAC non è abilitato per te Account AWS, le condizioni dei tag nella politica in linea e nella tabella DynamoDB non corrispondono. Di conseguenza, la CreateTable
richiesta fallisce e la tabella non viene creata.
An error occurred (AccessDeniedException) when calling the CreateTable operation: User: arn:aws:sts::123456789012:assumed-role/Admin/John is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable because no identity-based policy allows the dynamodb:CreateTable action.
Con ABAC
Se ABAC è abilitato per voi Account AWS, la richiesta di creazione della tabella viene completata con successo. Poiché la coppia chiave-valore del tag "Owner": "John"
è presente nella CreateTable
richiesta, la politica in linea consente all'utente John
di eseguire l'azione. CreateTable
Esempio 3: Negare un'azione utilizzando aws: TagKeys
Utilizzando la chiave aws: TagKeys condition, puoi confrontare le chiavi dei tag in una richiesta con le chiavi specificate nella policy IAM. Ad esempio, puoi negare un'azione specifica, ad esempio CreateTable
utilizzare aws:TagKeys
se una chiave di tag specifica non è presente nella richiesta. A tale scopo, effettuate le seguenti operazioni:
- Using the AWS CLI
-
-
Aggiungere una politica gestita dai clienti a un ruolo a cui è associata la politica di AWS gestione degli AmazonDynamoDBFullaccessi, come illustrato nell'esempio seguente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"dynamodb:CreateTable",
"dynamodb:TagResource"
],
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"Null": {
"aws:TagKeys": "false"
},
"ForAllValues:StringNotEquals": {
"aws:TagKeys": "CostCenter"
}
}
}
]
}
-
Assumi il ruolo a cui è stata associata la policy e crea una tabella con la chiave tagTitle
.
aws dynamodb create-table \
--attribute-definitions AttributeName=ID,AttributeType=S \
--key-schema AttributeName=ID,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1000,WriteCapacityUnits=500 \
--region us-east-1
\
--tags Key=Title,Value=ProductManager \
--table-name myMusicTable
- Using the AWS SDK per Python (Boto3)
-
-
Aggiungi una policy gestita dai clienti a un ruolo a cui è associata la policy AWS gestita di AmazonDynamoDBFullAccess, come illustrato nell'esempio seguente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"dynamodb:CreateTable",
"dynamodb:TagResource"
],
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"Null": {
"aws:TagKeys": "false"
},
"ForAllValues:StringNotEquals": {
"aws:TagKeys": "CostCenter"
}
}
}
]
}
-
Assumi il ruolo a cui è stata associata la policy e crea una tabella con la chiave tagTitle
.
ddb_client = boto3.client('dynamodb')
create_table_response = ddb_client.create_table(
AttributeDefinitions=[
{
'AttributeName': 'id',
'AttributeType': 'S'
},
],
TableName='myMusicTable',
KeySchema=[
{
'AttributeName': 'id',
'KeyType': 'HASH'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 1000,
'WriteCapacityUnits': 500
},
Tags=[
{
'Key': 'Title',
'Value': 'ProductManager'
},
],
)
Senza ABAC
Se ABAC non è abilitato per il tuo Account AWS, DynamoDB non invia le chiavi dei tag nel create-table
comando a IAM. La Null
condizione garantisce che la condizione valuti false
se non ci sono chiavi di tag nella richiesta. Poiché il Deny
criterio non corrisponde, il create-table
comando viene completato correttamente.
Con ABAC
Se ABAC è abilitato per il tuo Account AWS, le chiavi dei tag passate nel create-table
comando vengono passate a IAM. La chiave del tag Title
viene valutata rispetto alla chiave del tag basata sulla condizioneCostCenter
, presente nella policy. Deny
La chiave del tag Title
non corrisponde alla chiave del tag presente nella Deny
politica a causa dell'operatore. StringNotEquals
Pertanto, l'CreateTable
azione fallisce e la tabella non viene creata. L'esecuzione del create-table
comando restituisce unAccessDeniedException
.
An error occurred (AccessDeniedException) when calling the CreateTable operation: User: arn:aws:sts::123456789012:assumed-role/DynamoFullAccessRole/ProductManager is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable with an explicit deny in an identity-based policy.