Например вам нужно разрешить доступ на EC2-инстансы по 22 порту с определенных адресов. Для этого достаточно создать лишь одно правило внутри Security Group. А что, если ещё нужно открыть доступ на 22 порт с инстансов друг на друга? Создаем дополнительное правило. Задача усложнится, если вы захотите ограничить круг только теми хостами, к которым применяется данная группа безопасности (SG). На практике это решается очень легко с помощью опции self-referencing.
Об этом и поговорим в этой небольшой статье-заметке.
Содержание
Security Group self-referencing
Для демонстрации функционала нам понадобится VPC (если вы ещё не успели создать её сами, то воспользуйтесь default VPC).
Итак, приступим.
Базовая конфигурация
Создадим пару EC2-инстансов. Прицепим одну группу безопасности с единственным правилом, разрешающим подключение с вашего домашнего/офисного адреса. Вся конфигурация будет выглядеть примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
resource "aws_instance" "ec2_test_01" { count = 2 ami = "ami-0d712b3e6e1f798ef" instance_type = "t2.micro" subnet_id = aws_subnet.subnet_public[0].id associate_public_ip_address = true vpc_security_group_ids = [aws_security_group.ec2_self_referencing.id] // укажите имя вашего собственного ключа key_name = "your-key" } resource "aws_security_group" "ec2_self_referencing" { name = "ec2_self_referencing" vpc_id = aws_vpc.main.id egress { cidr_blocks = ["0.0.0.0/0"] ipv6_cidr_blocks = ["::/0"] from_port = 0 protocol = "-1" to_port = 0 } ingress { cidr_blocks = ["1.2.3.4/32"] from_port = 22 protocol = "tcp" to_port = 22 //self = true } } output "ec_instance" { value = { id = aws_instance.ec2_test_01.*.id external_ip = aws_instance.ec2_test_01.*.public_ip internal_ip = aws_instance.ec2_test_01.*.private_ip } } |
Если зайдете в веб-интерфейс, то ничего особенного не увидите:
А теперь рассмотрим каким образом можно разрешить доступ на сами инстансы друг с друга.
Использование self-referencing
У Terraform есть интересная опция, которой однако нет в web-интерфейсе AWS. Речь идет о self-referencing, принцип работы которой очень прост – она разрешает доступ с тех объектов, к которым эта группа безопасности применяется. В документации Terraform это описывается следующим образом, но лично для меня эта формулировка не столь очевидна:
Whether the security group itself will be added as a source to this ingress rule.
Чтобы посмотреть как изменятся входящие правила, раскомментируйте self = true в коде в начале статьи и заново запустите tarraform apply. А результат будет такой:
Как итог – сама же группа безопасности стала источником в правиле ingress. Вы можете проделать это и вручную и кое-где даже встречаются пошаговые инструкции 1.
Вот так все просто. Успехов!