

# Aurora DSQL 的身份验证和授权
<a name="authentication-authorization"></a>

Aurora DSQL 使用 IAM 角色和策略进行集群授权。可以将 IAM 角色与 [PostgreSQL database roles](https://www.postgresql.org/docs/current/user-manag.html) 关联以进行数据库授权。这种方法将 [IAM 中的优势](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-iam-features.html)与 [PostgreSQL privileges](https://www.postgresql.org/docs/current/user-manag.html) 相结合。Aurora DSQL 使用这些功能为您的集群、数据库和数据提供全面的授权和访问策略。

## 使用 IAM 管理集群
<a name="authentication-authorization-iam-role-manage"></a>

要管理集群，请使用 IAM 进行身份验证和授权：

**IAM 身份验证**  
要在管理 Aurora DSQL 集群时对 IAM 身份进行身份验证，必须使用 IAM。可以使用 [AWS 管理控制台](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)、[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 或 [AWS SDK](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) 提供身份验证。

**IAM 授权**  
要管理 Aurora DSQL 集群，请使用 Aurora DSQL 的 IAM 操作授予授权。例如，要描述集群，请确保 IAM 身份拥有执行 IAM 操作 `dsql:GetCluster` 的权限，如以下示例策略操作所示。  

```
{
  "Effect": "Allow",
  "Action": "dsql:GetCluster",
  "Resource": "arn:aws:dsql:us-east-1:{{123456789012}}:cluster/{{my-cluster}}"
}
```
有关更多信息，请参阅 [使用 IAM 策略操作管理集群](#authentication-authorization-iam-policy-manage)。

## 使用 IAM 连接到集群
<a name="authentication-authorization-iam-role-connect"></a>

要连接到集群，请使用 IAM 进行身份验证和授权：

**IAM 身份验证**  
使用 IAM 身份（具有连接到集群的授权）生成临时身份验证令牌。要了解更多信息，请参阅[在 Amazon Aurora DSQL 中生成身份验证令牌](SECTION_authentication-token.md)。

**IAM 授权**  
向您用于与集群的端点建立连接的 IAM 身份授予执行以下 IAM 策略操作的权限：  
+ 如果您使用的是 `admin` 角色，请使用 `dsql:DbConnectAdmin`。Aurora DSQL 会为您创建和管理此角色。以下示例 IAM 策略操作支持 `admin` 连接到 {{my-cluster}}。

  ```
  {
    "Effect": "Allow",
    "Action": "dsql:DbConnectAdmin",
    "Resource": "arn:aws:dsql:us-east-1:{{123456789012}}:cluster/{{my-cluster}}"
  }
  ```
+ 如果您使用的是自定义数据库角色，请使用 `dsql:DbConnect`。您可以通过在数据库中使用 SQL 命令来创建和管理此角色。以下示例 IAM 策略操作可让自定义数据库角色连接到 {{my-cluster}} 长达一小时。

  ```
  {
    "Effect": "Allow",
    "Action": "dsql:DbConnect",
    "Resource": "arn:aws:dsql:us-east-1:{{123456789012}}:cluster/{{my-cluster}}"
  }
  ```
建立连接后，您的角色可获得长达一小时的连接授权。

## 使用 PostgreSQL 数据库角色和 IAM 角色与数据库进行交互
<a name="authentication-authorization-database-roles-manage"></a>

PostgreSQL 使用角色的概念来管理数据库访问权限。根据设置角色的方式，可以将角色视为一个数据库用户或一组数据库用户。可以使用 SQL 命令创建 PostgreSQL 角色。要管理数据库级授权，请向 PostgreSQL 数据库角色授予 PostgreSQL 权限。

Aurora DSQL 支持两种类型的数据库角色：`admin` 角色和自定义角色。Aurora DSQL 会自动在 Aurora DSQL 集群中为您创建一个预定义的 `admin` 角色。您不能修改 `admin` 角色。当您以 `admin` 身份连接到数据库时，可以发出 SQL 来创建新的数据库级角色，以便与您的 IAM 角色关联。要让 IAM 角色连接到数据库，请将自定义数据库角色与 IAM 角色相关联。

**身份验证**  
使用 `admin` 角色连接到集群。连接数据库后，使用命令 `AWS IAM GRANT` 将自定义数据库角色与获得授权可连接到集群的 IAM 身份相关联，如下例所示。  

```
AWS IAM GRANT {{custom-db-role}} TO 'arn:aws:iam::{{account-id}}:role/{{iam-role-name}}';
```
要了解更多信息，请参阅[授权数据库角色连接到集群](using-database-and-iam-roles.md#using-database-and-iam-roles-custom-database-roles)。

**Authorization**\*  
使用 `admin` 角色连接到集群。运行 SQL 命令以设置自定义数据库角色并授予权限。要了解更多信息，请参阅 PostgreSQL 文档中的 [PostgreSQL database roles](https://www.postgresql.org/docs/current/user-manag.html) 和 [PostgreSQL privileges](https://www.postgresql.org/docs/current/ddl-priv.html)。

## 将 IAM 策略操作与 Aurora DSQL 结合使用
<a name="authentication-authorization-iam-policy"></a>

您使用的 IAM 策略操作取决于您用于连接到集群的角色：要么是 `admin`，要么是自定义数据库角色。该策略还取决于该角色所需的 IAM 操作。

### 使用 IAM 策略操作连接到集群
<a name="authentication-authorization-iam-policy-connect"></a>

当您使用默认数据库角色 `admin` 连接到集群时，请使用具有授权的 IAM 身份来执行以下 IAM 策略操作。

```
"dsql:DbConnectAdmin"
```

当您使用自定义数据库角色连接到集群时，请先将 IAM 角色与数据库角色关联。您用于连接到集群的 IAM 身份必须具有执行以下 IAM 策略操作的授权。

```
"dsql:DbConnect"
```

要了解有关自定义数据库角色的更多信息，请参阅[使用数据库角色和 IAM 身份验证](using-database-and-iam-roles.md)。

### 使用 IAM 策略操作管理集群
<a name="authentication-authorization-iam-policy-manage"></a>

当管理 Aurora DSQL 集群时，请仅为角色需要执行的操作指定策略操作。例如，如果您的角色只需要获取集群信息，则可以将角色权限限制为仅 `GetCluster` 和 `ListClusters` 权限，如以下示例策略所示

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

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "dsql:GetCluster",
        "dsql:ListClusters"
      ],
      "Resource": "arn:aws:dsql:us-east-1:{{123456789012}}:cluster/{{my-cluster}}"
    }
  ]
}
```

------

以下示例策略显示了所有可用于管理集群的 IAM 策略操作。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "dsql:CreateCluster",
        "dsql:GetCluster",
        "dsql:UpdateCluster",
        "dsql:DeleteCluster",
        "dsql:ListClusters",
        "dsql:TagResource",
        "dsql:ListTagsForResource",
        "dsql:UntagResource"
      ],
      "Resource" : "*"
    }
  ]
}
```

------

## 使用 IAM 和 PostgreSQL 撤销授权
<a name="authentication-authorization-revoke"></a>

您可以撤销 IAM 角色用于访问数据库级角色的权限：

**撤销管理员连接到集群的授权**  
要撤销使用 `admin` 角色连接到集群的授权，请撤销 IAM 身份对 `dsql:DbConnectAdmin` 的访问权限。编辑 IAM 策略或将策略与身份分离。  
从 IAM 身份撤销连接授权后，Aurora DSQL 会拒绝来自该 IAM 身份的所有新的连接尝试。任何使用 IAM 身份的活跃连接都可能在连接的持续时间内保持授权状态。有关连接持续时间的更多信息，请参阅[配额和限制](https://docs.aws.amazon.com/aurora-dsql/latest/userguide/CHAP_quotas.html)。

**撤销自定义角色连接到集群的授权**  
要撤销 `admin` 以外的数据库角色的访问权限，请撤销 IAM 身份对 `dsql:DbConnect` 的访问权限。编辑 IAM 策略或将策略与身份分离。  
也可以在数据库中使用命令 `AWS IAM REVOKE` 来取消数据库角色和 IAM 之间的关联。要了解有关从数据库角色撤销访问权限的更多信息，请参阅[从 IAM 角色撤销数据库授权](using-database-and-iam-roles.md#using-database-and-iam-roles-revoke)。

您无法管理预定义 `admin` 数据库角色的权限。要了解如何管理自定义数据库角色的权限，请参阅 [PostgreSQL privileges](https://www.postgresql.org/docs/current/ddl-priv.html)。对权限的修改将在 Aurora DSQL 成功提交修改事务后的下一个事务中生效。