Client local de baze de date și RDS privat: de ce conexiunea expiră
Un client local nu ajunge la o instanță RDS privată din trei motive separate. Verificați DNS-ul divizat, ruta și dovezile grupului de securitate înainte de a schimba ceva.
Laptopul unui dezvoltator expiră la conectarea la punctul final privat RDS, în timp ce aceleași credențiale funcționează de pe un host bastion. Nimic nu este căzut. Căii dintre acel laptop și baza de date îi lipsește unul dintre trei lucruri: un nume care se rezolvă, o rută care transportă traficul sau o regulă din grupul de securitate care admite sursa pe care baza de date o vede efectiv. Aflați care lipsește înainte de a le schimba pe celelalte două.
Citiți eșecul la stratul potrivit
O expirare nu este o singură eroare. Un nume care nu se rezolvă eșuează înainte ca un pachet să părăsească mașina. O adresă fără rută trimite pachetele într-o gaură neagră. Un port filtrat produce o așteptare care arată exact ca un host greșit. Rulați pașii în ordine și opriți-vă la primul care eșuează.
dig +short db.internal.example
nc -vz db.internal.example 5432
Dacă numele returnează o adresă publică sau nimic, tunelul încă nu este problema.
Dacă numele se rezolvă și testul portului se blochează, comparați adresa rezolvată cu adresa raportată de baza de date. Un punct final administrat se poate rezolva într-o adresă privată din interiorul VPC-ului și în nimic util în afara lui, iar o adresă copiată dintr-o căutare veche va indica un host care nu mai răspunde.
Separați tunelul de rută
Conectarea unui VPN de client nu rutează automat fiecare interval privat. Profilul poartă rutele pe care serviciul le împinge, iar clientul poate instala doar unele dintre ele. Uitați-vă ce intervale a adăugat clientul efectiv și dacă adresa bazei de date se află în unul dintre ele.
ip route get 10.20.40.15
ip addr show tun0
O rută care indică interfața tunelului este necesară; nu este suficientă, pentru că partea cealaltă trebuie încă să accepte traficul.
Profilurile de tunel divizat sunt sursa obișnuită a acestei eșec parțial. Funcționează pentru aplicația pentru care a fost proiectat profilul și lasă intervalul bazei de date în afara tunelului, ceea ce produce exact expirarea pe care ar produce-o un firewall.
Potriviți grupul de securitate cu sursa reală
Grupul de securitate RDS admite surse, nu oameni. În funcție de arhitectură, sursa poate fi pool-ul de clienți VPN, adresa privată a unui bastion sau o adresă NAT în care este tradus traficul. Citiți regula și sursa reală a pachetului împreună.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
O regulă pentru adresa de acasă a unui singur laptop este o problemă de mentenanță, nu un proiect de acces.
Când pe traseu se află un VPN de client sau un gateway NAT, baza de date poate vedea adresa traducătorului în locul adresei tunelului dezvoltatorului. De aceea o regulă copiată dintr-o configurație de bastion care funcționează poate eșua pentru un laptop: cele două căi vin din surse diferite deși ambele par interne.
Preferați o cale îngustă în locul uneia largi
Când un dezvoltator are nevoie de o bază de date, redirecționarea bazată pe sesiune este adesea mai ieftin de operat decât un tunel de rețea complet. Clientul local se conectează la un port redirecționat, iar componenta aflată la distanță face conexiunea la baza de date din interiorul rețelei.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
Păstrați verificarea TLS intactă în acel proiect. Clientul ar trebui să valideze în continuare certificatul serverului față de numele pe care îl așteaptă; un port redirecționat local nu este un motiv să dezactivați verificarea, iar dezactivarea ei ascunde exact problema de identitate care merită prinsă.
Alegerea între un tunel complet și o redirecționare îngustă este o decizie despre amploare, nu despre teatru de securitate.
Lăsați în urmă o cale repetabilă
Documentați numele punctului final în locul unei adrese rezolvate, intervalul sursă admis de grupul de securitate și rolul de bază de date folosit de dezvoltator. Aceste trei fapte explică majoritatea eșecurilor viitoare fără un telefon. Adăugați și versiunea profilului de client, pentru că o schimbare de profil poate elimina o rută pe care o purta cel vechi.
Apoi testați o dată cazul negativ: un client din afara sursei aprobate ar trebui să fie în continuare refuzat.
O bază de date privată care funcționează doar pentru persoana care a configurat-o nu este acces privat; este o excepție nedocumentată care așteaptă să fie redescoperită. Scrieți calea, iar următorul dezvoltator moștenește o metodă în loc de un mister.