AWS 安全组-如何允许来自另一个安全组的公共 IP

AWS 安全组-如何允许来自另一个安全组的公共 IP

我在 VPC 中有两个实例,它们属于不同的安全组,每个都有自己的公共 IP。我希望实例一能够通过其公共 IP 连接到实例二。我发现授予安全组访问权限只允许访问私有 IP,而不允许访问公共 IP。

我现在已经定义了我的安全组,以允许访问驻留在其他安全组中的实例的公共 IP。然而,这很不方便,因为我无法轻松地自动执行此操作(想想 Ansible),因为我首先需要查找 DNS 名称,然后才能将其添加到组中。

有谁知道更简单的方法吗?

总结一下:

  • 实例 1 -> 1.2.3.4
  • 实例 2 -> 5.6.7.8

实例 1 需要通过其公共 IP 访问实例 2。我目前不得不手动查找实例 1 的 IP,然后将其添加到实例 2 的安全组中。

答案1

恐怕一旦你使用公共 IP,你就不能再使用安全组 ID作为目标 SG 中的源。这仅适用于私有 IP。

但是如果你创建实例 1通过 Ansible,您可以使用Ansible 事实让实例获取其公共 IP 并将其设置为实例 2 SG. 类似这样的操作应该可以做到:

- name: Create Instance 1
  ec2:
    key_name: mykey
    instance_type: t2.micro
    image: ami-123456
    wait: yes
    assign_public_ip: yes             <<< Assign Public IP
  register: ec2

然后你可以将其作为源添加到实例 2 安全组

- name: Instance 2 SG
  ec2_group:
    name: ...
    rules:
    - proto: tcp
      ports:
      - 80
      cidr_ip: "{{ ec2.instances.public_ip }}"   <<< Use it here

类似这样的操作应该可以让你用 Ansible 实现自动化。

希望有帮助:)

答案2

来自实例公共 IP 地址的请求不会被视为来自实例的安全组。这仅适用于使用私有 IP 地址的请求。

我建议源实例使用可解析为目标实例私有 IP 的目标实例 DNS 地址。例如:您创建一个 CNAME 记录,my-service.example.com该记录指向 AWS 提供的目标实例的公共 DNS 名称。公共 DNS 名称将类似于ec2-public-ipv4-address.compute-1.amazonaws.com

AWS 提供水平分割 DNS 解析。当my-service.example.com在公共互联网上解析时,将返回公共 IP。当my-service.example.com在您的 VPC 中解析时,将返回私有 IP。因此,您的源实例将使用私有 IP 连接到目标实例,并且您的安全组规则将按预期工作。

这种 DNS 配置并不总是可行或实用的,因此您可能需要将源实例的公共 IP 地址列入白名单。在这种情况下,请确保它是一个弹性 IP 地址 - 否则如果服务器关闭,公共 IP 将会更改。

答案3

通常,您会创建一个命名的安全组,将其附加到这些实例,然后添加一条引用该安全组作为源并允许所需目标端口的规则。

最终图片:

  • 所有需要互相通信的实例均已附加created security group
  • 包含以下created security group规则:created security groupdestination port you need
  • 通常不包括出站规则,因为安全组是有状态的。但您可以随意添加所需的内容。

因此基本上甚至不需要单个 IP,并且可以通过将安全组附加到需要访问的资源来控制允许/拒绝。此方法也适用于动态环境(例如自动缩放)。

相关内容