AWS Security Group - как разрешить публичный IP из другой группы безопасности
У меня есть два экземпляра в разных группах безопасности VPC, каждый со своим публичным IP. Я хотел бы, чтобы экземпляр один мог подключиться ко второму экземпляру по его общедоступному IP. Я обнаружил, что предоставление доступа группе безопасности разрешает доступ только к частному IP, а не к общему IP.
Теперь я определил свою группу безопасности, чтобы разрешить доступ к общедоступному IP-адресу экземпляра, который находится в другой группе безопасности. Тем не менее, это неудобно, так как я не могу легко автоматизировать это (думаю, Ansible), поскольку мне сначала нужно будет выполнить поиск DNS-имени, прежде чем я смогу добавить его в группу.
Кто-нибудь знает более простой способ сделать это?
Подвести итоги:
- Экземпляр 1 -> 1.2.3.4
- Экземпляр 2 -> 5.6.7.8
Экземпляр 1 необходим для доступа к Экземпляру 2 по его общедоступному IP. В итоге мне приходится вручную искать IP-адрес экземпляра 1 и, в свою очередь, добавить его в группу безопасности экземпляра 2.
3 ответа
Боюсь, что как только вы выйдете на общедоступные IP-адреса, вы больше не сможете использовать идентификатор группы безопасности в качестве источника в целевом SG. Это работает только для частных IP-адресов.
Однако, если вы создаете Экземпляр 1 через Ansible, вы можете использовать факты Ansible для экземпляра, чтобы получить его Public IP и установить его в качестве источника в SG экземпляра 2. Нечто подобное должно сделать:
- 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 не требуется, и можно разрешить / запретить, подключив группу безопасности к ресурсам, к которым требуется доступ. Этот метод также прекрасно работает с динамическими средами (например, с автоматическим масштабированием).