Локальний клієнт бази даних і приватний RDS: чому з’єднання завершується тайм-аутом
Локальний клієнт не потрапляє на приватний екземпляр RDS з трьох окремих причин. Перш ніж щось змінювати, перевірте розділений DNS, маршрут і докази групи безпеки.
Ноутбук розробника завершується тайм-аутом під час підключення до приватної кінцевої точки RDS, хоча ті самі облікові дані працюють з bastion-хоста. Нічого не впало. Шляху між цим ноутбуком і базою даних бракує однієї з трьох речей: імені, яке розв’язується, маршруту, який несе трафік, або правила групи безпеки, яке пропускає джерело, яке база даних справді бачить. З’ясуйте, чого бракує, перш ніж змінювати два інші.
Читайте відмову на правильному рівні
Тайм-аут — це не одна помилка. Ім’я, яке не розв’язується, відмовляє раніше, ніж пакет покине машину. Адреса без маршруту надсилає пакети в чорну діру. Відфільтрований порт дає очікування, яке виглядає точно як неправильний хост. Виконуйте кроки по черзі й зупиніться на першому, який не пройде.
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, приватна адреса bastion-хоста або адреса NAT, у яку транслюється трафік. Читайте правило й фактичне джерело пакета разом.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
Правило для домашньої адреси одного ноутбука — це проблема супроводу, а не проєкт доступу.
Коли на шляху стоїть клієнтський VPN або шлюз NAT, база даних може бачити адресу транслятора замість адреси тунелю розробника. Тому правило, скопійоване з робочого налаштування bastion-хоста, може не спрацювати для ноутбука: два шляхи приходять із різних джерел, хоча обидва виглядають внутрішніми.
Віддавайте перевагу вузькому шляху перед широким
Коли одному розробникові потрібна одна база даних, переспрямування на основі сеансу часто дешевше в експлуатації, ніж повний мережевий тунель. Локальний клієнт підключається до переспрямованого порту, а віддалений компонент встановлює з’єднання з базою зсередини мережі.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
Зберігайте перевірку TLS недоторканою в такій схемі. Клієнт і далі має звіряти сертифікат сервера з очікуваним іменем; локальний переспрямований порт не причина вимикати перевірку, а її вимкнення приховує саме ту проблему ідентичності, яку варто зловити.
Вибір між повним тунелем і вузьким переспрямуванням — рішення про обсяг, а не про театр безпеки.
Залиште по собі повторюваний шлях
Задокументуйте ім’я кінцевої точки замість розв’язаної адреси, діапазон джерела, який пропускає група безпеки, і роль бази даних, яку використовує розробник. Ці три факти пояснюють більшість майбутніх збоїв без дзвінка. Додайте й версію клієнтського профілю, бо зміна профілю може прибрати маршрут, який ніс старий.
Потім один раз перевірте негативний випадок: клієнт поза схваленим джерелом має й далі отримувати відмову.
Приватна база даних, яка працює лише для того, хто її налаштував, — не приватний доступ; це недокументований виняток, що чекає, коли його знову виявлять. Запишіть шлях, і наступний розробник успадкує метод замість загадки.