Spletna kuka GitHuba ne doseže zasebnega Jenkinsa: popravite pot
Seja VPN na prenosniku ne da GitHubu poti do Jenkinsa. Primerjajte vhodno točko, posrednik in anketiranje, nato preizkusite pot, po kateri gredo dogodki.
Jenkins lahko odprete prek VPN in vseeno vidite, da GitHub poroča o neuspešni spletni kuki, ker gre za dve različni povezavi z dvema različnima lastnikoma. Brskalnik se pelje po tunelu, ki ga je izpogajal vaš prenosnik; storitev dostave GitHuba se začne v javnem internetu in nima poti v zasebno omrežje. Dostop do repozitorija tega ne spremeni, čeprav lahko sam Jenkins brez težav črpa iz istega repozitorija. Izberite vhodno točko, posrednik ali anketiranje, nato preizkusite pot, po kateri dogodek v resnici gre.
Seja brskalnika dokaže le eno smer
Povezava VPN odgovori na eno vprašanje: ali lahko ta prenosnik doseže notranjega gostitelja. Dostava spletnih kuk se sprašuje o drugem: ali lahko zunanja storitev odpre povezavo do tega gostitelja. To, da Jenkins črpa iz repozitorija, je odhodni promet in ne pove ničesar o dohodni dosegljivosti. Obe smeri držite na ločenih vrsticah diagrama, vključno s tem, katera stran vsako začne.
Preden kar koli spremenite, preberite zapis o dostavi. Potek časa, ponastavitev povezave in sprejeta zahteva, ki se ni ujemala z nobenim opravilom, imajo tri različne lastnike: omrežje, posrednik in konfiguracijo sprožilca.
Možnost A: izpostavite ozko vhodno točko
Če organizacija že objavlja odobren vhod, izpostavite pot spletne kuke namesto nadzorne plošče. To običajno pomeni pravilo obratnega posrednika, ki sprejema POST na URL kavlja in jih posreduje v Jenkins, medtem ko upravljalni vmesnik ostane nedosegljiv od zunaj.
curl -sS -o /dev/null -w "%{http_code}\n" -X POST https://jenkins.example.com/github-webhook/Ta preizkus izvedite iz omrežja brez dostopa do VPN, ker uspeh iz notranjosti tunela ne dokaže ničesar. Vhodna točka bi morala zavrniti zahteve brez skupne skrivnosti, ki jo GitHub pošlje kot glavo podpisa, in sprejeti le tisto eno pot in metodo, ki ste ju objavili. Javna konzola Jenkinsa ni popravek spletne kuke; je incident, ki čaka na naslednji skener. Pravilo omejite dovolj tesno, da preostali del aplikacije obdrži prejšnje nadzore dostopa.
Možnost B: obrnite smer s posrednikom
Kjer vhodna izpostavitev ne bo odobrena, lahko majhen odjemalec v omrežju vzdržuje odhodno povezavo do posrednika in prejema posredovane dogodke. Posrednik takrat postane del dostavne poti, zato sta njegova razpoložljivost in overjanje enako pomembna kot opravilo gradnje.
ssh -N -R 9000:localhost:8080 relay.example.netJenkinsove smernice o spletnih kukah za požarnimi zidovi opisujejo to obliko in vredno jih je prebrati, preden napišete svoj posredovalnik. Zaključite TLS na posredniku, preverite podpis, preden dogodek doseže opravilo, in spremljajte odhodno povezavo, ker je padel tunel videti natanko kot dogodek, ki ni bil nikoli poslan. Potrdite tudi, da posrednik ohrani telo zahteve bajt za bajtom, saj preverjanja podpisa spodletijo pri JSON, ki je bil na poti razčlenjen in znova kodiran.
Možnost C: raje anketirajte repozitorij
Anketiranje zamenja zakasnitev za preprostost in sploh ne potrebuje vhodne poti. Jenkins lahko anketira po urniku, ali majhno opravilo lahko vpraša API in začne gradnjo, ko vidi neznano revizijo.
curl -sS -u "$USER:$TOKEN" "https://api.github.com/repos/OWNER/REPO/commits?per_page=1"Vsako anketiranje porabi klice API in doda zamik med push in gradnjo, kar postane vidno v zasedenih repozitorijih in pri skupnih omejitvah hitrosti. Potrebuje tudi poverilnice, shranjene tam, kjer teče anketar, zato omejite žeton na dostop do repozitorija samo za branje in ga menjajte kot vsako drugo skrivnost. Izberite to, ko je obseg dogodkov nizek ali ko vhodna točka ne bo nikoli odobrena, in to povejte v opisu opravila, da se kasneje nihče ne sprašuje, zakaj gradnje zaostajajo.
Sprejmite resnično dostavo, ne nalaganja strani
Katero koli možnost ste izbrali, sprejemni preizkus je dogodek, ki ga pošlje izvorna platforma, ne zavihek brskalnika, odprt s privilegiranega prenosnika. Potisnite prazen commit v delovno vejo in preberite kodo odgovora dostave, dnevnik posrednika ali izhod anketnega opravila, v tem vrstnem redu. 200 z vhodne točke brez gradnje pomeni, da je filter sprožilca napačen; potek časa pomeni, da je pot še vedno zaprta. Zabeležite, kateri od treh načrtov se uporablja, sicer bo naslednja oseba, ki bo razhroščevala, ponovila preizkus v brskalniku in prišla v isto slepo ulico.
Enako logiko uporabite pri povratnih klicih plačil in drugih zunanjih obvestilih: vsako potrebuje svojo pot v zasebno aplikacijo, tudi ko ima vsak človek že sejo VPN. Dostavna pot spada v zasnovo aplikacije, ne v opombo o omrežjih.