什么应该是适当的安全组规则以允许附加到单个 SecurityGroup 的所有 EC2 实例使用它们的 ElasticIP 而不是它们的 PrivateIP 相互通信
上图说明 我在AmazonVPC中有一个公共子网。该子网有 3 个或更多 EC2 实例:DevOps 实例、PHP 实例、Python 实例等。DevOps 实例附加到 2 个安全组 SG1 和 SG2。PHP/Python 实例仅附加到 1 个安全组 SG2。鉴于表中所示的 SG1 & SG2 规则: DevOps 实例只能通过 SSH 端口:22 从世界访问;PHP/Python 实例只能通过 HTTP 端口:80 从世界访问;只能从附加到同一安全组的所有 EC2 实例访问所有 DevOps/PHP/Python 实例中的所有端口。
用例:我想使用其 ElasticIP 9.8.7.1 从 Internet SSH 到 DevOps 实例。然后从 DevOps 实例,我想使用他们的 ElasticIP 9.8.7.2 / 9.8.7.3(不使用他们的 PrivateIP)通过 SSH 连接到 PHP/Python 实例。此外,我的 PHP 应用程序应该能够通过 ElasticIP 与 Python 应用程序通信,反之亦然——因为 ElasticIP 是我们在应用程序源代码中所拥有的。
问题 1:鉴于表中显示的安全组规则,目前我能够通过仅使用它们的 PrivateIP 而不是使用它们的 ElasticIP 从 DevOps 实例 SSH 到 PHP/Python 实例。
问题 2:我的 PHP/Python 实例也无法通过它们的 ElasticIP 相互通信。
约束:我们会定期从新的/更新的 AMI 为我们的 PHP/Python 应用程序启动新实例。每次我们启动一个新实例时,PrivateIP 都会发生变化。但我需要通过不变的东西(即 ElasticIP)进行定期通信。我们在 DevOps 实例中保留了一个 ~/.ssh/config 文件,以便轻松地通过 SSH 进入应用程序实例。在 ssh 配置文件中,我们将 ElasticIPs 保留为 PHP/Python/Other 实例的 IP 地址。每次将应用实例替换为新实例时,都无法将 ssh 配置文件中的 IP 地址更改为新的 PrivateIP 地址。