将 ABAC 与 DynamoDB Streams 结合使用
以下步骤说明如何使用 ABAC 为 DynamoDB Streams 设置权限。在此示例场景中,您向 DynamoDB 流添加标签,并使用包含基于标签的条件的策略创建一个 IAM 角色。然后,您将通过匹配标签条件来测试 DynamoDB 流支持的权限。
步骤 1:向 DynamoDB 流添加标签
您可以使用 Amazon CLI 或 SDK 向 DynamoDB Streams 添加标签。以下 tag-resource CLI 命令向流添加标签。
aws dynamodb tag-resource \ --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/MusicTable/stream/2024-01-01T00:00:00.000 \ --tags Key=environment,Value=staging
注意
要查找您的流 ARN,请使用 describe-table 命令,然后在响应中查找 LatestStreamArn 字段。
步骤 2:使用包含基于标签的条件的策略创建 IAM 角色
使用 aws:ResourceTag/{{tag-key}} 条件键创建 IAM 策略,以便将在 IAM 策略中指定的标签键值对与附加到流的键值对进行比较。如果流包含标签键值对 "environment": "staging",则以下示例策略可让用户获取记录并描述该流。如果流没有指定的标签键值对,则这些操作将遭到拒绝。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator" ], "Resource": "arn:aws:dynamodb:*:*:table/*/stream/*", "Condition": { "StringEquals": { "aws:ResourceTag/environment": "staging" } } } ] }
步骤 3:测试支持的权限
-
将 IAM 策略附加到 Amazon Web Services 账户中的 IAM 用户或角色。确保您使用的 IAM 主体尚未通过其它策略获得对 DynamoDB 流的访问权限。
-
确保您的 DynamoDB 流包含值为
"staging"的"environment"标签键。 -
对带标签的流执行
dynamodb:DescribeStream和dynamodb:GetRecords操作。如果"environment": "staging"标签键值对存在,则这些操作会成功。如果您对没有
"environment": "staging"标签键值对的流执行这些操作,则请求将失败并引发AccessDeniedException。