Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Beispiele für die Verwendung von ABAC mit DynamoDB-Tabellen und -Indizes
Die folgenden Beispiele zeigen einige Anwendungsfälle zur Implementierung von attributbasierten Bedingungen mithilfe von Tags.
Beispiel 1: Eine Aktion mit aws zulassen: ResourceTag
Mithilfe des aws:ResourceTag/tag-key-Bedingungsschlüssels können Sie das Tag-Schlüssel-Wert-Paar, das in einer IAM-Richtlinie angegeben ist, mit dem Schlüssel-Wert-Paar vergleichen, das in einer DynamoDB-Tabelle angehängt ist. Sie können beispielsweise eine bestimmte Aktion zulassen, z. B. PutItemwenn die Tag-Bedingungen in einer IAM-Richtlinie und einer Tabelle übereinstimmen. Führen Sie dazu die folgenden Schritte aus:
- Using the AWS CLI
-
-
Erstellen Sie eine -Tabelle. Im folgenden Beispiel wird der AWS CLI Befehl create-table verwendet, um eine Tabelle mit dem Namen zu erstellen. 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
-
Fügen Sie dieser Tabelle ein Tag hinzu. Im folgenden Beispiel für den AWS CLI Befehl tag-resource wird das Schlüssel-Wert-Paar für das Tag hinzugefügt. 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
-
Erstellen Sie eine Inline-Richtlinie und fügen Sie sie einer Rolle hinzu, an die die AmazonDynamoDBReadOnlyAccess AWS verwaltete Richtlinie angehängt ist, wie im folgenden Beispiel gezeigt.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Mit dieser Richtlinie kann die Aktion PutItem für die Tabelle ausgeführt werden, wenn der Tag-Schlüssel und -Wert, die der Tabelle angehängt sind, mit den in der Richtlinie angegebenen Tags übereinstimmen.
-
Nehmen Sie die Rolle mit den in Schritt 3 beschriebenen Richtlinien an.
-
Verwenden Sie den AWS CLI Befehl put-item, um ein Element in den zu platzieren. 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"}
}}
}'
-
Scannen Sie die Tabelle, um zu überprüfen, ob das Element der Tabelle hinzugefügt wurde.
aws dynamodb scan --table-name myMusicTable --region us-east-1
- Using the AWS SDK for Java 2.x
-
-
Erstellen Sie eine -Tabelle. Das folgende Beispiel verwendet die CreateTableAPI, um eine Tabelle mit dem Namen zu erstellen. myMusicTable
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();
-
Fügen Sie dieser Tabelle ein Tag hinzu. Die TagResourceAPI im folgenden Beispiel fügt dem Tag das Schlüssel-Wert-Paar Title: ProductManager hinzu. myMusicTable
TagResourceRequest tagResourceRequest = TagResourceRequest.builder()
.resourceArn(tableArn)
.tags(
Arrays.asList(
Tag.builder()
.key("Title")
.value("ProductManager")
.build()
)
)
.build();
dynamoDB.tagResource(tagResourceRequest);
-
Erstellen Sie eine Inline-Richtlinie und fügen Sie sie einer Rolle hinzu, an die die AmazonDynamoDBReadOnlyAccess AWS verwaltete Richtlinie angehängt ist, wie im folgenden Beispiel gezeigt.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Mit dieser Richtlinie kann die Aktion PutItem für die Tabelle ausgeführt werden, wenn der Tag-Schlüssel und -Wert, die der Tabelle angehängt sind, mit den in der Richtlinie angegebenen Tags übereinstimmen.
-
Nehmen Sie die Rolle mit den in Schritt 3 beschriebenen Richtlinien an.
-
Verwenden Sie die PutItemAPI, um ein Element in den zu platzierenmyMusicTable.
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);
-
Scannen Sie die Tabelle, um zu überprüfen, ob das Element der Tabelle hinzugefügt wurde.
ScanRequest scanRequest = ScanRequest.builder()
.tableName(tableName)
.build();
ScanResponse scanResponse = dynamoDB.scan(scanRequest);
- Using the AWS SDK für Python (Boto3)
-
-
Erstellen Sie eine -Tabelle. Das folgende Beispiel verwendet die CreateTableAPI, um eine Tabelle mit dem Namen zu erstellenmyMusicTable.
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']
-
Fügen Sie dieser Tabelle ein Tag hinzu. Die TagResourceAPI im folgenden Beispiel fügt dem Tag das Schlüssel-Wert-Paar Title: ProductManager hinzu. myMusicTable
tag_resouce_response = ddb_client.tag_resource(
ResourceArn=table_arn,
Tags=[
{
'Key': 'Title',
'Value': 'ProductManager'
},
]
)
-
Erstellen Sie eine Inline-Richtlinie und fügen Sie sie einer Rolle hinzu, an die die AmazonDynamoDBReadOnlyAccess AWS verwaltete Richtlinie angehängt ist, wie im folgenden Beispiel gezeigt.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Mit dieser Richtlinie kann die Aktion PutItem für die Tabelle ausgeführt werden, wenn der Tag-Schlüssel und -Wert, die der Tabelle angehängt sind, mit den in der Richtlinie angegebenen Tags übereinstimmen.
-
Nehmen Sie die Rolle mit den in Schritt 3 beschriebenen Richtlinien an.
-
Verwenden Sie die PutItemAPI, um ein Element in den zu platzierenmyMusicTable.
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'
}
}
)
-
Scannen Sie die Tabelle, um zu überprüfen, ob das Element der Tabelle hinzugefügt wurde.
scan_response = client.scan(
TableName='myMusicTable'
)
Ohne ABAC
Wenn ABAC für Sie nicht aktiviert ist AWS-Konto, stimmen die Tag-Bedingungen in der IAM-Richtlinie und der DynamoDB-Tabelle nicht überein. Folglich gibt die PutItem-Aktion aufgrund der Auswirkung der AmazonDynamoDBReadOnlyAccess-Richtlinie einen AccessDeniedException-Fehler zurück.
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.
Mit ABAC
Wenn ABAC für Sie aktiviert ist AWS-Konto, wird die put-item Aktion erfolgreich abgeschlossen und ein neues Element zu Ihrer Tabelle hinzugefügt. Das liegt daran, dass die Inline-Richtlinie in der Tabelle die PutItem-Aktion zulässt, wenn die Tag-Bedingungen in der IAM-Richtlinie und der Tabelle übereinstimmen.
Beispiel 2: Eine Aktion mit aws zulassen: RequestTag
Mithilfe des RequestTagBedingungsschlüssels aws: /tag-key können Sie das Tag-Schlüssel-Wert-Paar, das in Ihrer Anfrage übergeben wurde, mit dem Tag-Paar vergleichen, das in der IAM-Richtlinie angegeben ist. Sie können beispielsweise eine bestimmte Aktion wie CreateTable mithilfe von aws:RequestTag zulassen, wenn die Tag-Bedingungen nicht übereinstimmen. Führen Sie dazu die folgenden Schritte aus:
- Using the AWS CLI
-
-
Erstellen Sie eine Inline-Richtlinie und fügen Sie sie einer Rolle hinzu, an die die AmazonDynamoDBReadOnlyAccess AWS verwaltete Richtlinie angehängt ist, wie im folgenden Beispiel gezeigt.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:CreateTable",
"dynamodb:TagResource"
],
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Owner": "John"
}
}
}
]
}
-
Erstellen Sie eine Tabelle, die das Tag-Schlüssel-Wert-Paar von "Owner": "John" enthält.
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 für Python (Boto3)
-
-
Erstellen Sie eine Inline-Richtlinie und fügen Sie sie einer Rolle hinzu, an die die AmazonDynamoDBReadOnlyAccess AWS verwaltete Richtlinie angehängt ist, wie im folgenden Beispiel gezeigt.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:CreateTable",
"dynamodb:TagResource"
],
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Owner": "John"
}
}
}
]
}
-
Erstellen Sie eine Tabelle, die das Tag-Schlüssel-Wert-Paar von "Owner": "John" enthält.
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'
},
],
)
Ohne ABAC
Wenn ABAC für Sie nicht aktiviert ist AWS-Konto, stimmen die Tag-Bedingungen in der Inline-Richtlinie und der DynamoDB-Tabelle nicht überein. Folglich schlägt die CreateTable-Anforderung fehl und Ihre Tabelle wird nicht erstellt.
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.
Mit ABAC
Wenn ABAC für Sie aktiviert ist AWS-Konto, wird Ihre Anfrage zur Tabellenerstellung erfolgreich abgeschlossen. Da das Tag-Schlüssel-Wert-Paar von "Owner": "John" in der CreateTable-Anforderung vorhanden ist, ermöglicht die Inline-Richtlinie dem Benutzer John, die Aktion CreateTable auszuführen.
Beispiel 3: Eine Aktion mit aws ablehnen: TagKeys
Mithilfe des TagKeys Bedingungsschlüssels aws: können Sie die Tag-Schlüssel in einer Anfrage mit den Schlüsseln vergleichen, die in der IAM-Richtlinie angegeben sind. Sie können beispielsweise eine bestimmte Aktion wie CreateTable mithilfe von aws:TagKeys verweigern, wenn ein bestimmter Tag-Schlüssel nicht in der Anforderung vorhanden ist. Führen Sie dazu die folgenden Schritte aus:
- Using the AWS CLI
-
-
Fügen Sie eine vom Kunden verwaltete Richtlinie zu einer Rolle hinzu, der die AWS verwaltete AmazonDynamoDBFullAccess-Richtlinie zugeordnet ist, wie im folgenden Beispiel gezeigt.
JSON
- JSON
-
{
"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"
}
}
}
]
}
-
Nehmen Sie die Rolle an, der die Richtlinie angehängt wurde, und erstellen Sie eine Tabelle mit dem Tag-Schlüssel Title.
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 für Python (Boto3)
-
-
Fügen Sie einer Rolle, der die verwaltete AmazonDynamoDBFullAccess-Richtlinie zugewiesen ist, eine vom Kunden AWS verwaltete Richtlinie hinzu, wie im folgenden Beispiel gezeigt.
JSON
- JSON
-
{
"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"
}
}
}
]
}
-
Nehmen Sie die Rolle an, der die Richtlinie angehängt wurde, und erstellen Sie eine Tabelle mit dem Tag-Schlüssel Title.
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'
},
],
)
Ohne ABAC
Wenn ABAC für Sie nicht aktiviert ist AWS-Konto, sendet DynamoDB die Tag-Schlüssel im create-table Befehl nicht an IAM. Die Null-Bedingung stellt sicher, dass die Bedingung als false ausgewertet wird, wenn in der Anforderung keine Tags vorhanden sind. Da die Deny-Richtlinie nicht übereinstimmt, wird der Befehl create-table erfolgreich ausgeführt.
Mit ABAC
Wenn ABAC für Sie aktiviert ist AWS-Konto, werden die im create-table Befehl übergebenen Tag-Schlüssel an IAM übergeben. Der Tag-Schlüssel Title wird anhand des bedingungsbasierten Tag-Schlüssels CostCenter ausgewertet, der in der Deny-Richtlinie enthalten ist. Der Tag-Schlüssel Title stimmt aufgrund des StringNotEquals-Operators nicht mit dem in der Deny-Richtlinie vorhandenen Tag-Schlüssel überein. Daher schlägt die CreateTable-Aktion fehl und Ihre Tabelle wird nicht erstellt. Wenn Sie den Befehl create-table ausführen, wird einAccessDeniedException-Fehler zurückgegeben.
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.