Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh untuk menggunakan ABAC dengan tabel dan indeks DynamoDB
Contoh berikut menggambarkan beberapa kasus penggunaan untuk mengimplementasikan kondisi berbasis atribut menggunakan tag.
Contoh 1: Izinkan tindakan menggunakan aws: ResourceTag
Menggunakan kunci aws:ResourceTag/tag-key kondisi, Anda dapat membandingkan pasangan kunci-nilai tag yang ditentukan dalam kebijakan IAM dengan pasangan kunci-nilai yang dilampirkan dalam tabel DynamoDB. Misalnya, Anda dapat mengizinkan tindakan tertentu, seperti PutItem, jika kondisi tag cocok dalam kebijakan IAM dan tabel. Untuk melakukan ini, lakukan langkah-langkah berikut:
- Using the AWS CLI
-
-
Buat tabel. Contoh berikut menggunakan AWS CLI perintah create-table untuk membuat tabel bernama. 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
-
Tambahkan tag ke tabel ini. Contoh AWS CLI perintah tag-resource berikut menambahkan pasangan kunci nilai tag ke. 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
-
Buat kebijakan sebaris dan tambahkan ke peran yang memiliki kebijakan terkel AmazonDynamoDBReadOnlyAccess AWS ola yang dilampirkan padanya, seperti yang ditunjukkan pada contoh berikut.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Kebijakan ini memungkinkan PutItem tindakan pada tabel saat kunci tag dan nilai yang dilampirkan ke tabel cocok dengan tag yang ditentukan dalam kebijakan.
-
Asumsikan peran dengan kebijakan yang dijelaskan pada Langkah 3.
-
Gunakan AWS CLI perintah put-item untuk menempatkan item ke. 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"}
}}
}'
-
Pindai tabel untuk memverifikasi apakah item ditambahkan ke tabel.
aws dynamodb scan --table-name myMusicTable --region us-east-1
- Using the AWS SDK for Java 2.x
-
-
Buat tabel. Contoh berikut menggunakan CreateTable API untuk membuat tabel bernamamyMusicTable.
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();
-
Tambahkan tag ke tabel ini. TagResourceAPI dalam contoh berikut menambahkan pasangan nilai kunci tag Title: ProductManager ke. myMusicTable
TagResourceRequest tagResourceRequest = TagResourceRequest.builder()
.resourceArn(tableArn)
.tags(
Arrays.asList(
Tag.builder()
.key("Title")
.value("ProductManager")
.build()
)
)
.build();
dynamoDB.tagResource(tagResourceRequest);
-
Buat kebijakan sebaris dan tambahkan ke peran yang memiliki kebijakan terkel AmazonDynamoDBReadOnlyAccess AWS ola yang dilampirkan padanya, seperti yang ditunjukkan pada contoh berikut.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Kebijakan ini memungkinkan PutItem tindakan pada tabel saat kunci tag dan nilai yang dilampirkan ke tabel cocok dengan tag yang ditentukan dalam kebijakan.
-
Asumsikan peran dengan kebijakan yang dijelaskan pada Langkah 3.
-
Gunakan PutItem API untuk menempatkan item kemyMusicTable.
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);
-
Pindai tabel untuk memverifikasi apakah item ditambahkan ke tabel.
ScanRequest scanRequest = ScanRequest.builder()
.tableName(tableName)
.build();
ScanResponse scanResponse = dynamoDB.scan(scanRequest);
- Using the AWS SDK untuk Python (Boto3)
-
-
Buat tabel. Contoh berikut menggunakan CreateTable API untuk membuat tabel bernamamyMusicTable.
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']
-
Tambahkan tag ke tabel ini. TagResourceAPI dalam contoh berikut menambahkan pasangan nilai kunci tag Title: ProductManager ke. myMusicTable
tag_resouce_response = ddb_client.tag_resource(
ResourceArn=table_arn,
Tags=[
{
'Key': 'Title',
'Value': 'ProductManager'
},
]
)
-
Buat kebijakan sebaris dan tambahkan ke peran yang memiliki kebijakan terkel AmazonDynamoDBReadOnlyAccess AWS ola yang dilampirkan padanya, seperti yang ditunjukkan pada contoh berikut.
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:PutItem",
"Resource": "arn:aws:dynamodb:*:*:table/*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Title": "ProductManager"
}
}
}
]
}
Kebijakan ini memungkinkan PutItem tindakan pada tabel saat kunci tag dan nilai yang dilampirkan ke tabel cocok dengan tag yang ditentukan dalam kebijakan.
-
Asumsikan peran dengan kebijakan yang dijelaskan pada Langkah 3.
-
Gunakan PutItem API untuk menempatkan item kemyMusicTable.
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'
}
}
)
-
Pindai tabel untuk memverifikasi apakah item ditambahkan ke tabel.
scan_response = client.scan(
TableName='myMusicTable'
)
Tanpa ABAC
Jika ABAC tidak diaktifkan untuk Anda Akun AWS, kondisi tag dalam kebijakan IAM dan tabel DynamoDB tidak cocok. Akibatnya, PutItem tindakan tersebut kembali AccessDeniedException karena efek AmazonDynamoDBReadOnlyAccess kebijakan.
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.
Dengan ABAC
Jika ABAC diaktifkan untuk Anda Akun AWS, put-item tindakan berhasil diselesaikan dan menambahkan item baru ke tabel Anda. Ini karena kebijakan sebaris pada tabel memungkinkan PutItem tindakan jika kondisi tag dalam kebijakan IAM dan tabel cocok.
Contoh 2: Izinkan tindakan menggunakan aws: RequestTag
Menggunakan kunci RequestTag/tag-key kondisi aws:, Anda dapat membandingkan pasangan kunci-nilai tag yang diteruskan dalam permintaan Anda dengan pasangan tag yang ditentukan dalam kebijakan IAM. Misalnya, Anda dapat mengizinkan tindakan tertentuCreateTable, seperti, menggunakan kondisi aws:RequestTag jika tag tidak cocok. Untuk melakukan ini, lakukan langkah-langkah berikut:
- Using the AWS CLI
-
-
Buat kebijakan sebaris dan tambahkan ke peran yang memiliki kebijakan terkel AmazonDynamoDBReadOnlyAccess AWS ola yang dilampirkan padanya, seperti yang ditunjukkan pada contoh berikut.
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"
}
}
}
]
}
-
Buat tabel yang berisi pasangan kunci-nilai tag. "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 untuk Python (Boto3)
-
-
Buat kebijakan sebaris dan tambahkan ke peran yang memiliki kebijakan terkel AmazonDynamoDBReadOnlyAccess AWS ola yang dilampirkan padanya, seperti yang ditunjukkan pada contoh berikut.
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"
}
}
}
]
}
-
Buat tabel yang berisi pasangan kunci-nilai tag. "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'
},
],
)
Tanpa ABAC
Jika ABAC tidak diaktifkan untuk Anda Akun AWS, kondisi tag dalam kebijakan sebaris dan tabel DynamoDB tidak cocok. Akibatnya, CreateTable permintaan gagal dan tabel Anda tidak dibuat.
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.
Dengan ABAC
Jika ABAC diaktifkan untuk Anda Akun AWS, permintaan pembuatan tabel Anda berhasil diselesaikan. Karena pasangan nilai kunci tag "Owner": "John" hadir dalam CreateTable permintaan, kebijakan sebaris memungkinkan pengguna John untuk melakukan tindakan. CreateTable
Contoh 3: Tolak tindakan menggunakan aws: TagKeys
Menggunakan kunci TagKeys kondisi aws:, Anda dapat membandingkan kunci tag dalam permintaan dengan kunci yang ditentukan dalam kebijakan IAM. Misalnya, Anda dapat menolak tindakan tertentu, sepertiCreateTable, menggunakan aws:TagKeys jika kunci tag tertentu tidak ada dalam permintaan. Untuk melakukan ini, lakukan langkah-langkah berikut:
- Using the AWS CLI
-
-
Tambahkan kebijakan yang dikelola pelanggan ke peran yang memiliki kebijakan ter AmazonDynamoDBFullAccess AWS kelola yang dilampirkan padanya, seperti yang ditunjukkan pada contoh berikut.
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"
}
}
}
]
}
-
Asumsikan peran yang dilampirkan kebijakan, dan buat tabel dengan kunci 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 untuk Python (Boto3)
-
-
Tambahkan kebijakan yang dikelola pelanggan ke peran yang memiliki kebijakan ter AmazonDynamoDBFullAccess AWS kelola yang dilampirkan padanya, seperti yang ditunjukkan pada contoh berikut.
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"
}
}
}
]
}
-
Asumsikan peran yang dilampirkan kebijakan, dan buat tabel dengan kunci 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'
},
],
)
Tanpa ABAC
Jika ABAC tidak diaktifkan untuk Anda Akun AWS, DynamoDB tidak mengirim kunci tag dalam create-table perintah ke IAM. NullKondisi memastikan bahwa kondisi mengevaluasi false jika tidak ada kunci tag dalam permintaan. Karena Deny kebijakan tidak cocok, create-table perintah berhasil diselesaikan.
Dengan ABAC
Jika ABAC diaktifkan untuk Anda Akun AWS, kunci tag yang diteruskan dalam create-table perintah diteruskan ke IAM. Kunci tag Title dievaluasi terhadap kunci tag berbasis kondisi,CostCenter, yang ada dalam Deny kebijakan. Kunci tag Title tidak cocok dengan kunci tag yang ada di Deny kebijakan karena StringNotEquals operator. Oleh karena itu, CreateTable tindakan gagal dan tabel Anda tidak dibuat. Menjalankan create-table perintah mengembalikan sebuahAccessDeniedException.
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.