En los siguientes ejemplos se describen algunos casos de uso para implementar condiciones basadas en atributos mediante etiquetas.
Temas
Ejemplo 1: Permitir una acción con aws:ResourceTag
Con la clave de condición aws:ResourceTag/tag-key
, puede comparar el par clave-valor de etiqueta que está especificado en una política de IAM con el par clave-valor que está asociado con una tabla de DynamoDB. Por ejemplo, puede permitir una acción específica, como PutItem, si las condiciones de etiqueta coinciden en una política de IAM y en una tabla. Para ello, siga estos pasos:
-
Crear una tabla de . En el siguiente ejemplo se utiliza el comando create-table de la AWS CLI para crear una tabla denominada
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
-
Agregue una etiqueta a esta tabla. El siguiente ejemplo de comando tag-resource de la AWS CLI agrega el par clave-valor de etiqueta
Title: ProductManager
amyMusicTable
.aws dynamodb tag-resource --region
us-east-1
--resource-arn arn:aws:dynamodb:us-east-1
:123456789012
:table/myMusicTable --tags Key=Title,Value=ProductManager -
Cree una política insertada y agréguela a un rol que tenga asociada la política administrada AmazonDynamoDBReadOnlyAccess de AWS, como se muestra en el siguiente ejemplo.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:ResourceTag/Title": "ProductManager" } } } ] }
Esta política permite la
PutItem
en la tabla cuando la clave y el valor de etiqueta asociados a la tabla coinciden con las etiquetas especificadas en la política. -
Asuma el rol con las políticas descritas en el paso 3.
-
Utilice el comando put-item de la AWS CLI para colocar un elemento en
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"} }} }'
-
Examine la tabla para comprobar si el elemento se ha agregado a ella.
aws dynamodb scan --table-name myMusicTable --region
us-east-1
Sin ABAC
Si ABAC no está habilitado para la Cuenta de AWS, las condiciones de etiquetado de la política de IAM y la tabla de DynamoDB no coinciden. En consecuencia, la acción PutItem
devuelve AccessDeniedException
debido al efecto de la política 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
Si ABAC está habilitado para la Cuenta de AWS, la acción put-item
se completa correctamente y agrega un nuevo elemento a la tabla. Esto se debe a que la política insertada en la tabla permite la acción PutItem
si coinciden las condiciones de etiqueta de la política de IAM y de la tabla.
Ejemplo 2: Concesión de permiso a una acción mediante aws:RequestTag
Con la clave de condición aws:RequestTag/tag-key, puede comparar el par clave-valor de etiqueta que se pasa en la solicitud con el par de etiquetas especificado en la política de IAM. Por ejemplo, puede permitir una acción específica, como CreateTable
, mediante aws:RequestTag
si las condiciones de etiqueta no coinciden. Para ello, siga estos pasos:
-
Cree una política insertada y agréguela a un rol que tenga asociada la política administrada AmazonDynamoDBReadOnlyAccess de AWS, como se muestra en el siguiente ejemplo.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:TagResource" ], "Resource": "arn:aws:dynamodb:*:*:table/*", "Condition": { "StringEquals": { "aws:RequestTag/Owner": "John" } } } ] }
-
Cree una tabla que contenga el par clave-valor de etiqueta de
"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
Sin ABAC
Si ABAC no está habilitado para la Cuenta de AWS, las condiciones de etiquetado de la política insertada y la tabla de DynamoDB no coinciden. En consecuencia, se produce un error en la solicitud CreateTable
y no se crea la tabla.
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
Si ABAC está habilitado para la Cuenta de AWS, la solicitud de creación de tabla se completa correctamente. Como el par clave-valor de etiqueta de "Owner": "John"
está presente en la solicitud CreateTable
, la política insertada permite al usuario John
realizar la acción CreateTable
.
Ejemplo 3: Denegación de una acción mediante aws:TagKeys
Con la clave de condición aws:TagKeys puede comparar las claves de etiqueta de una solicitud con las claves especificadas en la política de IAM. Por ejemplo, puede denegar una acción específica, como CreateTable
, mediante aws:TagKeys
si una clave de etiqueta específica no está presente en la solicitud. Para ello, siga estos pasos:
-
Agregue una política administrada por el cliente a un rol que tenga asociada la política administrada AmazonDynamoDBFullAccess de AWS, como se muestra en el siguiente ejemplo.
{ "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" } } } ] }
-
Asuma el rol al que se ha asociado la política y cree una tabla con la clave de etiqueta
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
Sin ABAC
Si ABAC no está habilitado para la Cuenta de AWS, DynamoDB no envía las claves de etiqueta del comando create-table
a IAM. La condición Null
garantiza que la condición se evalúe como false
si no hay claves de etiqueta en la solicitud. Como la política Deny
no coincide, el comando create-table
se completa correctamente.
Con ABAC
Si ABAC está habilitado para la Cuenta de AWS, las claves de etiqueta pasadas en el comando create-table
se pasan a IAM. La clave de etiqueta Title
se evalúa con respecto a la clave de etiqueta basada en condiciones, CostCenter
, presente en la política Deny
. La clave de etiqueta Title
no coincide con la clave de etiqueta presente en la política Deny
debido al operador StringNotEquals
. Por lo tanto, se produce un error en la acción CreateTable
y la tabla no se crea. Al ejecutar el comando create-table
, se devuelve AccessDeniedException
.
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.