Преносник једног програмера истиче при повезивању на приватну RDS завршну тачку, док исти акредитиви раде са bastion хоста. Ништа није пало. Путу између тог преносника и базе података недостаје једна од три ствари: име које се разрешава, рута која носи саобраћај, или правило сигурносне групе које пропушта извор који база података заиста види. Откријте која недостаје пре него што промените друге две.

Читајте неуспех на правом слоју

Истек није једна грешка. Име које се не разрешава пада пре него што пакет напусти машину. Адреса без руте шаље пакете у црну рупу. Филтриран порт ствара чекање које изгледа тачно као погрешан хост. Изведите кораке по реду и зауставите се на првом који падне.

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

Ако име врати јавну адресу или не врати ништа, тунел још није проблем.

Ако се име разрешава, а тест порта виси, упоредите адресу коју сте разрешили са адресом коју база података пријављује. Управљана завршна тачка може да се разреши на приватну адресу унутар VPC-а и на ништа корисно изван њега, а адреса копирана са старог претраживања показаће на хост који више не одговара.

Одвојите тунел од руте

Повезивање клијентског VPN-а не усмерава аутоматски сваки приватни распон. Профил носи руте које сервис гура, а клијент може да инсталира само неке од њих. Погледајте које је распоне клијент заиста додао и да ли адреса базе података пада у неки од њих.

ip route get 10.20.40.15
ip addr show tun0

Рута која показује на интерфејс тунела је неопходна; није довољна, јер супротна страна још мора да прихвати саобраћај.

Профили подељеног тунела су уобичајени извор овог половичног неуспеха. Раде за апликацију за коју је профил направљен и остављају распон базе података изван тунела, што производи тачно онај истек који би произвео заштитни зид.

Ускладите сигурносну групу са стварним извором

RDS сигурносна група пропушта изворе, не људе. Зависно од архитектуре, извор може бити VPN клијентски пул, приватна адреса bastion хоста или NAT адреса на коју се саобраћај преводи. Читајте правило и стварни извор пакета заједно.

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

Правило за кућну адресу једног преносника је проблем одржавања, а не дизајн приступа.

Када је на путу клијентски VPN или NAT гејтвеј, база података може да види адресу преводиоца уместо адресе тунела програмера. Зато правило копирано са радне bastion поставке може да падне за преносник: два пута долазе са различитих извора иако оба изгледају интерно.

Дајте предност уској путањи пред широком

Када једном програмеру треба једна база података, прослеђивање засновано на сесији је често јефтиније за рад од пуног мрежног тунела. Локални клијент се повезује на прослеђени порт, а удаљена компонента успоставља везу са базом из унутрашњости мреже.

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

Задржите TLS проверу нетакнутом у том дизајну. Клијент и даље треба да провери сертификат сервера према имену које очекује; локални прослеђени порт није разлог да искључите проверу, а њено искључивање крије управо проблем идентитета који вреди ухватити.

Избор између пуног тунела и уског прослеђивања је одлука о обиму, не о сигурносном театру.

Оставите за собом пут који може да се понови

Документујте име завршне тачке уместо разрешене адресе, распон извора који сигурносна група пропушта и улогу базе података коју програмер користи. Те три чињенице објашњавају већину будућих неуспеха без позива. Додајте и верзију клијентског профила, јер промена профила може да уклони руту коју је стари носио.

Затим једном тестирајте негативан случај: клијент изван одобреног извора и даље мора бити одбијен.

Приватна база података која ради само за особу која ју је поставила није приватан приступ; то је недокументовани изузетак који чека да буде поново откривен. Запишите пут, и следећи програмер ће наследити метод уместо загонетке.

Повезани чланци