

# Ejemplo 3: Denegación del acceso a la transmisión a menos que esté presente una etiqueta específica
<a name="streams-abac-example-3"></a>

Con la clave de condición `aws:TagKeys`, puede denegar el etiquetado de un flujo a menos que se incluya una clave de etiqueta obligatoria en la solicitud.

## Uso de la CLI de AWS
<a name="streams-abac-example-3-cli"></a>

1. Agregue una política administrada por el cliente a un rol que tenga acceso a DynamoDB, como se muestra en el siguiente ejemplo.

   ```
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Deny",
         "Action": [
           "dynamodb:TagResource"
         ],
         "Resource": "arn:aws:dynamodb:*:*:table/*/stream/*",
         "Condition": {
           "Null": {
             "aws:TagKeys": "false"
           },
           "ForAllValues:StringNotEquals": {
             "aws:TagKeys": "CostCenter"
           }
         }
       }
     ]
   }
   ```

1. Asuma el rol e intente etiquetar un flujo con una clave de etiqueta que no sea `CostCenter`.

   ```
   aws dynamodb tag-resource \
     --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/myMusicTable/stream/2024-01-01T00:00:00.000 \
     --tags Key=Department,Value=Engineering
   ```

## Comportamiento con y sin ABAC de Streams
<a name="streams-abac-example-3-behavior"></a>

Sin ABAC de Streams  
Si ABAC de Streams no está habilitado para la Cuenta de AWS, DynamoDB no envía las claves de etiqueta en la solicitud 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 de denegación no coincide, el comando `tag-resource` se completa correctamente.

Con ABAC de Streams  
Si ABAC de Streams está habilitado para la Cuenta de AWS, la clave de etiqueta `Department` se evalúa con respecto a la clave de etiqueta basada en condiciones `CostCenter` presente en la política de denegación. La clave de etiqueta `Department` no coincide con la clave de etiqueta presente en la política de denegación debido al operador `StringNotEquals`. Por lo tanto, la acción `TagResource` produce un error y devuelve una `AccessDeniedException`.