

# 为 RDS 代理配置 IAM 身份验证
<a name="rds-proxy-iam-setup"></a>

要在 Amazon RDS 中为 RDS 代理设置 AWS Identity and Access Management（IAM）身份验证，请创建并配置用于授予必要权限的 IAM 策略。

本主题提供了为 RDS 代理配置 IAM 身份验证的步骤，包括创建所需的 IAM 策略并将其附加到 IAM 角色。

**提示**  
仅当您想创建自己的 IAM 角色时，才需要执行此过程。否则，RDS 可以在您设置代理时自动创建所需的角色，因此您可以跳过这些步骤。

## 先决条件
<a name="rds-proxy-iam-setup-prereqs"></a>

在为 RDS 代理设置 IAM 身份验证之前，请确保您具有以下各项：
+ **AWS Secrets Manager**：至少一个包含数据库凭证的存储密钥。有关创建密钥的说明，请参阅[设置 RDS 代理的数据库凭证](rds-proxy-secrets-arns.md)。

  如果您使用端到端 IAM 身份验证，则不需要这样做。
+ **IAM 权限**：具有在 AWS Secrets Manager 中创建和管理 IAM 策略、角色和密钥的权限的 IAM 角色或用户。

## 创建端到端 IAM 策略
<a name="rds-proxy-iam-setup-e2e-steps"></a>

使用端到端 IAM 身份验证时，RDS 代理使用 IAM 身份验证连接到您的数据库，而不是从 Secrets Manager 检索凭证。这需要为您的 IAM 角色配置您想要与代理一起使用的数据库账户的 `rds-db:connect` 权限。

要使用 IAM 对 RDS 代理进行数据库身份验证，请创建一个 IAM 角色，并附加授予必要数据库连接权限的策略。

### 控制台
<a name="rds-proxy-iam-e2e-console"></a>

**使用代理创建用于端到端 IAM 身份验证的角色**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 为该角色创建权限策略。有关一般步骤，请参阅[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

   将此策略粘贴到 JSON 编辑器中，并进行以下更改：
   + 替换您自己的账户 ID。
   + 将 `us-east-2` 替换为代理必须位于的区域。
   + 用您想使用的 ID 和用户名替换数据库资源 ID 和用户名。RDS 实例和 Aurora clusters的资源 ID 格式有所不同。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "rds-db:connect",
               "Resource": [
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
               ]
           }
       ]
   }
   ```

1. 创建角色并向其附加权限策略。有关一般步骤，请参阅[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

   对于**可信实体类型**，选择 **AWS 服务**。在**用例**下，选择 **RDS**，然后为用例选择 **RDS - 向数据库添加角色**。

1. 对于**权限策略**，选择您创建的策略。

1. 对于**选择可信实体**，为该角色输入以下信任策略：

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "rds.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

### AWS CLI
<a name="rds-proxy-iam-e2e-cli"></a>

要使用 AWS CLI 创建角色，请发送以下请求：

```
aws iam create-role \
  --role-name my_e2e_iam_role_name \

  --assume-role-policy-document '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
```

然后，将策略附加到该角色：

```
aws iam put-role-policy \
  --role-name my_e2e_iam_role_name \
  --policy-name e2e_iam_db_connect_policy \
  --policy-document '{

    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": [
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
            ]
        }
    ]
}'
```

为端到端 IAM 身份验证配置 IAM 角色和权限后，即可创建 `DefaultAuthScheme` 设置为 `IAM_AUTH` 的代理。此代理使用 IAM 直接对数据库进行身份验证，无需使用 Secrets Manager 密钥。有关说明，请参阅[为 Amazon RDS 创建代理](rds-proxy-creating.md)。

使用端到端 IAM 身份验证时，请确保按照[使用 IAM 身份验证创建数据库账户](UsingWithRDS.IAMDBAuth.DBAccounts.md)中所述为数据库用户配置了 IAM 身份验证。

## 创建用于访问 Secrets Manager 的 IAM 策略
<a name="rds-proxy-iam-setup-steps"></a>

要支持 RDS 代理从 Secrets Manager 检索数据库凭证，请创建一个 IAM 角色，并使用授予必要权限的策略。

## 控制台
<a name="rds-proxy-iam-console"></a>

**创建用于访问您的密钥以便与代理一起使用的角色**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 为该角色创建权限策略。有关一般步骤，请参阅[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

   将此策略粘贴到 JSON 编辑器中，并进行以下更改：
   + 替换您自己的账户 ID。
   + 将 `us-east-2` 替换为代理所在的区域。
   + 将密钥名称替换为您创建的名称。有关更多信息，请参阅 [Specifying KMS keys in IAM policy statements](https://docs.aws.amazon.com/kms/latest/developerguide/cmks-in-iam-policies.html)。
   + 将 KMS 密钥 ID 替换为您用于加密 Secrets Manager 密钥（默认密钥或您自己的密钥）的密钥 ID。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "secretsmanager:GetSecretValue",
               "Resource": [
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_1",
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_2"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "kms:Decrypt",
               "Resource": "arn:aws:kms:us-east-2:111122223333:key/key_id",
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. 创建角色并向其附加权限策略。有关一般步骤，请参阅[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

   对于**可信实体类型**，选择 **AWS 服务**。在**用例**下，选择 **RDS**，然后为用例选择 **RDS - 向数据库添加角色**。

1. 对于**权限策略**，选择您创建的策略。

1. 对于**选择可信实体**，为该角色输入以下信任策略：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "rds.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

## AWS CLI
<a name="rds-proxy-iam-cli"></a>

要使用 AWS CLI 创建角色，请发送以下请求：

```
aws iam create-role \
  --role-name my_role_name \
  --assume-role-policy-document '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
```

然后，将策略附加到该角色：

```
aws iam put-role-policy \
  --role-name my_role_name \
  --policy-name secret_reader_policy \
  --policy-document '{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1",
                "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
                }
            }
        }
    ]
}'
```

配置了 IAM 角色和权限后，您现在可以创建代理并将其与该角色关联。这可让代理安全地从 AWS Secrets Manager 中检索数据库凭证，并为您的应用程序启用 IAM 身份验证。有关说明，请参阅[为 Amazon RDS 创建代理](rds-proxy-creating.md)。