Die ontwikkelaar se skootrekenaar bereik die private RDS-instansie deur die personeel-VPN, en die toepassing op EC2 kan glad nie verbind nie. Dit is nie 'n stukkende ontplooiing nie. Die skootrekenaar het 'n tonnel wat die EC2-instansie nooit erf nie, en "private" in RDS beteken die databasis het geen publieke eindpunt nie, nie dat menslike VPN-gebruikers die enigste toegelate oproepers is nie. Die toepassing benodig sy eie gemagtigde pad, sy eie sekuriteitsgroep-verhouding en sy eie databasis-identiteit, en die volgorde waarin jy daardie drie kies, spaar die meeste foutsporing. Besluit eers oor die roete, dan die toestemmings, en verifieer dan vanuit die ontplooide omgewing eerder as vanaf jou lessenaar.

Die skootrekenaar-VPN is nie die toepassing se pad nie

Wat die personeel-VPN ook al vir mense doen, dit doen niks vir 'n instansie nie, tensy daardie instansie uitdruklik deel is van dieselfde netwerkpad. 'n EC2-instansie in 'n private subnet bereik RDS deur VPC-roetering, sekuriteitsgroepe en netwerk-ACL's. Dit erf nie 'n mens se tonnel, 'n mens se sessie of 'n mens se geloofsbriewe nie, en dit behoort ook nie: onbewaakte toepassingskonnektiwiteit en personeel se afstandtoegang moet onafhanklik werkbaar wees.

Daardie onafhanklikheid is 'n kenmerk. Wanneer die VPN af is, bly die toepassing werk. Wanneer die toepassing verkeerd optree, verloor niemand hul afstandtoegang nie. Ontwerpe wat die twee in een pad saamvat, word gewoonlik tydens 'n voorval ontdek, op die slegste moontlike oomblik.

Besluit 1: dieselfde VPC, direkte pad

Wanneer die toepassing en die databasis in dieselfde VPC is met direkte roetering en geen inspeksie-middelbok tussen hulle nie, is die pad eenvoudig en die sekuriteitsgroep-verwysing die sterkste instrument beskikbaar. Gee die toepassing sy eie groep en laat dan die databasispoort vanaf daardie groep toe eerder as vanaf 'n adresreeks:

aws ec2 authorize-security-group-ingress --group-id sg-0db123   --protocol tcp --port 5432 --source-group sg-0app456

aws rds describe-db-instances --db-instance-identifier prod-db   --query 'DBInstances[0].{Endpoint:Endpoint.Address,Port:Endpoint.Port,Public:PubliclyAccessible,Groups:VpcSecurityGroups}'

Die poort is illustratief en moet by die enjin pas. 'n Groepverwysing magtig verkeer vanaf die toepassing se instansies; dit kopieer nie hul reëls nie en dit skep nie 'n databasis-aanmelding nie. Twee afsonderlike probleme, twee afsonderlike oplossings.

Kyk dan na die res van die pad eerder as om by die reël wat jy pas bygevoeg het te stop. Die toepassing se uitgaande beleid, die databasis se volledige stel aangehegte groepe, die subnet-roetetabelle en enige netwerk-ACL's moet almal saamstem. Sekuriteitsgroep-reëls is toestandbehoudend, terwyl 'n pasgemaakte netwerk-ACL die versoek en die terugkeerverkeer in afsonderlike reëls moet toelaat, insluitend efemere poorte. 'n Smal nuwe databasisreël kanselleer ook nie 'n ouer breë toelating wat reeds aangeheg is nie.

Besluit 2: ander VPC of 'n ander rekening

As die toepassing in 'n ander VPC is, kies die netwerkeienaars 'n ondersteunde private interkoneksie: peering, 'n transit-ontwerp of 'n gedeelde VPC-reëling. Dan moet beide rigtings van roetering bestaan, naamoplossing moet vir die RDS-eindpunt werk, en die bron wat die databasisbeleid evalueer, moet ooreenstem met wat werklik aankom. Ooreenstemmende rekeningname of 'n gedeelde faktureringsverhouding verskaf niks daarvan nie.

Sekuriteitsgroep-verwysing is die deel wat wissel. Dit werk in verskeie private interkoneksie-ontwerpe, maar dit hou op werk die oomblik wanneer 'n middelbok die bron herskryf of die verbinding beëindig, want die databasis sien dan die middelbok eerder as jou toepassingsgroep. Die RDS VPC-scenario's skei toegang binne dieselfde VPC van die ander reëlings, en dit is die moeite werd om jou spesifieke topologie daarteen te kontroleer voordat jy aanneem dat 'n reëlstyl oorgedra word.

Moenie 'n ontbrekende roete oplos deur die databasis publiek toeganklik te maak nie. Dit is 'n ander blootstellingsbesluit met 'n ander eienaar, en dit word gewoonlik voorgestel deur wie die verste van die gevolge af is.

Besluit 3: watter identiteit die databasis aanvaar

Netwerktoegang en databasis-verifikasie is afsonderlike lae, en om hulle te verwar, lewer die mees misleidende foute. Die instansierol is 'n AWS-identiteit om AWS-API's te roep. Dit is nie 'n databasisgebruiker nie. IAM-databasisverifikasie is 'n ondersteunde kenmerk waar die enjin en konfigurasie dit toelaat, en dit is steeds 'n koppeling na 'n databasisgebruiker eerder as 'n vervanging daarvan.

Gebruik die RDS-eindpuntnaam in die toepassing se konfigurasie eerder as 'n adres wat uit een opsoek geneem is. Multi-AZ-oorskakeling verander die adres agter daardie naam, en 'n toepassing wat aan 'n IP vasgepen is, sal misluk presies op die oomblik wanneer dit nodig is. Hou die enjin se TLS-verifikasie geaktiveer eerder as om dit te deaktiveer om 'n fout te laat verdwyn, want 'n verifikasiefout sê iets vir jou oor die eindpunt wat jy bereik het.

Gee dan die databasisrekening die minimum wat die toepassing nodig het, in die skema wat dit werklik gebruik. Daardie werk is vervelig, dit is ouditeerbaar, en dit is die deel waarna 'n voorvalondersoek sal vra.

Verifieer vanuit die ontplooide omgewing

Toets vanaf die instansie of vanaf 'n taak wat met dieselfde groep, subnet en rol hardloop. Vier mislukkings lyk soortgelyk vanaf 'n skootrekenaar en is maklik onderskeibaar daarvandaan: 'n naam wat nie opgelos word nie, 'n verbinding wat uitput, 'n TLS-validasie-mislukking en 'n verwerpte databasis-aanmelding. Elkeen wys na 'n ander grens, en om die databasis se blootstelling te verander voordat jy weet watter een jy het, is raaiwerk.

psql "host=prod-db.abc123.eu-west-1.rds.amazonaws.com port=5432 dbname=app sslmode=verify-full" -c 'select 1'

As die verbinding van die instansie af slaag en van jou lessenaar af misluk, is die toepassing se pad reg en is jou toegang die ding om reg te maak. As dit van beide misluk, begin met die groep- en roete-kontroles hierbo eerder as met die geloofsbriewe. Daardie enkele vergelyking voorkom die meeste van die onnodige werk wat hierdie kaartjies veroorsaak.

Verwante artikels