У меня есть два экземпляра в разных группах безопасности 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-адрес, а разрешить / запретить можно контролировать, прикрепив группу безопасности к ресурсам, к которым необходим доступ. Этот метод также хорошо работает с динамическими средами (например, с автомасштабированием).