

# 授予对 Amazon RDS 数据 API 的访问权限
<a name="data-api.access"></a>

用户只有在获得授权的情况下才能调用 Amazon RDS 数据 API（数据 API）操作。您可以通过附加定义用户权限的 AWS Identity and Access Management（IAM）策略，授予用户使用数据 API 的权限。如果您使用的是 IAM 角色，您还可以将策略附加到角色。AWS 托管式策略 `AmazonRDSDataFullAccess` 包含数据 API 的权限。

 `AmazonRDSDataFullAccess` 策略还包含允许用户从 AWS Secrets Manager 获取密钥值的权限。用户需要使用 Secrets Manager 来存储他们在调用数据 API 时可以使用的密钥。使用密钥意味着用户不需要在调用数据 API 时提供其目标资源的数据库凭证。数据 API 会透明地调用 Secrets Manager，后者会允许（或拒绝）用户的密钥请求。有关如何设置与数据 API 一起使用的密钥的信息，请参阅[在 AWS Secrets Manager 中存储数据库凭证](#data-api.secrets)。

 `AmazonRDSDataFullAccess` 策略提供对资源的完全访问权限（通过数据 API 进行访问）。您可以通过定义指定资源的 Amazon 资源名称（ARN）的策略来缩小范围。

例如，以下策略显示了用户访问数据库集群（由其 ARN 标识）的数据 API 所需的最低权限的示例。该策略包含用户访问 Secrets Manager 和获取数据库实例授权所需的权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SecretsManagerDbCredentialsAccess",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:rds-db-credentials/*"
        },
        {
            "Sid": "RDSDataServiceAccess",
            "Effect": "Allow",
            "Action": [
                "rds-data:BatchExecuteStatement",
                "rds-data:BeginTransaction",
                "rds-data:CommitTransaction",
                "rds-data:ExecuteStatement",
                "rds-data:RollbackTransaction"
            ],
            "Resource": "arn:aws:rds:us-east-2:111122223333:cluster:prod"
        }
    ]
}
```

------

建议您为策略语句中的 "Resources" 元素使用具体的 ARN（如示例所示），而不是通配符 (\$1)。

## 使用基于标签的授权
<a name="data-api.access.tag-based-access"></a>

RDS 数据 API（数据 API）和 Secrets Manager 都支持基于标签的授权。*标签*是用附加的字符串值标记资源（如 RDS 集群）的键值对，例如：
+ `environment:production`
+ `environment:development`

您可以出于成本分配、操作支持、访问控制及许多其他原因，为资源应用标签。（如果您的资源上还没有标签，并且您想要应用标签，您可以在[为 Amazon RDS 资源添加标签](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html)中了解更多信息。） 您可以在策略语句中使用标签来限制对使用这些标签进行标记的 RDS 集群的访问。例如，Aurora 数据库集群可能包含将其环境标识为生产环境或开发环境的标签。

以下示例说明如何在策略语句中使用标签。这条语句要求在 Data API 请求中传递的集群和密钥都包含 `environment:production` 标签。

策略的应用方式如下：当用户使用数据 API 进行调用时，请求被发送到服务。数据 API 首先验证在请求中传递的集群 ARN 是否包含 `environment:production` 标签。然后，它会调用 Secrets Manager 以在请求中检索用户密钥的值。Secrets Manager 还会验证用户的密钥是否已使用 `environment:production` 进行标记。如果包含，Data API 将使用检索到的值作为用户的数据库密码。最后，如果此密码正确，则会为用户成功调用 Data API 请求。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SecretsManagerDbCredentialsAccess",
            "Effect": "Allow",
            "Action": [
                 "secretsmanager:GetSecretValue"
               ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:rds-db-credentials/*",
            "Condition": {
                    "StringEquals": {
                        "aws:ResourceTag/environment": [
                                         "production"
                                        ]
                     }
             }
        },
        {
            "Sid": "RDSDataServiceAccess",
            "Effect": "Allow",
            "Action": [
                  "rds-data:*"
               ],
            "Resource": "arn:aws:rds:us-east-2:111122223333:cluster:*",
            "Condition": {
                    "StringEquals": {
                        "aws:ResourceTag/environment": [
                                         "production"
                                        ]
                     }
             }
         }
     ]
}
```

------

该示例分别显示了针对数据 API 和 Secrets Manager 的 `rds-data` 和 `secretsmanager` 操作。不过，您可以通过多种不同的方式组合操作和定义标签条件，以支持您的特定使用案例。有关更多信息，请参阅[为 Secrets Manager 使用基于身份的策略（IAM 策略）](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_identity-based-policies.html#permissions_grant-limited-condition)。

 在策略的 "Condition" 元素中，您可以从以下选项中选择标签键：
+  `aws:TagKeys` 
+  `aws:ResourceTag/${TagKey}` 

要了解有关资源标签以及如何使用 `aws:TagKeys` 的更多信息，请参阅[使用资源标签控制对 AWS 资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

**注意**  
 数据 API 和 AWS Secrets Manager 都会对用户进行授权。如果您不具有策略中定义的所有操作的权限，则会收到 `AccessDeniedException` 错误。

## 在 AWS Secrets Manager 中存储数据库凭证
<a name="data-api.secrets"></a>

调用 Amazon RDS 数据 API（数据 API）时，您可以使用 Secrets Manager 中的密钥传递 Aurora 数据库集群的凭证。要通过此方式传递凭证，您需要指定密钥的名称或密钥的 Amazon 资源名称（ARN）。

**在密钥中存储数据库集群凭证**

1. 使用 Secrets Manager 创建包含 Aurora 数据库集群凭证的密钥。

   有关说明，请参阅《AWS Secrets Manager 用户指南》**中的[创建数据库密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html)。

1. 使用 Secrets Manager 控制台查看您创建的密钥的详细信息，或运行 `aws secretsmanager describe-secret` AWS CLI 命令。

   记下密钥的名称和 ARN。您可以将其用于对数据 API 的调用中。

有关使用 Secrets Manager 的更多信息，请参阅 [AWS Secrets Manager 用户指南](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。

要了解 Amazon Aurora 如何管理身份和访问管理，请参阅 [Amazon Aurora 如何使用 IAM](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/security_iam_service-with-iam.html)。

有关创建 IAM 策略的更多信息，请参阅 *IAM 用户指南*中的[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。有关将 IAM 策略添加到用户的信息，请参阅《IAM 用户指南》** 中的[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。