

# 示例 1：使用 aws:ResourceTag 支持流读取访问
<a name="streams-abac-example-1"></a>

使用 `aws:ResourceTag/tag-key` 条件键，可以将在 IAM 策略中指定的标签键值对与附加到 DynamoDB 流的键值对进行比较。例如，如果标签条件匹配，则可以支持流 `GetRecords` 操作。

## 使用 Amazon CLI
<a name="streams-abac-example-1-cli"></a>

1. 创建一个启用了流的表，并添加一个标签。

   ```
   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. 向流添加标签。首先，从表描述中获取流 ARN。

   ```
   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. 创建[内联策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies)并将其添加到角色中，如以下示例所示。

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

   当流的标签与在策略中指定的键“Team”和值“Analytics”匹配时，此策略支持 `DescribeStream` 和 `GetRecords` 操作。

1. 使用步骤 3 中描述的策略代入该角色。

1. 在流上使用 `describe-stream` Amazon CLI 命令。

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

## 带和不带 Streams ABAC 时的行为
<a name="streams-abac-example-1-behavior"></a>

不带 Streams ABAC  
如果您未为您的 Amazon Web Services 账户启用 Streams ABAC，则 IAM 策略和 DynamoDB 流中的标签条件将不匹配。`DescribeStream` 操作会返回 `AccessDeniedException`，因为没有任何策略支持在不匹配标签条件的情况下执行该操作。

带 Streams ABAC  
如果您为您的 Amazon Web Services 账户启用了 Streams ABAC，则 `DescribeStream` 操作将成功完成。这是因为，当 IAM 策略和流中的标签条件匹配时，内联策略支持该操作。