在 RDS 中使用具有 IAM 身份验证的 EC2 实例配置文件



我在 RDS 实例上设置 IAM 身份验证,并且能够使用 IAM 获取工作 15 分钟的数据库密码。这很好,可以访问数据库进行备份,但此数据库会备份 Web 应用程序,因此目前在 15 分钟后,应用程序用于连接到数据库的密码将变为无效,并且应用程序崩溃,因为它无法再访问数据库。

但是,在 RDS IAM 文档中有以下行:

对于在 Amazon EC2 上运行的应用程序,您可以使用 EC2 实例配置文件凭证访问数据库,因此您无需在 EC2 实例上使用数据库密码。

这意味着在 EC2 上无需使用 IAM 临时数据库密码,这意味着只要我的应用程序在 EC2 上运行并且我设置了角色权限(我认为我这样做是正确的(,它就应该能够连接到数据库。但是,除非使用 15 分钟的临时密码,否则我无法在 EC2 上运行我的应用程序以连接到 RDS 数据库。如果我尝试使用没有密码的普通MySQL连接进行连接,则权限被拒绝。使用 EC2 实例配置文件连接到 RDS 是否需要执行一些特殊操作,或者如果不使用 15 分钟的临时密码,是否是不可能的?

根据您链接的文档 (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html(,您需要执行以下步骤(请参阅"使用 IAM 数据库身份验证对数据库实例或数据库集群进行身份验证"(:

  1. 使用适用于 Java 的 AWS 开发工具包或 AWS CLI 获取可用于标识 IAM 用户或角色的身份验证令牌。若要了解如何获取身份验证令牌,请参阅获取身份验证令牌。
  2. 使用 SSL 连接连接到数据库,将 IAM 用户或角色指定为数据库用户账户,将身份验证令牌指定为密码。有关更多信息,请参阅 使用 IAM 数据库身份验证连接到数据库实例或数据库集群。

这意味着对于您打算打开的每个连接,您都需要使用 AWS 开发工具包获取有效的令牌。这是需要使用具有 RDS 权限的正确实例配置文件的地方。另请参阅 AWS 文档页面下方的代码示例。

但是,我认为这需要您付出相当大的努力,以便在打开连接之前始终获得有效的令牌。这使得使用现成的连接池变得困难。可能一旦打开,即使在令牌过期后,连接也会保持打开状态,但您仍然需要处理稍后需要打开更多连接的情况。

我会坚持对应用程序进行正常的用户/密码访问,在这种情况下使用 IAM 似乎太费力了。

对于在 Amazon EC2 上运行的应用程序,您可以使用 EC2 实例配置文件凭证访问数据库,因此您无需在 EC2 实例上使用数据库密码。

你误解了这意味着什么。 这意味着您不必使用静态密码或将其存储在实例上。

这个想法是,每次建立与数据库的连接时,都会生成一个新的身份验证令牌。 令牌是使用实例角色凭证在您的实例上生成的。 它只能用于 15 分钟的身份验证,但连接后,15 分钟后不会丢失数据库连接。 您保持连接。

如果您的应用程序不重用数据库连接,则可能存在设计缺陷。

最新更新