Сети и 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>"
}

Ссылка на группу приложения, а не на её диапазон адресов, означает, что заменённый инстанс по-прежнему допущен, а машина вне группы — нет, поэтому временное открытие никогда не придётся помнить и закрывать. Администрирование этих хостов через бастион или менеджер сессий, а не через публичный адрес, уменьшает ту же поверхность. Обычная ошибка — добавить диапазон адресов на день тестирования; он переживает развёртывание, его владелец и причина забываются, и до базы может дотянуться любая подсеть.