更新Amazon RDS SSL / TLS证书-Elastic Beanstalk


14

AWS最近宣布需要:

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

我有一个托管有经典Elastic Beanstalk负载平衡器的Rails应用程序,该负载平衡器使用RDS连接到Postgres DB。

根据Amazon的要求步骤是:

  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?

LoadBalancerListeners

还是我必须下载更新的证书,然后手动将其安装/添加到我的负载均衡器或EC实例中?不知道该怎么做。


1
您到底要做什么?我不清楚最终的解决方案是什么。
韦伯

3
@weber,我需要确定的主要事情是,具有绑定的RDS连接的Elastic Beanstalk负载均衡器后面的EC2实例是否会自动信任已升级的2019证书。我不确定是否需要通过SSH或使用来手动信任它们.ebextensions。最后,在测试之后,我可以确认他们确实自动信任新的RDS连接。如果RDS数据库实例如此处所述与EB环境分离https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html,那么我不确定结果如何。
stwr667

Answers:


8

仅当与MySQL的应用程序连接经过TLS加密时,才需要执行步骤1和2 。

不要更改LB TLS设置它可以打破你的应用程序,LB TLS是别的东西,其中RDS TLS是另一回事。

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

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

通常,对于DB来说,DB应该位于私有子网中,并且不应从公共站点访问它,当您的数据库和后端连接位于Internet而非VPC上时,TLS很有帮助。

通过MySQL客户端和服务器之间的未加密连接,可以访问网络的人可以监视您的所有流量,并检查在客户端和服务器之间发送或接收的数据。


谢谢@Adiii。你确定吗?在docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…中,它描述了如何查看数据库连接是否正在使用SSL。当我eb ssh连接到服务器时,通过在那里从那里连接到DB psql,然后运行select ssl_is_used(),它返回true!我的RDS实例与EB环境相关联,如docs.aws.amazon.com/elasticbeanstalk/latest/dg/…所述。由于EB是自动连接到RDS的,因此基于上述考虑,我担心更改CA会中断生成的连接。
stwr667

我一般来说,它取决于应用程序如何创建连接,但是链接它建议的代码是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();
Adiii

2
谢谢@Adii。方便,我使用Postgres,而不是MySQL。好消息是我拍摄了快照并刚刚尝试了第3步。一切仍然按预期进行。即使从应用程序服务器重新连接到数据库,它仍然报告它正在使用SSL,因此我认为当RDS实例绑定到EB环境时,ElasticBeanstalk自动处理证书的信任。再次感谢。
stwr667

那么,您如何建立连接?是否在连接字符串中指定了SSL?
Adiii

我有一个Rails应用程序,因此定义了连接信息,database.yml其中调用了ENV变量(例如RDS_DB_NAMERDS_USERNAME等。它没有指定在那里需要SSL(即使可能)。虽然我认为EB默认设置必须是这样的allowprefer或者require,通过环境变量什么的配置。cf:postgresql.org/docs/current/…。它肯定不是其他3个之一,因为disable它将关闭SSL,而其他verify选项在我在CLI上测试它们时失败了。
stwr667

2

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

如果升级与它相连的RDS使用的CA证书,则无需在Beanstalk环境中安装任何内容。 https://stackoverflow.com/a/59742149/7051819

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

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


3
我认为跳转答案被否决了,因为大多数生产环境不在弹性beantalk中使用RDS。在弹性beantalk中使用RDS具有潜在的危险,因为如果终止弹性beantalk实例,数据库也将终止,这不利于数据保留。因此,通常人们会问有关RDS实例独立的弹性beantalk环境。
jakeatwork
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.