将 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
有关服务相关角色的更多信息,请参见 IAM 用户指南中的使用服务相关角色。
要在 DynamoDB 中创建和维护全局表,您必须具有 dynamodb:CreateGlobalTable
权限访问以下各项:
-
要添加的副本表。
-
已经是全局表一部分的每个现有副本。
-
全局表本身。
要为 DynamoDB 的全局表更新设置 (UpdateGlobalTableSettings
),必须具有 dynamodb:UpdateGlobalTable
、dynamodb:DescribeLimits
、application-autoscaling:DeleteScalingPolicy
和 application-autoscaling:DeregisterScalableTarget
权限。
更新现有扩展策略时需要 application-autoscaling:DeleteScalingPolicy
和 application-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:UpdateGlobalTable
、dynamodb:DescribeLimits
、application-autoscaling:DeleteScalingPolicy
和 application-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" ] } ] }