Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

创建和使用适用于 IAM 数据库访问的 IAM 策略

要允许 IAM 用户或角色连接到数据库实例或数据库集群,您必须创建 IAM 策略。之后,将此策略附加到 IAM 用户或角色。

注意

要了解有关 IAM 策略的更多信息,请参阅 Amazon RDS 的身份验证和访问控制

以下示例策略允许 IAM 用户使用 IAM 数据库身份验证连接到数据库实例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-west-2:123456789012:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe" ] } ] }

重要

  • 请不要将 rds-db: 前缀与以 rds: 开头的其他 Amazon RDS 操作前缀混淆。仅在 IAM 数据库身份验证使用 rds-db: 前缀和 rds-db:connect 操作。它们在任何其他上下文中无效。

  • 当前,IAM 控制台会对使用 rds-db:connect 操作的策略显示错误。您可以忽略此错误。

示例策略包含带以下元素的单个语句:

  • Effect — 指定 Allow 可授予对数据库实例的访问权限。如果您没有显式允许访问,则默认情况下将拒绝访问。

  • Action — 指定 rds-db:connect 可允许连接到数据库实例。

  • Resource — 指定描述一个数据库实例中的一个数据库账户的 Amazon 资源名称 (ARN)。ARN 格式如下所示。

    arn:aws:rds-db:region:account-id:dbuser:dbi-resource-id/database-user-name

    在此格式中:

    • region 是 Amazon RDS 数据库实例所在的 AWS 区域。在示例策略中,AWS 区域为 us-west-2

    • account-id 是数据库实例的 AWS 账号。在示例策略中,账号为 123456789012

    • dbi-resource-id 是数据库实例的标识符。此标识符对 AWS 区域是唯一的,并且绝不会更改。在示例策略中,标识符为 db-12ABC34DEFG5HIJ6KLMNOP78QR

      要在 AWS 管理控制台中查找 Amazon RDS 的数据库实例资源 ID,请选择所需的数据库实例,然后依次选择 Instance ActionsSee DetailsResource ID 将显示在 Configuration Details 部分中。

      或者,您可使用 AWS CLI 命令列出当前 AWS 区域中所有数据库实例的标识符和资源 ID,如下所示。

      aws rds describe-db-instances \ --query "DBInstances[*].[DBInstanceIdentifier,DbiResourceId]"
    • db-user-name 是要与 IAM 身份验证关联的 MySQL 数据库账户的名称。在示例策略中,数据库账户为 jane_doe

您可以构造其他 ARN 以支持多种访问模式。以下策略允许访问一个数据库实例中的两个不同的数据库账户:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-west-2:123456789012:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe", "arn:aws:rds-db:us-west-2:123456789012:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/mary_roe" ] } ] }

以下 IAM 策略允许访问数据库集群而不是数据库实例。集群标识符为 cluster-CO4FHMOYDKJ7CVBEJS2UWDQX7I

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-west-2:123456789012:dbuser:cluster-CO4FHMOYDKJ7CVBEJS2UWDQX7I/jane_doe" ] } ] }

要在 AWS 管理控制台中查找 Amazon RDS 的数据库集群资源 ID,请选择所需的数据库集群并展开选定内容,然后依次选择 Instance ActionsSee DetailsResource ID 将显示在 DB Cluster Details 部分中。

或者,您可使用 AWS CLI 命令列出当前 AWS 区域中所有数据库集群的标识符和资源 ID,如下所示。

aws rds describe-db-clusters \ --query "DBClusters[*].[DBClusterIdentifier,DbClusterResourceId]"

以下策略使用“*”字符匹配特定 AWS 账户和 AWS 区域的所有数据库实例和数据库集群。但是,此策略仅允许访问具有 jane_doe 数据库账户的数据库实例或数据库集群。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-west-2:123456789012:dbuser:*/jane_doe" ] } ] }

IAM 用户或角色只能访问数据库用户有权访问的那些数据库。例如,假设数据库实例具有一个名为 dev 的数据库,以及另一个名为 test 的数据库。如果数据库用户 jane_doe 只能访问 dev,则与 jane_doe 用户一起访问数据库实例的任何 IAM 用户或角色只能访问 dev。此访问限制还适用于其他数据库对象 (如表、视图等)。

将 IAM 策略附加到 IAM 用户或角色

在创建允许数据库身份验证的 IAM 策略之后,您需要将此策略附加到 IAM 用户或角色。有关此主题的教程,请参阅《IAM 用户指南》 中的创建和附加您的第一个客户托管策略

在演练此教程时,您可使用此部分中显示的策略示例之一作为起点并根据您的需求进行定制。在教程结束时,您将有一个 IAM 用户,该用户具有可利用 rds-db:connect 操作的附加策略。

注意

您可以映射多个 IAM 用户或角色到同一数据库用户账户。例如,假设您的 IAM 策略指定了以下资源 ARN。

arn:aws:rds-db:us-west-2:123456789012:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe

如果您将此策略附加到 IAM 用户 JaneBobDiego,则其中每位用户均可使用 jane_doe 数据库账户连接到指定的数据库实例。