我已为 RDS 实例分配一个安全组,该实例允许来自我们的 EC2 实例的端口 5432 流量。
但是,此安全组已为所有 IP 的所有流量启用了所有出站流量。
这是否存在安全风险?理想的出站安全规则应该是什么?在我看来,RDS 安全组的出站流量应限制为到我们的 EC2 实例的端口 5432,对吗?
答案1
这是一个安全风险吗?
有可能。有些配置,例如Postgres 外部数据包装器可以允许您的 RDS 实例建立出站连接,并且您允许的任何实际上不需要允许的操作都是潜在的风险。
理想的出站安全规则应该是什么?
什么都不应该被允许,除非你的数据库需要发起出站连接,仅在使用外部数据包装器功能的情况下才允许一个数据库服务器联系到另一个数据库服务器,以联合访问外部(外部)数据。
在我看来,RDS 安全组的出站流量应该限制到我们的 EC2 实例的端口 5432,对吗?
几乎正确,但技术上不正确(或表述含糊)。
实例未使用其端的端口 5432。这是目标端口。实例端的源端口通常随每次连接而变化。
安全组是有状态的,它们的规则只需要允许引发连接数。响应流量将自动允许,无需配置。
“安全组是有状态的——允许入站流量的响应可以流出,而不管出站规则如何,反之亦然。”
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html#VPCSecurityGroups
到数据库的入站连接的目标端口为 5432。因此,单个入站规则允许建立这些连接和要返回的回复流量。
数据库安全组中的出站“允许”规则对于数据库响应这些入站连接不是必需的。安全组规则控制连接的启动。
即使在 RDS 内进行复制的情况下,情况也是如此。在这样的配置下,RDS 机器显然必须相互连接,但事实证明它们有自己的“隐藏”网络,可以通过该网络建立这些连接,并且它不依赖于您的安全组设置。