Lokal databaseklient, privat RDS: hvorfor forbindelsen timer ud
En lokal klient kan ikke nå en privat RDS-instans af tre adskilte grunde. Undersøg opdelt DNS, rute og sikkerhedsgruppebevis, før du ændrer noget.
En udviklers bærbare computer timer ud, når den opretter forbindelse til det private RDS-endpoint, mens de samme logonoplysninger virker fra en bastion-vært. Intet er nede. Vejen mellem den bærbare computer og databasen mangler en af tre ting: et navn, der opløses, en rute, der bærer trafikken, eller en sikkerhedsgrupperegel, der tillader den kilde, databasen faktisk ser. Find ud af, hvilken der mangler, før du ændrer de to andre.
Læs fejlen på det rigtige lag
En timeout er ikke én fejl. Et navn, der ikke opløses, fejler, før en pakke forlader maskinen. En adresse uden rute sender pakker i et sort hul. En filtreret port giver en ventetid, der ser præcis ud som en forkert vært. Kør trinnene i rækkefølge, og stop ved det første, der fejler.
dig +short db.internal.example
nc -vz db.internal.example 5432
Hvis navnet returnerer en offentlig adresse, eller slet intet, er tunnelen endnu ikke problemet.
Hvis navnet opløses, og porttesten hænger, så sammenlign den adresse, du opløste, med den adresse, databasen rapporterer. Et administreret endpoint kan opløses til en privat adresse inde i VPC'en og til intet brugbart uden for den, og en adresse kopieret fra et gammelt opslag vil pege på en vært, der ikke længere svarer.
Adskil tunnelen fra ruten
At forbinde en klient-VPN ruter ikke automatisk alle private områder. Profilen bærer de ruter, tjenesten skubber, og klienten installerer måske kun nogle af dem. Se hvilke områder klienten faktisk tilføjede, og om databaseadressen ligger inden for et af dem.
ip route get 10.20.40.15
ip addr show tun0
En rute, der peger på tunnelgrænsefladen, er nødvendig; den er ikke tilstrækkelig, fordi den fjerne side stadig skal acceptere trafikken.
Profiler med opdelt tunnel er den sædvanlige kilde til denne halve fejl. De virker til det program, profilen blev designet til, og efterlader databaseområdet uden for tunnelen, hvilket giver præcis den timeout, en firewall ville give.
Tilpas sikkerhedsgruppen til den virkelige kilde
RDS-sikkerhedsgruppen tillader kilder, ikke personer. Afhængigt af arkitekturen kan kilden være VPN-klientpuljen, den private adresse på en bastion eller en NAT-adresse, som trafikken oversættes til. Læs reglen og den faktiske pakkekilde sammen.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
En regel for én bærbar computers hjemmeadresse er et vedligeholdelsesproblem snarere end et adgangsdesign.
Når en klient-VPN eller en NAT-gateway sidder på vejen, kan databasen se oversætterens adresse i stedet for udviklerens tunneladresse. Derfor kan en regel kopieret fra et fungerende bastion-opsætning fejle for en bærbar computer: de to veje kommer fra forskellige kilder, selv om begge ser interne ud.
Foretræk en smal vej frem for en bred
Når én udvikler har brug for én database, er sessionsbaseret videresendelse ofte billigere at drive end en fuld netværkstunnel. Den lokale klient forbinder til en videresendt port, og den fjernkomponent opretter databaseforbindelsen inde fra netværket.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
Behold TLS-verifikationen intakt i det design. Klienten bør stadig validere servercertifikatet mod det navn, den forventer; en lokal videresendt port er ikke en grund til at slå verifikation fra, og at slå den fra skjuler præcis det identitetsproblem, der er værd at fange.
Valget mellem en fuld tunnel og en smal videresendelse er en beslutning om omfang, ikke om sikkerhedsteater.
Efterlad en vej, der kan gentages
Dokumentér endpointnavnet i stedet for en opløst adresse, det kildeområde sikkerhedsgruppen tillader, og den databaserolle udvikleren bruger. De tre fakta forklarer de fleste fremtidige fejl uden et opkald. Tilføj også klientprofilens version, fordi en profilændring kan fjerne en rute, som den gamle bar.
Test derefter det negative tilfælde én gang: en klient uden for den godkendte kilde bør stadig afvises.
En privat database, der kun virker for den person, der satte den op, er ikke privat adgang; det er en udokumenteret undtagelse, der venter på at blive genopdaget. Skriv vejen ned, og den næste udvikler arver en metode i stedet for et mysterium.