将基于属性的访问权限控制与 DynamoDB Streams 结合使用
DynamoDB Streams 支持基于属性的访问权限控制(ABAC),即使用 DynamoDB 的基于资源的策略中所述的相同授权策略。使用 DynamoDB Streams ABAC,您可以将标签附加到流,并在 IAM 策略中使用基于标签的条件来控制对流的访问。
流资源不会从其父表继承标签,您可以独立管理各个流上的标签。最多可以为每个 DynamoDB 流添加 50 个标签。流上的所有标签支持的最大大小为 10 KB。有关为 DynamoDB 资源添加标签和为限制添加标签的更多信息,请参阅在 DynamoDB 中向资源添加标记和标签和DynamoDB 中的标签限制。
可以使用 aws: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" } } } ] }
主题
使用 DynamoDB Streams 实施 ABAC 的条件键
DynamoDB Streams ABAC 使用与 DynamoDB 表相同的条件键:aws:ResourceTag/tag-key、aws:RequestTag/tag-key 和 aws:TagKeys。有关每个条件键的描述,请参阅 使用 DynamoDB 实施 ABAC 的条件键。以下行为特定于 DynamoDB Streams:
-
条件键适用于在流上运行的 DynamoDB Streams API,包括 TagResource、
UntagResource以及读取 API(例如GetRecords)。 -
如果您的账户未启用 DynamoDB Streams ABAC,则
aws:ResourceTag条件的评估方式就如同没有任何标签附加到流资源一样。
将 ABAC 与 DynamoDB Streams 结合使用的注意事项
在将 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权限。