Връзката от лаптопа на разработчик изтича, докато се свързва с частната крайна точка на RDS, а същите идентификационни данни работят от бастионен хост. Нищо не е паднало. На пътя между този лаптоп и базата данни липсва едно от три неща: име, което се разрешава, маршрут, който носи трафика, или правило в група за сигурност, което допуска източника, който базата данни действително вижда. Открийте кое липсва, преди да променяте другите две.

Четете отказа на правилния слой

Изтичането не е една грешка. Име, което не се разрешава, се проваля, преди пакет да напусне машината. Адрес без маршрут изпраща пакетите в черна дупка. Филтриран порт създава изчакване, което изглежда точно като грешен хост. Изпълнете стъпките по ред и спрете на първата, която се провали.

dig +short db.internal.example
nc -vz db.internal.example 5432

Ако името върне публичен адрес или не върне нищо, тунелът още не е проблемът.

Ако името се разрешава, а тестът на порта виси, сравнете адреса, който сте разрешили, с адреса, който базата данни съобщава. Управлявана крайна точка може да се разреши до частен адрес във VPC и до нищо полезно извън нея, а адрес, копиран от старо търсене, ще сочи хост, който вече не отговаря.

Отделете тунела от маршрута

Свързването на клиентски VPN не маршрутизира автоматично всеки частен диапазон. Профилът носи маршрутите, които услугата избутва, и клиентът може да инсталира само част от тях. Вижте кои диапазони клиентът действително е добавил и дали адресът на базата данни попада в един от тях.

ip route get 10.20.40.15
ip addr show tun0

Маршрут, който сочи към интерфейса на тунела, е необходим; той не е достатъчен, защото другата страна все още трябва да приеме трафика.

Профили с разделен тунел са обичайният източник на този половин провал. Те работят за приложението, за което профилът е създаден, и оставят диапазона на базата данни извън тунела, което дава точно изтичането, което би дала защитна стена.

Съпоставете групата за сигурност с реалния източник

Групата за сигурност на RDS допуска източници, не хора. Според архитектурата източникът може да е пулът от VPN клиенти, частният адрес на бастион или NAT адрес, към който се преобразува трафикът. Четете правилото и действителния източник на пакета заедно.

aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
  --query 'SecurityGroups[].IpPermissions'

Правило за домашния адрес на един лаптоп е проблем за поддръжка, а не дизайн на достъпа.

Когато на пътя стои клиентски VPN или NAT шлюз, базата данни може да види адреса на преобразувателя вместо адреса на тунела на разработчика. Затова правило, копирано от работеща бастионна настройка, може да се провали за лаптоп: двата пътя идват от различни източници, макар и двата да изглеждат вътрешни.

Предпочитайте тесен път пред широк

Когато един разработчик се нуждае от една база данни, пренасочването на базата на сесия често е по-евтино за експлоатация от пълен мрежов тунел. Локалният клиент се свързва с пренасочен порт, а отдалеченият компонент осъществява връзката с базата данни отвътре в мрежата.

ssh -N -L 5432:db.internal.example:5432 bastion.internal.example

Запазете проверката на TLS непокътната в този дизайн. Клиентът все още трябва да валидира сертификата на сървъра спрямо името, което очаква; локалният пренасочен порт не е причина да изключите проверката, а изключването и скрива точно проблема с идентичността, който си заслужава да бъде хванат.

Изборът между пълен тунел и тясно пренасочване е решение за обхват, а не за театър по сигурност.

Оставете след себе си повтаряем път

Документирайте името на крайната точка, а не разрешения адрес, диапазона на източника, който групата за сигурност допуска, и ролята в базата данни, която разработчикът използва. Тези три факта обясняват повечето бъдещи провали без обаждане. Добавете и версията на клиентския профил, защото промяна в профила може да премахне маршрут, който старият е носил.

След това тествайте отрицателния случай веднъж: клиент извън одобрения източник трябва все още да бъде отказан.

Частна база данни, която работи само за човека, който я е настроил, не е частен достъп; това е недокументирано изключение, което чака да бъде открито отново. Запишете пътя и следващият разработчик ще наследи метод вместо загадка.

Подобни статии