View a markdown version of this page

排查 DynamoDB Streams 的常见 ABAC 错误 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

排查 DynamoDB Streams 的常见 ABAC 错误

如果您在为 DynamoDB Streams 启用 ABAC 后收到 AccessDeniedException 错误或基于标签的条件的行为不符合预期,请使用本主题诊断并解决最常见的原因。

服务特定的条件键不被视为有效的条件键。如果您在策略中使用了此类键,则这些键会导致错误。您必须将服务特定的条件键替换为适当的条件键,以便为 DynamoDB Streams 实施 ABAC。

例如,假设您在对流执行 GetRecords 请求的策略中使用了 dynamodb:ResourceTag 条件键。该请求失败并引发 AccessDeniedException。以下示例显示了带有 dynamodb:ResourceTag 条件键的错误策略。

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

要修复此问题,请将 dynamodb:ResourceTag 条件键替换为 aws:ResourceTag,如以下示例所示。

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

如果您最近启用了 Streams ABAC,则更改可能尚未传播。更新 Streams ABAC 的状态是一项异步操作。请等待几分钟,然后重试请求。

删除父表后,流将继续存在 24 小时,然后才会被移除。在这 24 小时时段内,您可以使用 CLI 或 SDK 命令(tag-resource、untag-resource 和 list-tags-of-resource)以及流 ARN 来管理流标签。您无法使用控制台或 CloudFormation 来修改其父表不再存在的流上的标签。

如果您在尝试通过控制台添加标签时收到错误,请改用 CLI:

aws dynamodb tag-resource \ --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/DeletedTable/stream/2024-01-01T00:00:00.000 \ --tags Key=environment,Value=production

要验证已删除父表的流中的现有标签:

aws dynamodb list-tags-of-resource \ --resource-arn arn:aws:dynamodb:us-east-1:123456789012:table/DeletedTable/stream/2024-01-01T00:00:00.000

如果您收到 ResourceNotFoundException,则表示 24 小时保留期已过期,该流已不复存在。

仅当满足以下条件时,才能自行选择退出 Streams ABAC:

  • 您使用的是通过 DynamoDB 控制台选择加入的自助服务方式。

  • 您将在选择加入后的七个日历日内选择退出。

如果通过支持部门为您的账户启用了 Streams ABAC,将无法通过 DynamoDB 控制台选择退出。要选择退出,请联系支持部门。

如果 IAM 角色缺少所需的权限,则使用流来创建或更新表的 CloudFormation 部署可能会失败。具体而言,该角色必须对流资源拥有 dynamodb:TagResource 和 dynamodb:UntagResource 权限。这同时适用于 AWS::DynamoDB::Table 和 AWS::DynamoDB::GlobalTable 资源类型,并会影响显式流标签和继承的堆栈级标签。

要解决此问题,请更新您的 CloudFormation 服务角色的 IAM 策略,以包含为流添加标签的权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:TagResource", "dynamodb:UntagResource" ], "Resource": [ "arn:aws:dynamodb:*:*:table/*/stream/*" ] } ] }