

# 示例 3：除非存在特定标签，否则拒绝流访问
<a name="streams-abac-example-3"></a>

使用 `aws:TagKeys` 条件键，除非请求中包含所需的标签键，否则您可以拒绝为流添加标签。

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

1. 将客户管理型策略添加到具有 DynamoDB 访问权限的角色中，如以下示例所示。

   ```
   {
     "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. 代入该角色，并尝试使用不是 `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
   ```

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

不带 Streams ABAC  
如果您未为您的 Amazon Web Services 账户启用 Streams ABAC，则 DynamoDB 不会在请求中将标签键发送到 IAM。`Null` 条件可确保在请求中没有标签键时，条件的计算结果为 false。由于拒绝策略不匹配，因此 `tag-resource` 命令成功完成。

带 Streams ABAC  
如果为您的 Amazon Web Services 账户启用了 Streams ABAC，则标签键 `Department` 将根据拒绝策略中存在的基于条件的标签键 `CostCenter` 进行评估。由于 `StringNotEquals` 运算符的原因，标签键 `Department` 与拒绝策略中存在的标签键不匹配。因此，`TagResource` 操作失败并返回 `AccessDeniedException`。