适用于 MariaDB、MySQL 和 PostgreSQL 的 IAM 数据库身份验证 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 MariaDB、MySQL 和 PostgreSQL 的 IAM 数据库身份验证

可以使用 Amazon Identity and Access Management(IAM)数据库身份验证对数据库实例进行身份验证。IAM 数据库身份验证适用于 MariaDB、MySQL 和 PostgreSQL。利用此身份验证方法,您在连接到数据库实例时将无需使用密码。而是使用身份验证令牌。

身份验证令牌Amazon RDS 根据请求生成的唯一字符串。身份验证令牌是使用 Amazon 签名版本 4 生成的。每个令牌的使用期限为 15 分钟。您无需将用户凭证存储在数据库中,因为身份验证是使用 IAM 进行外部管理的。此外,您仍可使用标准数据库身份验证。令牌仅用于身份验证,建立后不会影响会话。

IAM 数据库身份验证具有以下优势:

  • 数据库的出站和进站网络流量是使用安全套接字层 (SSL) 或传输层安全性 (TLS) 加密的。有关将 SSL/TLS 与 Amazon RDS 一起使用的更多信息,请参阅使用 SSL/TLS 加密与数据库实例或集群的连接

  • 您可以使用 IAM 集中管理对数据库资源的访问,而不是单独管理对每个数据库实例的访问。

  • 对于在 Amazon EC2 上运行的应用程序,您可以使用 EC2 实例特定的配置文件凭证访问数据库以提高安全性,而不是使用密码。

一般来说,如果应用程序每秒创建的连接少于 200 个,而且您不想直接在应用程序代码中管理用户名和密码,请考虑使用 IAM 数据库身份验证。

Amazon Web Services(Amazon)JDBC 驱动程序支持 IAM 数据库身份验证。有关更多信息,请参阅 Amazon Web Services(Amazon)JDBC 驱动程序 GitHub 存储库中的 Amazon IAM 身份验证插件

Amazon Web Services(Amazon)Python 驱动程序支持 IAM 数据库身份验证。有关更多信息,请参阅 Amazon Web Services(Amazon)Python 驱动程序 GitHub 存储库中的 Amazon IAM 身份验证插件

区域和版本可用性

功能可用性和支持因每个数据库引擎的特定版本以及 Amazon Web Services 区域而异。有关适用于 Amazon RDS 和 IAM 数据库身份验证的版本和区域可用性的更多信息,请参阅支持 Amazon RDS 中 IAM 数据库身份验证功能的区域和数据库引擎

CLI 和开发工具包支持

IAM 数据库身份验证可用于 Amazon CLI 以及以下特定于语言的 Amazon 软件开发工具包:

IAM 数据库身份验证的限制

使用 IAM 数据库身份验证时,以下限制适用:

  • 在以下情况下,IAM 数据库身份验证会限制连接:

    • 在使用由不同 IAM 身份签名的身份验证令牌时,每秒超过 20 个连接。

    • 在使用其他身份验证令牌时,每秒超过 200 个连接。

    使用同一身份验证令牌的连接不受限制。建议您尽可能重复使用身份验证令牌。

  • 目前,IAM 数据库身份验证并不支持所有的全局条件上下文键。

    有关全局条件上下文键的更多信息,请参阅《IAM 用户指南》中的 Amazon 全局条件上下文键

  • 对于 PostgreSQL,如果将 IAM 角色(rds_iam)添加到某个用户(包括 RDS 主用户),IAM 身份验证将优先于密码身份验证,因此该用户必须以 IAM 用户身份登录。

  • 对于 PostgreSQL,Amazon RDS 不支持同时启用 IAM 和 Kerberos 身份验证方法。

  • 对于 PostgreSQL,您不能使用 IAM 身份验证来建立复制连接。

  • 不能使用自定义 Route 53 DNS 记录代替数据库实例端点来生成身份验证令牌。

  • CloudWatch 和 CloudTrail 不记录 IAM 身份验证。这些服务不会跟踪授权 IAM 角色启用数据库连接的 generate-db-auth-token API 调用。有关更多信息,请参阅使用基于属性的访问控制,实现 Amazon RDS IAM 身份验证的可审计性

IAM 数据库身份验证建议

在使用 IAM 数据库身份验证时,建议使用以下方法:

  • 当您的应用程序每秒需要少于 200 个新的 IAM 数据库身份验证连接时,请使用 IAM 数据库身份验证。

    使用 Amazon RDS 的数据库引擎不会对每秒的身份验证尝试次数施加任何限制。不过,在使用 IAM 数据库身份验证时,您的应用程序必须生成身份验证令牌。之后,您的应用程序将使用该令牌连接到数据库实例。如果超出每秒的最大新连接数限制,则 IAM 数据库身份验证的额外开销可能会导致连接受到限制。

    考虑在应用程序中使用连接池来减少持续的连接创建。这可以减少 IAM 数据库身份验证的开销,并允许应用程序重用现有连接。或者,考虑对这些使用案例使用 RDS 代理。RDS 代理有额外费用。请参阅 RDS 代理定价

  • IAM 数据库身份验证令牌的大小取决于许多因素,包括 IAM 标签的数量、IAM 服务策略、ARN 长度以及其他 IAM 和数据库属性。此令牌的最小大小通常约为 1KB,但可以更大。由于使用 IAM 身份验证将此令牌用作数据库的连接字符串中的密码,因此,您应确保您的数据库驱动程序(例如 ODBC)和/或任何工具不会因其大小而限制或以其他方式截断该令牌。截断的令牌将导致数据库和 IAM 执行的身份验证失败。

  • 如果您在创建 IAM 数据库身份验证令牌时使用临时凭证,则在使用 IAM 数据库身份验证令牌发出连接请求时,临时凭证必须仍然有效。

不支持的 Amazon 全局条件上下文键

IAM 数据库身份验证不支持 Amazon 全局条件上下文键的以下子集。

  • aws:Referer

  • aws:SourceIp

  • aws:SourceVpc

  • aws:SourceVpce

  • aws:UserAgent

  • aws:VpcSourceIp

有关更多信息,请参阅《IAM 用户指南》中的 Amazon 全局条件上下文键