【问题标题】:Using EC2 instance profile with IAM authentication in RDS在 RDS 中使用 EC2 实例配置文件和 IAM 身份验证
【发布时间】:2018-01-10 11:07:56
【问题描述】:

我在一个 RDS 实例上设置了 IAM 身份验证,并且我能够使用 IAM 获取可以使用 15 分钟的数据库密码。可以访问数据库进行备份,但此数据库支持 Web 应用程序,因此当前 15 分钟后,应用程序用于连接数据库的密码无效,应用程序崩溃,因为它无法再访问数据库。

但是,RDS IAM docs 中有这样一行:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-iam rds


    【解决方案1】:

    根据您链接的文档 (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 似乎太费力了。

    【讨论】:

    • 只是为了确认,即使在 15 分钟后连接仍然保持打开状态。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2018-02-07
      • 1970-01-01
      • 2017-12-08
      • 2019-09-14
      • 2020-01-11
      • 2016-10-01
      • 1970-01-01
      • 2020-12-21
      相关资源
      最近更新 更多