授予对 Amazon RDS 数据 API 的访问权限
用户只有在获得授权的情况下才能调用 Amazon RDS 数据 API(数据 API)操作。您可以通过附加定义用户权限的 Amazon Identity and Access Management(IAM)策略,授予用户使用数据 API 的权限。如果您使用的是 IAM 角色,您还可以将策略附加到角色。Amazon 托管式策略 AmazonRDSDataFullAccess
包含数据 API 的权限。
AmazonRDSDataFullAccess
策略还包含允许用户从 Amazon Secrets Manager 获取密钥值的权限。用户需要使用 Secrets Manager 来存储他们在调用数据 API 时可以使用的密钥。使用密钥意味着用户不需要在调用数据 API 时提供其目标资源的数据库凭证。数据 API 会透明地调用 Secrets Manager,后者会允许(或拒绝)用户的密钥请求。有关如何设置与数据 API 一起使用的密钥的信息,请参阅在 Amazon Secrets Manager 中存储数据库凭证。
AmazonRDSDataFullAccess
策略提供对资源的完全访问权限(通过数据 API 进行访问)。您可以通过定义指定资源的 Amazon 资源名称(ARN)的策略来缩小范围。
例如,以下策略显示了用户访问数据库集群(由其 ARN 标识)的数据 API 所需的最低权限的示例。该策略包含用户访问 Secrets Manager 和获取数据库实例授权所需的权限。
{ "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(如示例所示),而不是通配符 (*)。
使用基于标签的授权
RDS 数据 API(数据 API)和 Secrets Manager 都支持基于标签的授权。标签是用附加的字符串值标记资源(如 RDS 集群)的键值对,例如:
environment:production
environment:development
您可以出于成本分配、操作支持、访问控制及许多其他原因,为资源应用标签。(如果您的资源上还没有标签,并且您想要应用标签,您可以在为 Amazon RDS 资源添加标签中了解更多信息。) 您可以在策略语句中使用标签来限制对使用这些标签进行标记的 RDS 集群的访问。例如,Aurora 数据库集群可能包含将其环境标识为生产环境或开发环境的标签。
以下示例说明如何在策略语句中使用标签。这条语句要求在 Data API 请求中传递的集群和密钥都包含 environment:production
标签。
策略的应用方式如下:当用户使用数据 API 进行调用时,请求被发送到服务。数据 API 首先验证在请求中传递的集群 ARN 是否包含 environment:production
标签。然后,它会调用 Secrets Manager 以在请求中检索用户密钥的值。Secrets Manager 还会验证用户的密钥是否已使用 environment:production
进行标记。如果包含,Data API 将使用检索到的值作为用户的数据库密码。最后,如果此密码正确,则会为用户成功调用 Data API 请求。
{ "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 策略)。
在策略的 "Condition" 元素中,您可以从以下选项中选择标签键:
aws:TagKeys
aws:ResourceTag/${TagKey}
要了解有关资源标签以及如何使用 aws:TagKeys
的更多信息,请参阅使用资源标签控制对 Amazon 资源的访问。
注意
数据 API 和 Amazon Secrets Manager 都会对用户进行授权。如果您不具有策略中定义的所有操作的权限,则会收到 AccessDeniedException
错误。
在 Amazon Secrets Manager 中存储数据库凭证
调用 Amazon RDS 数据 API(数据 API)时,您可以使用 Secrets Manager 中的密钥传递 Aurora 数据库集群的凭证。要通过此方式传递凭证,您需要指定密钥的名称或密钥的 Amazon 资源名称(ARN)。
在密钥中存储数据库集群凭证
-
使用 Secrets Manager 创建包含 Aurora 数据库集群凭证的密钥。
有关说明,请参阅《Amazon Secrets Manager 用户指南》中的创建数据库密钥。
-
使用 Secrets Manager 控制台查看您创建的密钥的详细信息,或运行
aws secretsmanager describe-secret
Amazon CLI 命令。记下密钥的名称和 ARN。您可以将其用于对数据 API 的调用中。
有关使用 Secrets Manager 的更多信息,请参阅 Amazon Secrets Manager 用户指南。
要了解 Amazon Aurora 如何管理身份和访问管理,请参阅 Amazon Aurora 如何使用 IAM。
有关创建 IAM 策略的更多信息,请参阅 IAM 用户指南中的创建 IAM 策略。有关将 IAM 策略添加到用户的信息,请参阅《IAM 用户指南》 中的添加和删除 IAM 身份权限。