Сети и VPC — Примеры
Пример 1 — Частная подсеть, которая маршрутизирует в интернет
В одной виртуальной сети живут две подсети: балансировщика и приложения. Вторую при создании назвали «частной», но маршрутизирует на самом деле таблица ниже. Прочитайте таблицу и объявите привязку, которая делает название правдой.
подсеть замысел таблица маршрутов маршрут по умолчанию публичная?
lb-a public rt-public igw yes
app-a private rt-public igw yes
Решение
resource "aws_route_table" "private" {
vpc_id = "<vpc-id>"
# маршрута в интернет-шлюз нет: исходящий идёт через шлюз трансляции
}
resource "aws_route_table_association" "app_a" {
subnet_id = "<app-subnet-a>"
route_table_id = aws_route_table.private.id
}
Подсеть публична потому, что её таблица маршрутов направляет немаршрутизированный трафик в шлюз, а не потому, что ей дали ярлык; значит, перенос привязки — это и есть всё исправление, а приложение сохраняет исходящий доступ через шлюз трансляции. Обычная ошибка — доверять имени с момента создания и не перечитывать таблицу маршрутов после того, как кто-то подключил новую.
Пример 2 — Порт базы, открытый диапазону адресов
Уровень приложения должен достигать базы на её порту, и больше никто. Таблица — задуманный доступ, записанный адресами, потому что так было быстро. Перепишите её в правила, которые держатся, когда инстанс заменяют и его адрес меняется.
от кому порт причина
10.0.0.0/16 db 5432 подсеть приложения
0.0.0.0/0 lb 443 публичный сервис
Решение
resource "aws_security_group" "db" {
# запрет по умолчанию: разрешено только правило ниже
}
resource "aws_security_group_rule" "db_from_app" {
type = "ingress"
from_port = 5432
to_port = 5432
protocol = "tcp"
security_group_id = aws_security_group.db.id
source_security_group_id = "<app-group>"
}
Ссылка на группу приложения, а не на её диапазон адресов, означает, что заменённый инстанс по-прежнему допущен, а машина вне группы — нет, поэтому временное открытие никогда не придётся помнить и закрывать. Администрирование этих хостов через бастион или менеджер сессий, а не через публичный адрес, уменьшает ту же поверхность. Обычная ошибка — добавить диапазон адресов на день тестирования; он переживает развёртывание, его владелец и причина забываются, и до базы может дотянуться любая подсеть.