Назад | Перейти на главную страницу

AWS Security Group - как разрешить общедоступный IP-адрес от другой группы безопасности

У меня есть два экземпляра в разных группах безопасности VPC, каждая со своим публичным IP-адресом. Я хотел бы, чтобы первый экземпляр мог подключаться к второму экземпляру на его общедоступном IP-адресе. Я обнаружил, что предоставление доступа группе безопасности разрешает доступ только к частному IP, а не к общедоступному IP.

Теперь я определил свою группу безопасности, чтобы разрешить доступ к общедоступному IP-адресу экземпляра, который находится в другой группе безопасности. Однако это неудобно, так как я не могу легко автоматизировать это (подумайте о Ansible), так как мне сначала нужно будет выполнить поиск имени DNS, прежде чем я смогу добавить его в группу.

Кто-нибудь знает более простой способ сделать это?

Подвести итоги:

Экземпляр 1 требуется для доступа к экземпляру 2 по общедоступному IP-адресу. В настоящее время мне приходится вручную искать IP-адрес экземпляра 1 и, в свою очередь, добавлять его в группу безопасности экземпляра 2.

Боюсь, что как только вы перейдете на публичные IP-адреса, вы больше не сможете использовать ID группы безопасности в качестве Источника в целевой SG. Это работает только для частных IP-адресов.

Однако если вы создадите Экземпляр 1 через 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.

Надеюсь, это поможет :)

Запросы с общедоступного IP-адреса экземпляра не обрабатываются так, как будто они поступают из групп безопасности экземпляра. Это работает только для запросов с использованием частных IP-адресов.

Я рекомендую исходному экземпляру использовать DNS-адрес для целевого экземпляра, который разрешается в частный IP-адрес целевого экземпляра. Например: вы создаете запись CNAME my-service.example.com который указывает на общедоступное DNS-имя целевого экземпляра, предоставленное AWS. Публичное 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-адрес изменится, если сервер выключится.

Обычно вы создаете именованную группу безопасности, присоединяете ее к этим экземплярам и добавляете правило, которое ссылается на эту группу безопасности как на источник и разрешает необходимые порты назначения.

Окончательное изображение:

  • Все экземпляры, необходимые для связи друг с другом, имеют created security group прилагается.
  • В created security group содержит правила, которые определяют входящий из created security group к destination port you need
  • Часто правила для исходящего трафика отсутствуют, поскольку группы безопасности имеют состояние. Но смело добавляйте то, что нужно.

Таким образом, в принципе не требуется даже один IP-адрес, а разрешить / запретить можно контролировать, прикрепив группу безопасности к ресурсам, к которым необходим доступ. Этот метод также хорошо работает с динамическими средами (например, с автомасштабированием).