

# 将基于属性的访问权限控制与 DynamoDB Streams 结合使用
<a name="abac-streams"></a>

DynamoDB Streams 支持基于属性的访问权限控制（ABAC），即[使用 DynamoDB 的基于资源的策略](attribute-based-access-control.md)中所述的相同授权策略。使用 DynamoDB Streams ABAC，您可以将标签附加到流，并在 IAM 策略中使用基于标签的条件来控制对流的访问。

流资源不会从其父表继承标签，您可以独立管理各个流上的标签。最多可以为每个 DynamoDB 流添加 50 个标签。流上的所有标签支持的最大大小为 10 KB。有关为 DynamoDB 资源添加标签和为限制添加标签的更多信息，请参阅[在 DynamoDB 中向资源添加标记和标签](Tagging.md)和[DynamoDB 中的标签限制](Tagging.md#TaggingRestrictions)。

可以使用 [aws:ResourceTag](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 条件键，以便基于附加到流的标签来支持或拒绝访问该流。例如，以下策略支持对包含标签键 `environment`、值为 `production` 的任何流执行 `GetRecords` 操作。

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

**Topics**
+ [使用 DynamoDB Streams 实施 ABAC 的条件键](#condition-keys-implement-abac-streams)
+ [将 ABAC 与 DynamoDB Streams 结合使用的注意事项](#abac-considerations-streams)
+ [为 DynamoDB Streams 启用 ABAC](abac-enable-streams.md)
+ [将 ABAC 与 DynamoDB Streams 结合使用](abac-implementation-streams.md)
+ [将 ABAC 与 DynamoDB Streams 结合使用的示例](abac-examples-streams.md)
+ [排查 DynamoDB Streams 的常见 ABAC 错误](abac-troubleshooting-streams.md)

## 使用 DynamoDB Streams 实施 ABAC 的条件键
<a name="condition-keys-implement-abac-streams"></a>

DynamoDB Streams ABAC 使用与 DynamoDB 表相同的条件键：`aws:ResourceTag/tag-key`、`aws:RequestTag/tag-key` 和 `aws:TagKeys`。有关每个条件键的描述，请参阅 [使用 DynamoDB 实施 ABAC 的条件键](attribute-based-access-control.md#condition-keys-implement-abac)。以下行为特定于 DynamoDB Streams：
+ 条件键适用于在流上运行的 DynamoDB Streams API，包括 [TagResource](https://docs.amazonaws.cn/amazondynamodb/latest/APIReference/API_TagResource.html)、`UntagResource` 以及读取 API（例如 `GetRecords`）。
+ 如果您的账户未启用 DynamoDB Streams ABAC，则 `aws:ResourceTag` 条件的评估方式就如同没有任何标签附加到流资源一样。

## 将 ABAC 与 DynamoDB Streams 结合使用的注意事项
<a name="abac-considerations-streams"></a>

在将 ABAC 与 DynamoDB Streams 结合使用时，以下注意事项适用：
+ 适用于 DynamoDB Streams 的 ABAC 与适用于 DynamoDB 表的 ABAC 是分开的。为表启用 ABAC 不会自动为账户中的流启用 ABAC。您必须单独为每个流启用 ABAC。
+ 删除流的父表后，您可以使用 CLI 或 SDK 的 `tag-resource`、`untag-resource` 和 `list-tags-of-resource` 命令对流 ARN 添加标签或取消标签。删除表后，流会持续存在 24 小时，然后才会被移除。删除表后，无法通过控制台或 CloudFormation 使用此功能。
+ 如果您使用 CloudFormation 来管理 DynamoDB 资源，请确保您的服务角色对流资源拥有 `dynamodb:TagResource`、`dynamodb:UntagResource` 和 `dynamodb:ListTagsOfResource` 权限。