

# Ejemplo 1: Permitir el acceso de lectura a la secuencia mediante aws:ResourceTag
<a name="streams-abac-example-1"></a>

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 asociado a una secuencia de DynamoDB. Por ejemplo, puede permitir las operaciones `GetRecords` de transmisión si las condiciones de la etiqueta coinciden.

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

1. Cree una tabla con un flujo habilitado y agregue una etiqueta.

   ```
   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 \
     --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
     --region us-east-1
   ```

1. Agregue una etiqueta al flujo. En primer lugar, obtenga el ARN del flujo de la descripción de la tabla.

   ```
   STREAM_ARN=$(aws dynamodb describe-table \
     --table-name myMusicTable \
     --query "Table.LatestStreamArn" \
     --output text \
     --region us-east-1)
   
   aws dynamodb tag-resource \
     --resource-arn $STREAM_ARN \
     --tags Key=Team,Value=Analytics \
     --region us-east-1
   ```

1. Cree una [política insertada](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies) y agréguela a un rol, como se muestra en el siguiente ejemplo.

   ```
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "dynamodb:DescribeStream",
           "dynamodb:GetRecords"
         ],
         "Resource": "arn:aws:dynamodb:*:*:table/*/stream/*",
         "Condition": {
           "StringEquals": {
             "aws:ResourceTag/Team": "Analytics"
           }
         }
       }
     ]
   }
   ```

   Esta política permite las operaciones `DescribeStream` y `GetRecords` cuando la etiqueta de la transmisión coincide con la clave “Equipo” y el valor “Análisis” especificados en la política.

1. Asuma el rol con la políticas descrita en el paso 3.

1. Utilice el comando `describe-stream` de la AWS CLI en el flujo.

   ```
   aws dynamodb describe-stream \
     --stream-arn $STREAM_ARN \
     --region us-east-1
   ```

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

Sin ABAC de Streams  
Si ABAC de Streams no está habilitado para la Cuenta de AWS, las condiciones de etiquetado de la política de IAM y el flujo de DynamoDB no coinciden. La acción `DescribeStream` devuelve una `AccessDeniedException` porque ninguna política permite la acción sin que las condiciones de la etiqueta coincidan.

Con ABAC de Streams  
Si ABAC de Streams está habilitado para la Cuenta de AWS, la acción `DescribeStream` se completa correctamente. Esto se debe a que la política insertada permite la acción si coinciden las condiciones de etiqueta de la política de IAM y del flujo.