

# 将 IAM 与全局表结合使用
<a name="gt_IAM"></a>

**重要**  
 本文档适用于版本 2017.11.29（旧版）的全局表，对于新的全局表，应避免使用该版本。客户应尽可能使用[全局表版本 2019.11.21（当前版）](GlobalTables.md)，因为相比 2017.11.29（旧版），它提供了更大的灵活性、更高的效率并且消耗的写入容量更少。  
要确定正在使用的版本，请参阅[确定全局表的版本](V2globaltables_versions.md#globaltables.DetermineVersion)。要将现有全局表从版本 2017.11.29（旧版）更新到版本 2019.11.21（当前版），请参阅[DynamoDB 全局表版本](V2globaltables_versions.md)。

当您首次创建全局表时，Amazon DynamoDB 会自动为您创建一个 Amazon Identity and Access Management (IAM) 服务相关角色。该角色名为 [https://console.amazonaws.cn/iam/home#/policies/arn:aws:iam::aws:policy/aws-service-role/DynamoDBReplicationServiceRolePolicy](https://console.amazonaws.cn/iam/home#/policies/arn:aws:iam::aws:policy/aws-service-role/DynamoDBReplicationServiceRolePolicy)，使得 DynamoDB 能够代表您管理全局表的跨区域复制。不要删除该服务相关角色。否则，所有全局表都将无法继续工作。

有关服务相关角色的更多信息，请参见 *IAM 用户指南*中的[使用服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html)。

要在 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 操作
<a name="access-policy-gt-example1"></a>

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

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

------
#### [ JSON ]

****  

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

------

## 示例：允许 UpdateGlobalTable、DescribeLimits、application-autoscaling:DeleteScalingPolicy 和 application-autoscaling:DeregisterScalableTarget 操作
<a name="access-policy-gt-example2"></a>

要为 DynamoDB 的全局表更新设置 (`UpdateGlobalTableSettings`)，必须具有 `dynamodb:UpdateGlobalTable`、`dynamodb:DescribeLimits`、`application-autoscaling:DeleteScalingPolicy` 和 `application-autoscaling:DeregisterScalableTarget` 权限。

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

------
#### [ JSON ]

****  

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

------

## 示例：允许对只允许在某些区域中使用副本的特定全局表名执行 CreateGlobalTable 操作
<a name="access-policy-gt-example3"></a>

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

------
#### [ JSON ]

****  

```
{
    "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"
            ]
        }
    ]
}
```

------