将 IAM 与全局表结合使用 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将 IAM 与全局表结合使用

重要

本文档适用于版本 2017.11.29(旧版)的全局表,对于新的全局表,应避免使用该版本。客户应尽可能使用全局表版本 2019.11.21(当前版),因为相比 2017.11.29(旧版),它提供了更大的灵活性、更高的效率并且消耗的写入容量更少。

要确定正在使用的版本,请参阅确定您正在使用的 DynamoDB 全局表版本。要将现有全局表从版本 2017.11.29(旧版)更新到版本 2019.11.21(当前版),请参阅升级全局表

当您首次创建全局表时,Amazon DynamoDB 会自动为您创建一个 Amazon Identity and Access Management (IAM) 服务相关角色。该角色名为 AWSServiceRoleForDynamoDBReplication,它允许 DynamoDB 代表您管理全局表的跨区域复制。不要删除该服务相关角色。否则,所有全局表都将无法继续工作。

有关服务相关角色的更多信息,请参见 IAM 用户指南中的使用服务相关角色

要在 DynamoDB 中创建和维护全局表,您必须具有 dynamodb:CreateGlobalTable 权限访问以下各项:

  • 要添加的副本表。

  • 已经是全局表一部分的每个现有副本。

  • 全局表本身。

要为 DynamoDB 的全局表更新设置 (UpdateGlobalTableSettings),必须具有 dynamodb:UpdateGlobalTabledynamodb:DescribeLimitsapplication-autoscaling:DeleteScalingPolicyapplication-autoscaling:DeregisterScalableTarget 权限。

更新现有扩展策略时需要 application-autoscaling:DeleteScalingPolicyapplication-autoscaling:DeregisterScalableTarget 权限。这样,全局表服务可以在将新策略附加到表或二级索引之前删除旧的扩展策略。

如果您使用 IAM 策略来管理对一个副本表的访问,则应将相同的策略应用于该全局表中的所有其他副本。此做法可帮助您在所有副本表中维护一致的权限模型。

通过对全局表中的所有副本使用相同的 IAM 策略,您还可以避免授予对全局表数据的意外读取和写入访问权限。例如,假设只能访问全局表中一个副本的用户。如果该用户可以写入此副本,则 DynamoDB 会将写操作传播到所有其他副本表。实际上,用户可以(间接)写入全局表中的所有其他副本。通过对所有副本表使用一致的 IAM 策略,可以避免这种情况。

示例:允许 CreateGlobalTable 操作

在将副本添加到全局表之前,您必须先拥有全局表及其每个副本表的 dynamodb:CreateGlobalTable 权限。

下面的 IAM 策略授予允许对所有表执行 CreateGlobalTable 操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["dynamodb:CreateGlobalTable"], "Resource": "*" } ] }

示例:允许 UpdateGlobalTable、DescribeLimits、application-autoscaling:DeleteScalingPolicy 和 application-autoscaling:DeregisterScalableTarget 操作

要为 DynamoDB 的全局表更新设置 (UpdateGlobalTableSettings),必须具有 dynamodb:UpdateGlobalTabledynamodb:DescribeLimitsapplication-autoscaling:DeleteScalingPolicyapplication-autoscaling:DeregisterScalableTarget 权限。

下面的 IAM 策略授予允许对所有表执行 UpdateGlobalTableSettings 操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:UpdateGlobalTable", "dynamodb:DescribeLimits", "application-autoscaling:DeleteScalingPolicy", "application-autoscaling:DeregisterScalableTarget" ], "Resource": "*" } ] }

示例:允许对只允许在某些区域中使用副本的特定全局表名执行 CreateGlobalTable 操作

下面的 IAM 策略授予允许 CreateGlobalTable 操作创建名为,Customers在两个区域中具有副本的全局表的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:CreateGlobalTable", "Resource": [ "arn:aws:dynamodb::123456789012:global-table/Customers", "arn:aws:dynamodb:us-east-1:123456789012:table/Customers", "arn:aws:dynamodb:us-west-1:123456789012:table/Customers" ] } ] }