【问题标题】:Update Amazon RDS SSL/TLS Certificates - Elastic Beanstalk更新 Amazon RDS SSL/TLS 证书 - Elastic Beanstalk
【发布时间】:2020-02-15 02:43:16
【问题描述】:

AWS 最近宣布需要:

在 2019 年 10 月 31 日之前更新您的 Amazon RDS SSL/TLS 证书

我有一个使用经典 Elastic Beanstalk 负载均衡器托管的 Rails 应用程序,它使用 RDS 连接到 Postgres 数据库。

根据亚马逊要求的步骤是:

  1. 从使用 SSL/TLS 加密与数据库实例的连接下载新的 SSL/TLS 证书。
  2. 更新您的数据库应用程序以使用新的 SSL/TLS 证书。
  3. 修改数据库实例以将 CA 从 rds-ca-2015 更改为 rds-ca-2019。

(https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html)

由于我的负载均衡器是这样设置的(通过 HTTP 端口 80(不是 SSL)连接到我的 EC2 实例,这是否意味着我不需要执行步骤 1 和 2?只需执行步骤 3?

或者我是否必须下载更新的证书并手动将它们安装/添加到我的负载均衡器或 EC 实例?不知道该怎么做。

【问题讨论】:

  • 你最后做了什么?我不清楚最终的解决方案是什么。
  • @weber,我需要确定的主要事情是,具有绑定 RDS 连接的 Elastic Beanstalk 负载均衡器后面的 EC2 实例是否会自动信任升级后的 2019 证书。我不确定我是否需要通过 SSH 手动信任他们,或者例如使用.ebextensions。最后经过测试,我可以确认他们确实自动信任新的 RDS 连接。如果 RDS 数据库实例已按照此处https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html 的描述与 EB 环境分离,那么我不确定结果。

标签: ruby-on-rails amazon-web-services ssl-certificate amazon-elastic-beanstalk rds


【解决方案1】:

这个问题有一个更简单的答案:

你不需要在你的 Beanstalk 环境中安装任何东西,如果 您升级附加到它的 RDS 使用的 CA 证书。 https://stackoverflow.com/a/59742149/7051819

只需遵循第 3 点,忽略第 1 点和第 2 点。

(是的,我自己写了那个答案)。

【讨论】:

  • 我认为跳转答案被否决了,因为大多数生产环境不使用弹性 beanstalk 中的 RDS。在弹性 beantalk 中使用 RDS 具有潜在危险,因为如果您终止弹性 beantalk 实例,您的数据库也会终止,这不利于数据保留。所以一般来说,人们都在询问 RDS 实例是独立的弹性 beanstalk 环境。
【解决方案2】:

仅当您的应用程序connection with MySQL is TLS encrypted 时才需要第 1 步和第 2 步。

不要更改 LB TLS 设置它可能会破坏您的应用程序,LB TLS 是别的东西,RDS TLS 是别的东西。

如果您的应用程序只是创建普通连接,您可以安全地直接执行第 3 步。

修改数据库实例以将 CA 从 rds-ca-2015 更改为 rds-ca-2019。

数据库的通常做法是,数据库应位于私有子网中,并且不应从公共访问,当您的数据库和后端连接在互联网上而不是在 VPC 内时,TLS 很有帮助。

在 MySQL 客户端和 服务器,可以访问网络的人可以观看您的所有 流量并检查客户端之间发送或接收的数据 服务器。

【讨论】:

  • 谢谢@Adiii。你确定吗?这里docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… 描述了如何查看您的数据库连接是否使用 SSL。当我eb ssh 到我的服务器时,通过psql 从那里连接到数据库,然后运行select ssl_is_used(),它返回true!如docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 所述,我的 RDS 实例与我的 EB 环境相关联。由于 EB 是自动连接到 RDS 的,因此我担心更改 CA 会破坏生成的连接。
  • 我说的是一般情况,这取决于应用程序如何创建连接,但链接建议的代码是palin连接。 var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.RDS_HOSTNAME, user : process.env.RDS_USERNAME, password : process.env.RDS_PASSWORD, port : process.env.RDS_PORT }); connection.connect(function(err) { if (err) { console.error('Database connection failed: ' + err.stack); return; } console.log('Connected to database.'); }); connection.end();
  • 谢谢@Adii。仅供参考,我使用的是 Postgres,而不是 MySQL。好消息是我拍了一张快照,刚刚尝试了第 3 步。一切仍然按预期工作。即使从应用程序服务器重新连接到数据库,它仍然报告它正在使用 SSL,所以我假设 ElasticBeanstalk 会在 RDS 实例绑定到 EB 环境时自动处理证书的信任。再次感谢。
  • 那么你如何创建连接?是否在连接字符串中指定了 SSL?
  • 我有一个 Rails 应用程序,所以连接信息在 database.yml 中定义,它调用 ENV 变量,如 RDS_DB_NAMERDS_USERNAME 等。它没有指定在那里需要 SSL(即使它可以)。虽然我认为 EB 上的默认设置必须是 allowpreferrequire 之类的东西,但可以通过环境变量或其他东西进行配置。 cf:postgresql.org/docs/current/…。它绝对不是其他 3 个之一,因为 disable 会关闭 SSL,而其他 verify 选项在我在 CLI 上测试时失败。
猜你喜欢
  • 2020-02-27
  • 2020-03-26
  • 2020-02-13
  • 2011-09-06
  • 2020-04-28
  • 2020-03-21
  • 2019-08-13
  • 2020-05-16
  • 2021-12-16
相关资源
最近更新 更多