示例 1:使用 aws:ResourceTag 支持流读取访问
使用 aws:ResourceTag/tag-key 条件键,可以将在 IAM 策略中指定的标签键值对与附加到 DynamoDB 流的键值对进行比较。例如,如果标签条件匹配,则可以支持流 GetRecords 操作。
使用 Amazon CLI
-
创建一个启用了流的表,并添加一个标签。
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 -
向流添加标签。首先,从表描述中获取流 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 -
创建内联策略并将其添加到角色中,如以下示例所示。
{ "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操作。 -
使用步骤 3 中描述的策略代入该角色。
-
在流上使用
describe-streamAmazon CLI 命令。aws dynamodb describe-stream \ --stream-arn $STREAM_ARN \ --region us-east-1
带和不带 Streams ABAC 时的行为
- 不带 Streams ABAC
-
如果您未为您的 Amazon Web Services 账户启用 Streams ABAC,则 IAM 策略和 DynamoDB 流中的标签条件将不匹配。
DescribeStream操作会返回AccessDeniedException,因为没有任何策略支持在不匹配标签条件的情况下执行该操作。 - 带 Streams ABAC
-
如果您为您的 Amazon Web Services 账户启用了 Streams ABAC,则
DescribeStream操作将成功完成。这是因为,当 IAM 策略和流中的标签条件匹配时,内联策略支持该操作。