Viss darbojas, līdz būvēšanas izpildītājam vajag to pašu resursdatora ligzdu, ko izmanto VPN viesis, un tad neviens nevar izskaidrot, kāpēc darbs var nolasīt vārtejas atslēgas. Viss tika instalēts vienā mašīnā, jo tas ietilpa, un katram viesim tika dota plaša piekļuve, jo tas bija ātrākais veids, kā to likt darboties. Rezultāts ir resursdators, kura uzticības robeža ir barošanas kabelis. Lomu atdalīšana prasa mazāk darba, nekā izklausās, un tā sākas ar to nosaukšanu.

Trīs lomas, kas pašlaik dala visu

VPN ieeja, privātu pakalpojumu kopums un būvēšanas izpildītājs grib dažādas lietas. Pirmajam vajadzīgs publisks ports un šaurs tīkls privātajā pusē. Otrajam vajadzīga pastāvīga krātuve un lietojumprogrammas noslēpumi. Trešais izpilda kodu, ko uzrakstījis kāds cits.

Tieši tas, ka visi trīs iegūst vienu un to pašu piekļuvi, padara simptomu mulsinošu, jo tad jebkurš no tiem var ietekmēt pārējos. Būvēšanas darbs, kas spēj sasniegt hipervizora ligzdu, ir darbs, kas spēj apturēt VPN. Pakalpojumu viesis ar maršrutu uz pārvaldības tīklu var mainīt komutatora konfigurāciju. Tiesības ir problēma, un procesu saraksts ir tikai vieta, kur tas parādās. Lomu nosaukšana vispirms dod katrai tiesībai vietu, kur dzīvot.

Zemāk esošā skice ir šīs sadalīšanas sākumpunkts, nevis augstas pieejamības solījums. Uzskatiet to par verificējamu hipotēzi, nevis gatavu dizainu.

Atdaliet trīs lomas, nevis trīs procesus

Trīs viesi vienā resursdatorā dod trīs tiesību kopas un trīs tīkla pozīcijas. Tie nedod trīs kļūdu domes, un dizainam tas jāsaka skaļi.

Atdalīšana palīdz tikai tad, ja viena viesa kompromitēšana automātiski nepiešķir tiesības pārējiem, un tas ir hipervizora iestatījums, nevis nosaukumu konvencija. VM nosaukšana par vārteju neliedz citam viesim sasniegt resursdatoru. Lasiet virtuālā komutatora konfigurāciju, nevis resursdatora nosaukumu, pēc tam pārliecinieties, ka katrs viesis atrodas tur, kur jūs domājat.

host
├─ vpn-gw      10.60.10.2/24   public 51820/udp only
├─ services    10.60.0.10/24   no route to the management network
└─ ci-runner   10.60.20.2/24   outbound only, no host socket

Pierakstiet topoloģiju un pēc tam pārbaudiet to ar rīkiem, kuriem tā pieder. Viesis, kas parādās nepareizajā tiltā, ir atradums, nevis sīkums. Izlabojiet tīklu pirms jebkuras pakalpojuma konfigurācijas maiņas.

Ļaujiet VPN viesim atvērt tikai tās durvis, kas tam pieder

Publicējiet tuneļa portu maršrutētājā un neko citu. Viesu pārvaldības porti pieder pārvaldības ceļam, nevis internetam, un arī paša hipervizora saskarne pieder tur.

Privātās puses tīklam jāsasniedz pakalpojumi, kas nepieciešami attāliem lietotājiem, un tur jāapstājas. Lietojumprogrammas autentifikācija paliek ieslēgta, jo tunelis ir transports, nevis pieteikšanās. Turiet VPN viesa maršrutēšanas tabulu pietiekami mazu, lai to aprakstītu vienā teikumā. Ja nevarat to aprakstīt tik vienkārši, robeža jau ir izplūdusi.

virsh net-list --all
virsh net-dumpxml lab-private
sudo nft list ruleset | grep -n -E '51820|10.60'

Visam, kas resursdatorā klausās un nav vajadzīgs pārvaldībai, nevajadzētu klausīties vispār. Tas ietver hipervizora API, ko ir viegli atstāt atvērtu publiskā saskarnē.

Būvēšanas darbiem vajadzīga cita veida robeža

CI darbs izpilda komandas, ko kontrolē repozitorijs, tāpēc tā uzticība ir atkarīga no tā, kas var nosūtīt kodu. Čaulas izpildītājs šīs komandas izpilda kā izpildītāja lietotājs resursdatorā, un tā ir plašākā pieejamā robeža.

Konteinera izpildītāji ir šaurāki, un priviliģēts konteiners nav viens no šaurajiem. Turiet izpildītāju savā viesī ar savu tīkla apjomu un dodiet tam tikai to artefaktu un izvietošanas piekļuvi, kas darbiem vajadzīga. Vienreizējie darbinieki samazina saglabāto stāvokli; tie nesamazina sasniedzamību vai noslēpumu atklāšanu. Abiem joprojām vajadzīgi skaidri ierobežojumi.

Pakalpojumu viesis pārvalda datus, tāpēc tā dublēšanas plāns ir tas, kam jādarbojas. Turiet repozitorijus, augšupielādes un datubāzi vienā grafikā. Pārbaudiet atjaunošanu, nevis lasiet darba statusu.

Plānojiet kļūdu, ko visi trīs dala

Viens resursdators ir viena kļūdu dome. Pārstartēšana vienā mirklī noņem tuneli un katru privāto pakalpojumu, un tieši tad ceļš iekšā ir vissvarīgākais.

Saglabājiet konsoles piekļuvi, kas nav atkarīga no VPN viesa, vai tā būtu fiziska konsole, ārpusjoslas pārvaldības saskarne vai pakalpojumu sniedzēja konsole. Momentuzņēmums, kas glabājas tajā pašā diskā, nav neatkarīga kopija, un arī dublējums, kas darbojas tā viesa iekšienē, kuru tas aizsargā, nav. Pēc tam pārbaudiet auksto startu kā secību, nevis kā kontrolsarakstu: resursdators, virtuālie tīkli, tuneļa ceļš un viena nosaukta lietojumprogramma parastā kontā.

virsh list --all
systemctl is-active libvirtd
curl -sS -m 5 -o /dev/null -w '%{http_code}\n' https://10.60.0.10/
ss -ltnp | grep -E ':51820|:443'

Procesu palaišanas secība neko nepierāda par maršrutiem un DNS, tāpēc pārbaudiet ceļu, nevis vienību stāvokļus. Ceļš ir tas, kas attālam lietotājam patiešām vajadzīgs.

Saistītie raksti