Lokal databasklient och privat RDS: varför anslutningen tar timeout
En lokal klient når inte en privat RDS-instans av tre separata skäl. Kontrollera delad DNS, rutten och bevisen från säkerhetsgruppen innan du ändrar något.
En utvecklares bärbara dator tar timeout när den ansluter till den privata RDS-slutpunkten, medan samma inloggningsuppgifter fungerar från en bastion-värd. Ingenting är nere. Vägen mellan den bärbara datorn och databasen saknar en av tre saker: ett namn som löses upp, en rutt som bär trafiken, eller en regel i en säkerhetsgrupp som släpper in den källa databasen faktiskt ser. Ta reda på vilken som saknas innan du ändrar de andra två.
Läs felet på rätt lager
En timeout är inte ett enda fel. Ett namn som inte löses upp misslyckas innan ett paket lämnar maskinen. En adress utan rutt skickar paket i ett svart hål. En filtrerad port ger en väntan som ser exakt ut som en felaktig värd. Kör stegen i ordning och stanna vid det första som misslyckas.
dig +short db.internal.example
nc -vz db.internal.example 5432
Om namnet returnerar en offentlig adress, eller ingenting, är tunneln ännu inte problemet.
Om namnet löses upp och porttestet hänger sig, jämför adressen du löste upp med adressen databasen rapporterar. En hanterad slutpunkt kan lösas upp till en privat adress inne i VPC:n och till ingenting användbart utanför den, och en adress kopierad från en gammal uppslagning pekar på en värd som inte längre svarar.
Skilj tunneln från rutten
Att ansluta en klient-VPN routar inte automatiskt varje privat intervall. Profilen bär de rutter tjänsten skjuter ut, och klienten installerar kanske bara några av dem. Titta på vilka intervall klienten faktiskt lade till och om databasens adress faller inom ett av dem.
ip route get 10.20.40.15
ip addr show tun0
En rutt som pekar mot tunnelgränssnittet är nödvändig; den är inte tillräcklig, eftersom andra sidan fortfarande måste acceptera trafiken.
Profiler med delad tunnel är den vanliga källan till detta halva fel. De fungerar för programmet profilen designades för och lämnar databasens intervall utanför tunneln, vilket ger exakt den timeout en brandvägg skulle ge.
Anpassa säkerhetsgruppen till den verkliga källan
RDS-säkerhetsgruppen släpper in källor, inte människor. Beroende på arkitekturen kan källan vara VPN-klientpoolen, den privata adressen för en bastion eller en NAT-adress som trafiken översätts till. Läs regeln och paketets faktiska källa tillsammans.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
En regel för en enda bärbar dators hemadress är ett underhållsproblem snarare än en åtkomstddesign.
När en klient-VPN eller en NAT-gateway sitter i vägen, kan databasen se översättarens adress i stället för utvecklarens tunneladress. Därför kan en regel kopierad från en fungerande bastion-uppsättning misslyckas för en bärbar dator: de två vägarna kommer från olika källor även om båda ser interna ut.
Föredra en smal väg framför en bred
När en utvecklare behöver en databas är sessionsbaserad vidarebefordran ofta billigare att driva än en full nätverkstunnel. Den lokala klienten ansluter till en vidarebefordrad port, och fjärrkomponenten upprättar databasanslutningen inifrån nätverket.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
Behåll TLS-verifieringen intakt i den designen. Klienten bör fortfarande validera servercertifikatet mot namnet den förväntar sig; en lokal vidarebefordrad port är inte ett skäl att stänga av verifieringen, och att stänga av den döljer exakt identitetsproblemet som är värt att fånga.
Valet mellan en full tunnel och en smal vidarebefordran är ett beslut om omfattning, inte om säkerhetsteater.
Lämna en väg som kan upprepas
Dokumentera slutpunktens namn i stället för en upplöst adress, källintervallet som säkerhetsgruppen släpper in och den databasroll utvecklaren använder. Dessa tre fakta förklarar de flesta framtida fel utan ett samtal. Lägg också till versionen av klientprofilen, eftersom en profiländring kan ta bort en rutt som den gamla bar.
Testa sedan det negativa fallet en gång: en klient utanför den godkända källan bör fortfarande avvisas.
En privat databas som bara fungerar för personen som satte upp den är inte privat åtkomst; det är ett odokumenterat undantag som väntar på att upptäckas igen. Skriv ner vägen, och nästa utvecklare ärver en metod i stället för ett mysterium.