Lokalni klijent baze podataka, privatni RDS: zašto veza ističe
Lokalni klijent ne može doći do privatne RDS instance iz tri odvojena razloga. Provjerite split DNS, rutu i dokaze sigurnosne grupe prije nego što bilo šta promijenite.
Prijenosnik jednog programera ističe pri povezivanju na privatnu RDS krajnju tačku, dok isti akreditivi rade s bastion hosta. Ništa nije palo. Putu između tog prijenosnika i baze podataka nedostaje jedna od tri stvari: ime koje se razrješava, ruta koja nosi saobraćaj, ili pravilo sigurnosne grupe koje propušta izvor koji baza podataka zaista vidi. Otkrijte koja nedostaje prije nego što promijenite druge dvije.
Čitajte neuspjeh na pravom sloju
Istek nije jedna greška. Ime koje se ne razrješava pada prije nego paket napusti mašinu. Adresa bez rute šalje pakete u crnu rupu. Filtriran port stvara čekanje koje izgleda tačno kao pogrešan host. Izvedite korake po redu i zaustavite se na prvom koji padne.
dig +short db.internal.example
nc -vz db.internal.example 5432
Ako ime vrati javnu adresu ili ne vrati ništa, tunel još nije problem.
Ako se ime razrješava, a test porta visi, uporedite adresu koju ste razriješili s adresom koju baza podataka prijavljuje. Upravljana krajnja tačka može se razriješiti na privatnu adresu unutar VPC-a i na ništa korisno izvan njega, a adresa kopirana sa starog pretraživanja pokazat će na host koji više ne odgovara.
Odvojite tunel od rute
Povezivanje klijentskog VPN-a ne usmjerava automatski svaki privatni raspon. Profil nosi rute koje servis gura, a klijent može instalirati samo neke od njih. Pogledajte koje je raspone klijent zaista dodao i da li adresa baze podataka pada u neki od njih.
ip route get 10.20.40.15
ip addr show tun0
Ruta koja pokazuje na interfejs tunela je neophodna; nije dovoljna, jer suprotna strana još mora prihvatiti saobraćaj.
Profili podijeljenog tunela uobičajen su izvor ovog polovičnog neuspjeha. Rade za aplikaciju za koju je profil napravljen i ostavljaju raspon baze podataka izvan tunela, što proizvodi tačno onaj istek koji bi proizveo firewall.
Uskladite sigurnosnu grupu sa stvarnim izvorom
RDS sigurnosna grupa propušta izvore, ne ljude. Zavisno od arhitekture, izvor može biti VPN klijentski pool, privatna adresa bastiona ili NAT adresa na koju se saobraćaj prevodi. Čitajte pravilo i stvarni izvor paketa zajedno.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
Pravilo za kućnu adresu jednog prijenosnika je problem održavanja, a ne dizajn pristupa.
Kada je na putu klijentski VPN ili NAT gateway, baza podataka može vidjeti adresu prevodioca umjesto adrese tunela programera. Zato pravilo kopirano s radne bastion postavke može pasti za prijenosnik: dva puta dolaze s različitih izvora iako oba izgledaju interno.
Prednost dajte uskom putu pred širokim
Kada jednom programeru treba jedna baza podataka, prosljeđivanje zasnovano na sesiji često je jeftinije za rad od punog mrežnog tunela. Lokalni klijent se povezuje na proslijeđeni port, a udaljena komponenta ostvaruje vezu s bazom iz unutrašnjosti mreže.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
Zadržite TLS provjeru netaknutom u tom dizajnu. Klijent i dalje treba provjeriti certifikat servera prema imenu koje očekuje; lokalni proslijeđeni port nije razlog da isključite provjeru, a njeno isključivanje skriva upravo problem identiteta koji vrijedi uhvatiti.
Izbor između punog tunela i uskog prosljeđivanja odluka je o obimu, ne o sigurnosnom teatru.
Ostavite za sobom put koji se može ponoviti
Dokumentirajte ime krajnje tačke umjesto razriješene adrese, raspon izvora koji sigurnosna grupa propušta i rolu baze podataka koju programer koristi. Te tri činjenice objašnjavaju većinu budućih neuspjeha bez poziva. Dodajte i verziju klijentskog profila, jer promjena profila može ukloniti rutu koju je stari nosio.
Zatim jednom testirajte negativan slučaj: klijent izvan odobrenog izvora i dalje mora biti odbijen.
Privatna baza podataka koja radi samo za osobu koja ju je postavila nije privatni pristup; to je nedokumentovan izuzetak koji čeka da bude ponovo otkriven. Zapišite put, i sljedeći programer naslijedit će metodu umjesto misterije.