De laptop van een ontwikkelaar loopt een time-out op bij het verbinden met het privé-RDS-eindpunt, terwijl dezelfde inloggegevens vanaf een bastion-host werken. Niets ligt eruit. Het pad tussen die laptop en de database mist een van drie dingen: een naam die resolvet, een route die het verkeer draagt, of een regel in een beveiligingsgroep die de bron toestaat die de database werkelijk ziet. Zoek uit welke ontbreekt voordat u de andere twee wijzigt.

Lees de fout op de juiste laag

Een time-out is niet één fout. Een naam die niet resolvet, faalt voordat een pakket de machine verlaat. Een adres zonder route stuurt pakketten naar een zwart gat. Een gefilterde poort levert een wachttijd op die er precies als een verkeerde host uitziet. Voer de stappen in volgorde uit en stop bij de eerste die faalt.

dig +short db.internal.example
nc -vz db.internal.example 5432

Als de naam een openbaar adres teruggeeft, of niets, is de tunnel nog niet het probleem.

Als de naam resolvet en de poorttest blijft hangen, vergelijk dan het adres dat u heeft geresolved met het adres dat de database rapporteert. Een beheerd eindpunt kan resolven naar een privéadres binnen de VPC en naar niets bruikbaars erbuiten, en een adres dat uit een oude opzoeking is gekopieerd, wijst naar een host die niet meer antwoordt.

Scheid de tunnel van de route

Een client-VPN verbinden routeert niet automatisch elk privébereik. Het profiel draagt de routes die de dienst pusht, en de client installeert er misschien maar enkele. Kijk welke bereiken de client werkelijk heeft toegevoegd en of het databaseadres binnen een daarvan valt.

ip route get 10.20.40.15
ip addr show tun0

Een route die naar de tunnelinterface wijst is noodzakelijk; zij is niet voldoende, omdat de andere kant het verkeer nog steeds moet accepteren.

Split-tunnelprofielen zijn de gebruikelijke bron van deze halve fout. Ze werken voor de toepassing waarvoor het profiel is ontworpen en laten het databasebereik buiten de tunnel, wat precies de time-out oplevert die een firewall zou opleveren.

Pas de beveiligingsgroep aan op de echte bron

De RDS-beveiligingsgroep staat bronnen toe, geen mensen. Afhankelijk van de architectuur kan de bron de VPN-clientpool zijn, het privéadres van een bastion of een NAT-adres waar het verkeer naar wordt vertaald. Lees de regel en de werkelijke pakketbron samen.

aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
  --query 'SecurityGroups[].IpPermissions'

Een regel voor het thuisadres van één laptop is een onderhoudsprobleem in plaats van een toegangsontwerp.

Wanneer een client-VPN of een NAT-gateway in het pad zit, kan de database het adres van de vertaler zien in plaats van het tunneladres van de ontwikkelaar. Daarom kan een regel die uit een werkende bastion-opstelling is gekopieerd voor een laptop falen: de twee paden komen uit verschillende bronnen, ook al lijken beide intern.

Geef de voorkeur aan een smal pad boven een breed

Wanneer één ontwikkelaar één database nodig heeft, is sessiegebaseerde doorsturing vaak goedkoper te beheren dan een volledige netwerktunnel. De lokale client verbindt met een doorgestuurde poort, en de externe component maakt de databaseverbinding van binnenuit het netwerk.

ssh -N -L 5432:db.internal.example:5432 bastion.internal.example

Houd TLS-verificatie intact in dat ontwerp. De client moet nog steeds het servercertificaat valideren tegen de naam die hij verwacht; een lokaal doorgestuurde poort is geen reden om verificatie uit te schakelen, en dat uitschakelen verbergt precies het identiteitsprobleem dat het waard is om te vangen.

De keuze tussen een volledige tunnel en een smalle doorsturing is een beslissing over reikwijdte, niet over beveiligingstheater.

Laat een herhaalbaar pad achter

Documenteer de eindpuntnaam in plaats van een geresolved adres, het bronbereik dat de beveiligingsgroep toestaat, en de databaserol die de ontwikkelaar gebruikt. Die drie feiten verklaren de meeste toekomstige fouten zonder telefoontje. Voeg ook de versie van het clientprofiel toe, want een profielwijziging kan een route verwijderen die het oude droeg.

Test daarna één keer het negatieve geval: een client buiten de goedgekeurde bron moet nog steeds worden geweigerd.

Een privédatabase die alleen werkt voor de persoon die hem heeft ingesteld, is geen privétoegang; het is een ongedocumenteerde uitzondering die wacht om opnieuw ontdekt te worden. Schrijf het pad op, en de volgende ontwikkelaar erft een methode in plaats van een raadsel.

Gerelateerde artikelen