Lokalni klijent baze podataka, privatni RDS: zašto veza istječ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 što promijenite.
Prijenosnik jednog programera istječe pri povezivanju na privatnu RDS završnu toč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 promet, 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
Istjek nije jedna greška. Ime koje se ne razrješava pada prije nego paket napusti stroj. Adresa bez rute šalje pakete u crnu rupu. Filtriran port stvara čekanje koje izgleda toč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, usporedite adresu koju ste razriješili s adresom koju baza podataka prijavljuje. Upravljana završna toč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 pada li adresa baze podataka u neki od njih.
ip route get 10.20.40.15
ip addr show tun0
Ruta koja pokazuje na sučelje tunela nužna je; nije dovoljna, jer suprotna strana još mora prihvatiti promet.
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 točno onaj istjek koji bi proizveo vatrozid.
Uskladite sigurnosnu grupu sa stvarnim izvorom
RDS sigurnosna grupa propušta izvore, ne ljude. Ovisno o arhitekturi, izvor može biti VPN klijentski pool, privatna adresa bastiona ili NAT adresa na koju se promet 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 problem je održavanja, a ne dizajn pristupa.
Kada je na putu klijentski VPN ili NAT gateway, baza podataka može vidjeti adresu prevoditelja 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 poslužitelja 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 opsegu, ne o sigurnosnom teatru.
Ostavite za sobom put koji se može ponoviti
Dokumentirajte ime završne toč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 nedokumentirana iznimka koja čeka da bude ponovno otkrivena. Zapišite put, i sljedeći programer naslijedit će metodu umjesto misterije.