2.18 Rheoli dibyniaethau a chadwyn gyflenwi
Trosolwg a chymhelliant
Agorwch ffeil gloi (lockfile) eich prosiect a chyfrifwch y pecynnau. Os ydych chi fel y rhan fwyaf o dimau, mae’r cod a ysgrifennoch chi yn haenen denau ar ben cannoedd neu filoedd o ddibyniaethau na wnaethoch eu hysgrifennu, nad ydych yn eu deall yn llawn, ac na allwch eu harchwilio’n hawdd. Mae gwasanaeth gwe modern yn tynnu i mewn fframwaith, gyrrwr cronfa ddata, llyfrgell cofnodi (logging), a fformat cyfresoli, ac mae pob un o’r rheiny’n tynnu i mewn ragor eto. Y canlyniad yw bod y rhan fwyaf o’ch meddalwedd sy’n rhedeg, yn aml y mwyafrif helaeth ohono, wedi dod gan ddieithriaid ar y rhyngrwyd. Nid methiant yw hynny. Dyma’r fargen sy’n galluogi tîm bach i ryddhau mewn wythnosau’r hyn a gymerai flynyddoedd gynt. Y pwynt yw derbyn y fargen â’ch llygaid yn agored.
Mae rheoli’r cod benthyg hwnnw’n dda yn ddisgyblaeth beirianneg ynddi’i hun, ac mae’r bennod hon yn ymwneud â chrefft hynny: sut rydych chi’n dewis dibyniaethau, yn eu pinio, yn eu diweddaru, yn atgynhyrchu eich adeileddau (builds), ac yn cadw’r graff cyfan yn ddarllenadwy wrth iddo dyfu. Mae ochr y bygythiad diogelwch, lle mae ymosodwr yn gwenwyno’r graff hwnnw’n fwriadol, yn cael sylw llawn ym mhennod 4.2 ar ddiogelwch cymwysiadau. Yma, y pryder yw’r beirianneg feunyddiol: cyfyngiadau fersiwn, ffeiliau cloi, gwrthdrawiadau trosiannol (transitive), cyflymder diweddaru, a gwybod beth sydd yn eich meddalwedd. Cywirwch hyn a bydd diogelwch yn dod yn llawer haws, oherwydd ni allwch amddiffyn cadwyn gyflenwi na allwch ei gweld.
I dimau mawr, ac yn enwedig i fentrau mawr a llywodraethau, mae’r risg yn cynyddu gyda graddfa. Pan fydd pum cant o ystorfeydd (repositories) yn dewis eu llyfrgelloedd eu hunain, cewch bum cant o fersiynau ychydig yn wahanol o’r un fframwaith cofnodi, trwydded na chymeradwyodd neb hi, a dim ffordd o ateb “ydyn ni’n cael ein heffeithio?” pan fydd gwendid difrifol yn dod i’r amlwg. Mae mentrau mawr yn ateb hyn drwy lyfrgelloedd cymeradwy a chofrestrfeydd rhannu. Mae llywodraethau’n fwyfwy’n ateb hyn drwy fandadau: gwthiodd Gorchymyn Gweithredol 14028 Unol Daleithiau America restr o gydrannau meddalwedd (SBOM) a tharddiad adeiladu (build provenance) i mewn i’r llinell sylfaen ar gyfer meddalwedd y maen nhw’n ei phrynu. Y sefydliadau sy’n aros yn dawel yn ystod yr argyfwng dibyniaeth nesaf yw’r rhai a wnaeth y gwaith hwn cyn iddyn nhw ei angen.
Egwyddorion allweddol
- Mae’r rhan fwyaf o’ch meddalwedd yn god na wnaethoch ei ysgrifennu; ymgymerwch â’r cyfrifoldeb er na wnaethoch ei ysgrifennu.
- Mae pob dibyniaeth yn atebolrwydd parhaol yn ogystal ag ased; ychwanegwch nhw’n fwriadol, nid yn reddfol.
- Piniwch fersiynau â ffeiliau cloi fel bo adeiladau’n atgynhyrchadwy ac yn benderfynol, nid yn “beth bynnag oedd ddiweddaraf y diwrnod hwnnw.”
- Diweddarwch ar gyflymder cyson, mewn camau bach awtomataidd, yn hytrach na neidiau prin ac arswydus.
- Gwybyddwch yn union beth sydd yn eich meddalwedd; ni allwch ddiogelu na thrwyddedu’r hyn na allwch ei restru.
- Ffafriwch lai o ddibyniaethau sy’n cael eu cynnal yn dda dros lawer o rai cyfleus.
- Rheolwch o ble mae pecynnau’n dod; mae cofrestrfa heb ei gwirio yn ddrws agored.
Argymhellion
Deall fersiynu a’i gyfyngu’n fwriadol
Dysgwch sut mae eich ecosystem yn mynegi fersiynau, oherwydd mae eich ymddygiad diweddaru’n dibynnu’n llwyr arno. Mae’r rhan fwyaf o reolwyr pecynnau’n defnyddio rhyw ffurf o fersiynu semantig (SemVer), lle mae fersiwn yn darllen fel MAJOR.MINOR.PATCH: mae cynnydd patsh yn addo trwsiadau namau yn unig, mae cynnydd bach (minor) yn ychwanegu nodweddion sy’n gydnaws yn ôl-weithredol, ac mae cynnydd mawr (major) yn arwyddo newidiadau sy’n torri pethau. Yna mae eich datganiadau dibyniaeth yn gosod cyfyngiad, megis “cydnaws â 4.x” neu “o leiaf 2.3.0,” sy’n dweud wrth y datryswr (resolver) pa mor bell y caiff grwydro wrth ddewis fersiynau.
Byddwch yn fwriadol ynghylch pa mor llac neu dynn yw’r cyfyngiadau hynny. Mae ystodau llac yn casglu trwsiadau’n awtomatig, ar draul gadael i ryddhad bach na wnaethoch chi erioed ei adolygu lithro i mewn i gynhyrchu; mae pinio tynn yn rhoi rheolaeth ar draul ymdrech â llaw. Yr ateb pragmatig i’r rhan fwyaf o dimau yw datgan ystodau eithaf caniataol yn eich maniffest, yna rewi’r fersiynau union a ddatryswyd mewn ffeil gloi fel na chaiff yr ystod ei hailwerthuso ond pan fyddwch yn diweddaru’n fwriadol. Trinwch SemVer fel addewid y mae cynhalwyr yn ceisio’i gadw, nid gwarant eu bod bob amser yn gwneud hynny; gall rhyddhad “patsh” eich torri o hyd, a dyna’n union pam rydych yn profi diweddariadau yn hytrach na ymddiried ynddynt.
Cyflwynwch ffeiliau cloi a mynnwch adeiladau atgynhyrchadwy
Mae ffeil gloi’n cofnodi’r union fersiwn a’r stwnsh (hash) cryptograffig ar gyfer pob pecyn yn eich graff dibyniaeth, yn uniongyrchol a throsiannol fel ei gilydd. Cyflwynwch hi i reolaeth fersiynau (pennod 2.6) a’i thrin fel rhan flaenaf o’ch ffynhonnell. Ei swyddogaeth yw gwneud eich adeiladwaith yn ffwythiant: mae’r un mewnbynnau’n cynhyrchu’r un allbwn bob tro, ar bob peiriant, eleni a’r flwyddyn nesaf. Hebddi, gall dau beiriannydd sy’n rhedeg “install” wythnos ar wahân gael cod gwahanol, a gall nam sy’n ymddangos mewn cynhyrchu fod yn amhosibl ei atgynhyrchu ar y gliniadur a’i hadeiladodd.
Anelwch at adeiladau atgynhyrchadwy go iawn, lle mae ymrwymiad (commit) penodol bob amser yn cynhyrchu arteffact sydd ag ymddygiad unfath. Mewn integreiddio parhaus (pennod 8.1), gosodwch yn llym o’r ffeil gloi a pheri i’r adeiladwaith fethu os yw’r ffeil gloi a’r maniffest yn anghytuno, yn hytrach na datrys fersiynau newydd yn dawel. Mae’r stwnshiau yn y ffeil gloi’n gwneud dyletswydd ddwbl: maen nhw’n pinio ymddygiad ac yn canfod ymyrryd, oherwydd ni fydd pecyn na fydd ei gynnwys bellach yn cyfateb i’w stwnsh cofnodedig yn gosod. Atgynhyrchadwyedd yw’r sylfaen y mae popeth arall yn y bennod hon yn sefyll arni.
Rheolwch ddibyniaethau trosiannol a gwrthdrawiadau diemwnt yn fwriadol
Dim ond y rhai a enwyd gennych yw eich dibyniaethau uniongyrchol. Oddi tanynt mae graff llawer mwy o ddibyniaethau trosiannol, y pecynnau y mae eich pecynnau chi’n dibynnu arnynt, a dyna lle mae’r rhan fwyaf o’ch risg a’ch syndodau’n byw. Methiant clasurol yw’r ddibyniaeth ddiemwnt: mae llyfrgell A angen fersiwn 1 o gyfleustod a rennir, mae llyfrgell B angen fersiwn 2, ac yn awr rhaid i’r datryswr gysoni cais amhosibl. Mae rhai ecosystemau’n caniatáu i sawl fersiwn gyd-fodoli, gan gyfnewid disg a chof am heddwch; mae eraill yn gorfodi un fersiwn yn unig ac yn eich gadael i drafod y gwrthdrawiad.
Gwnewch y gwrthdrawiadau hyn yn weladwy yn hytrach na gadael iddynt gronni. Defnyddiwch eich offer i argraffu’r goeden ddibyniaeth lawn ac i esbonio pam mae pecyn penodol yn bresennol a phwy a’i tynnodd i mewn. Pan fydd gwrthdrawiad yn ymddangos, ei ddatrys yn fwriadol: uwchraddiwch yr un sy’n llusgo ar ôl, piniwch ddiystyriad (override), neu hepgorwch ddibyniaeth na allwch fodloni ei gofynion. Gwyliwch dwf y graff dros amser, oherwydd mae ymledu diarolwg mewn dibyniaethau trosiannol yn gasgliad araf o ddyled dechnegol sy’n y pen draw yn dod i’r amlwg fel uwchraddiad na ellir ei ddatrys neu wendid na allwch ei glytio heb ailysgrifennu.
Diweddarwch ar gyflymder cyson gyda cheisiadau tynnu awtomataidd
Y strategaeth ddiweddaru fwyaf peryglus yw’r un mae’r rhan fwyaf o dimau’n crwydro iddi ar ddamwain: peidio â diweddaru byth, yna diweddaru popeth ar unwaith dan bwysau argyfwng pan fydd gwendid difrifol yn gorfodi eich llaw. Erbyn hynny, rydych flynyddoedd ar ei hôl hi, mae’r cofnodion newid (changelogs) yn wal, ac mae’r uwchraddio’n brosiect sawl wythnos o hyd yn hytrach na thasg reolaidd. Cyflymder yw’r ateb. Mabwysiadwch ddiweddarwr dibyniaeth awtomataidd (mae’r offer Dependabot a Renovate yn enghreifftiau cyffredin) sy’n agor cais tynnu bob tro y bydd gan ddibyniaeth fersiwn newydd, yn gyflawn â’r cofnod newid a chanlyniadau eich profion ynghlwm.
Yna, tiwniwch y llif fel ei fod yn helpu yn hytrach na’ch boddi. Mae llifeiriant o geisiadau tynnu unigol bob bore’n hyfforddi pobl i’w hanwybyddu, sy’n waeth na dim awtomeiddio o gwbl. Bwndelwch ddiweddariadau risg isel megis rhyddhadau patsh, gadewch iddynt uno’n awtomatig pan fydd profion yn llwyddo, a chadwch sylw dynol ar gyfer cynnydd fersiwn mawr ac unrhyw beth sy’n cyffwrdd â llyfrgell sensitif. Gosodwch rythm y gall y tîm ei gynnal, adolygiad wythnosol efallai, fel bo diweddaru’n aros yn dreth fach gyson yn hytrach na bil prin a phoenus. Dyma’n union lle mae strategaeth brofi gref (pennod 2.4) yn talu ar ei ganfed, oherwydd dim ond os gall eich profion ddal yr hyn y maen nhw’n ei dorri y mae diweddariadau awtomataidd yn ddiogel.
Lleihewch eich ôl troed a gwerthuswch cyn mabwysiadu
Mae pob dibyniaeth a ychwanegwch yn ymrwymiad parhaus: i’w namau, ei gwendidau, ei thrwydded, diddordeb parhaus ei chynhaliwr, a’i graff cynyddol ei hun o is-ddibyniaethau. Y ddibyniaeth rataf i’w rheoli yw’r un na wnaethoch ei hychwanegu. Cyn estyn am becyn, gofynnwch a fyddai ychydig ddwsinau o linellau o’ch cod eich hun yn ddigon, yn enwedig ar gyfer swyddogaeth ddibwys. Mae hanes ecosystemau pecynnau’n llawn straeon rhybuddiol lle cafodd pecyn bach, y dibynnid arno’n eang, ei dynnu i ffwrdd neu ei herwgipio, gan chwalu hanner y rhyngrwyd.
Pan fyddwch chi’n mabwysiadu, gwerthuswch yr ymgeisydd fel y berthynas hirdymor ydyw mewn gwirionedd. Gwiriwch iechyd cynnal a chadw: ymrwymiadau diweddar, cynhalwyr sy’n ymateb, hanes rhyddhau go iawn, a mwy nag un person â’r allweddi. Gwiriwch y drwydded a chadarnhewch ei bod ar eich rhestr gymeradwy (pennod 10.3). Gwiriwch ei hanes diogelwch, ei maint, a’i hôl troed trosiannol ei hun, oherwydd nid yw nodwedd fach yn werth llusgo cant o becynnau i mewn. Ysgrifennwch y meini prawf hyn i lawr fel bo “a ddylem ychwanegu hyn?” yn rhestr wirio y mae eich tîm cyfan yn ei chymhwyso’n gyson, nid yn hwyliau’r foment.
Cynhyrchwch SBOM a chofnodwch darddiad adeiladu
Ni allwch ateb “ydyn ni’n cael ein heffeithio gan y gwendid hwn?” yn gyflym oni bai eich bod eisoes yn gwybod beth sydd yn eich meddalwedd. SBOM yw’r ateb: rhestr eiddo y gall peiriant ei darllen o bob cydran mewn adeiladwaith, gyda fersiynau a thrwyddedau, mewn fformat safonol megis SPDX neu CycloneDX. Cynhyrchwch un yn awtomatig fel rhan o’ch piblinell adeiladu, ei storio ochr yn ochr â’r arteffact, a’i chadw cyhyd ag y bydd yr arteffact hwnnw’n rhedeg yn unrhyw le. Pan ddaw’r gwendid pennawd nesaf i’r amlwg, mae ymholiad yn erbyn eich SBOMau’n troi wythnos o “grep” gwyllt yn adroddiad pum munud.
Ewch gam ymhellach a chofnodwch darddiad: cofnod wedi’i lofnodi, sy’n dangos unrhyw ymyrryd, o sut y cafodd arteffact ei adeiladu, o ba ymrwymiad ffynhonnell, gan ba biblinell. Mae’r gymuned meddalwedd cod agored wedi cydgyfeirio ar fframwaith SLSA (Supply-chain Levels for Software Artifacts) fel model graddedig ar gyfer union hyn, gan symud o “gallwn ddisgrifio ein hadeiladwaith” i fyny at “gallwn ei brofi, ac mae’r prawf yn gwrthsefyll system adeiladu sydd wedi’i chyfaddawdu.” Mae ardystiad (attestation) yn caniatáu i ddefnyddiwr wirio bod arteffact wedi dod go iawn o’ch piblinell. Ar gyfer gwaith llywodraethol, mae hyn yn fwyfwy’n orfodol, nid yn ddewisol; mae tarddiad a SBOM yn eistedd o fewn mandadau caffael, felly mae adeiladu’r gallu hwn yn gynnar yn eich cadw’n gymwys i dendro.
Rheolwch eich ffynonellau â chofrestrfeydd, drychau, a “vendoring”
Mae o ble mae eich pecynnau’n dod yr un mor bwysig â pha becynnau rydych yn eu dewis. Tynnwch yn uniongyrchol o’r rhyngrwyd cyhoeddus ar bob adeiladwaith ac fe etifeddwch ei doriadau, ei fersiynau a dynnwyd yn ôl, a’i ymosodwyr. Sefydlwch gofrestrfa becynnau fewnol neu ddrych storfa sy’n dirprwyo’r ecosystem gyhoeddus, fel bo adeiladau’n gyflym, yn ailadroddadwy, ac wedi’u hynysu rhag i’r ffynhonnell uwchraddol ddiflannu. Mae’r gofrestrfa hefyd yn dod yn lle naturiol i orfodi polisi: rhwystro fersiynau y gwyddys eu bod yn ddrwg, cwarantinio rhyddhadau newydd am gyfnod byr o fwydo, a gwrthod pecynnau sy’n methu eich gatiau trwydded neu ddiogelwch.
Ffurfweddwch y gofrestrfa honno’n ofalus i osgoi dwy fagl benodol. Mae dryswch dibyniaeth (dependency confusion) yn digwydd pan fydd offeryn adeiladu, wedi’i gynnig pecyn preifat mewnol a phecyn cyhoeddus o’r un enw, yn nôl un cyhoeddus yr ymosodwr; amddiffynnwch rhagddo drwy gwmpasu enwau mewnol a phinio pecynnau mewnol yn benodol i’r ffynhonnell fewnol. Mae teipsboncio (typosquatting) yn digwydd pan fydd pecyn maleisus yn defnyddio enw un allwedd i ffwrdd o enw poblogaidd ac yn aros am fys blêr; mae cofrestrfa wedi’i churadu â rhestr ganiataol yn ei rwystro wrth y drws. Ar gyfer set fach o ddibyniaethau hollbwysig neu araf eu newid, ystyriwch “vendoring”, sef gwirio ffynhonnell wirioneddol y ddibyniaeth i mewn i’ch ystorfa eich hun, fel nad oes gan eich adeiladwaith unrhyw ddibyniaethau allanol o gwbl. Mae’n cyfnewid cyfleustra diweddaru am reolaeth lwyr, sydd weithiau’n union yr hyn sydd ei angen.
Cyfaddawdau: manteision ac anfanteision
| Dull | Manteision | Anfanteision |
|---|---|---|
| Ystodau fersiwn llac | Trwsiadau awtomatig; ymdrech â llaw isel | Mae cod heb ei adolygu’n cyrraedd cynhyrchu; yn anbenderfynol heb ffeil gloi |
| Pinio llym ynghyd â ffeil gloi | Adeiladau atgynhyrchadwy, archwiliadwy | Yn gofyn am waith diweddaru bwriadol; gall lusgo ar drwsiadau |
| Cyflymder diweddaru ymosodol | Camau bach, diogel; bob amser bron yn gyfredol | Corddi cyson; angen sylw adolygydd cyson |
| Uwchraddiadau mawr, prin, wedi’u bwndelu | Llai o darfu o ddydd i ddydd | Arswydus, peryglus, drud pan gaiff eu gorfodi |
| Llawer o ddibyniaethau cyfleus | Cyflym i adeiladu nodweddion | Arwynebedd ymosod mawr; llwyth cynnal a chadw trwm |
| Ôl troed lleiaf posibl ynghyd â vendoring | Rheolaeth, arwynebedd bach, dim risg uwchraddol | Mwy o god sy’n eiddo i chi; rydych yn cario’r diweddariadau eich hun |
| Cofrestrfa gyhoeddus uniongyrchol | Dim sefydlu | Amlygiad i doriadau, tynnu’n ôl, dryswch a theipsboncio |
| Cofrestrfa fewnol a drych | Cyflymder, gorfodi polisi, ynysu | Seilwaith i’w redeg a’i gynnal |
Mae’r tyndra canolog yn rhedeg rhwng cyflymder a rheolaeth. Mae pob dewis uchod yn union yr un ddeial wedi’i gweld o ongl wahanol: faint o’ch cod benthyg y byddwch yn ei lywodraethu’n weithredol, a faint y byddwch yn caniatáu iddo lifo i mewn ar ymddiriedaeth? Pwyswch yn rhy bell tuag at reolaeth a byddwch yn boddi mewn adolygiad â llaw, yn syrthio ar ei hôl hi ar drwsiadau diogelwch, ac yn arafu’r tîm yr oedd dibyniaethau i fod i’w gyflymu. Pwyswch yn rhy bell tuag at gyflymder ac fe ddeffrowch un diwrnod â graff na ellir ei archwilio na’i uwchraddio, a thoriad trwydded na allwch ei egluro i gyfreithiwr. Ystum yw’r datrysiad, nid pwynt sefydlog: cloi ac atgynhyrchu popeth, diweddaru’n barhaus mewn camau bach, lleihau’r hyn rydych yn ymgymryd ag ef, a gorfodi polisi mewn man cyfyng y mae gennych reolaeth drosto. Mae’r cyfuniad hwnnw’n prynu cyflymder a diogelwch ichi ill dau, sef y cyfnewid sy’n werth ei wneud ar raddfa.
Cwestiynau i’w trafod gyda’ch tîm
Beth yw eich cyflymder diweddaru go iawn, ac a fyddai uwchraddiad argyfwng gorfodol yn cymryd oriau neu wythnosau? Ni all y rhan fwyaf o dimau ateb hyn yn onest nes bod gwendid difrifol yn gorfodi’r mater. Mae’r bennod yn trin diweddaru cyson, awtomataidd, cam-wrth-gam fel y llwybr diogel, a’r uwchraddiad mawr-un-tro prin fel yr un peryglus, oherwydd y bwlch a adawch yn agored yw’r bwlch y bydd rhaid ichi ei sbrintio drosto dan bwysau’n ddiweddarach. Dewch â’r dystiolaeth: faint o’ch dibyniaethau sydd fwy nag un fersiwn fawr ar ei hôl hi, a pha mor hir a gymerodd eich uwchraddiad sylweddol diwethaf mewn gwirionedd. Trafodwch a allwch fabwysiadu diweddarwr awtomataidd, sut y byddwch yn bwndelu newidiadau risg isel fel nad yw pobl yn peidio â chymryd sylw, a pha brofi sydd ei angen ichi er mwyn i uno-awtomatig fod yn ddiogel. Dylai’r ateb newid sut rydych yn cyllidebu amser peirianneg, gan droi argyfwng prin yn dreth wythnosol reolaidd. Os yw’r ateb gonest yn “wythnosau,” dyna risg i’w henwi nawr, nid i’w darganfod ganol digwyddiad.
Pe cyhoeddid gwendid difrifol mewn llyfrgell gyffredin ar hyn o bryd, pa mor gyflym y gallech restru pob arteffact yr effeithir arno rydych yn ei redeg? Dyma’r cwestiwn y mae SBOM yn bodoli i’w ateb, ac mae cyflymder eich ateb yn fesur uniongyrchol o aeddfedrwydd eich cadwyn gyflenwi. Heb restr eiddo, cewch eich gorfodi i “grepio” ystorfeydd a chyfweld timau, sy’n cymryd dyddiau na fydd gennych efallai tra bo’r cloc yn rhedeg. Dewch â’r arwydd pendant: a ydych yn cynhyrchu SBOM ar gyfer pob adeiladwaith, ble mae’n cael ei storio, ac a allwch chi ymholi ar draws pob un ohonynt heddiw mewn gwirionedd? Trafodwch a ydych yn gwybod nid yn unig y dibyniaethau uniongyrchol ond y graff trosiannol, gan mai’r pecyn agored i niwed yw’r un na wnaethoch ei enwi fel arfer. Mae’r ateb yn penderfynu ai ymholiad neu ymarfer tân yw eich digwyddiad nesaf, ac mae’n werth adeiladu’r gallu hwn cyn i chi ei angen. Mae llywodraethau bellach yn mandadu hyn am yr union reswm hwnnw.
Sut rydych yn penderfynu a yw dibyniaeth newydd yn werth ei mabwysiadu, ac a yw pawb yn cymhwyso’r un safon? Mae’r bennod yn dadlau bod pob dibyniaeth yn atebolrwydd parhaol yn ogystal â chyfleustra, a mai’r un rataf i’w rheoli yw’r un na wnaethoch ei hychwanegu erioed. Eto ar y rhan fwyaf o dimau, mae’r penderfyniad yn anweledig: mae peiriannydd angen nodwedd, yn dod o hyd i becyn, ac erbyn amser cinio mae yn y ffeil gloi heb unrhyw adolygiad o’i chynnal a chadw, ei thrwydded, ei hanes diogelwch, na’i hôl troed. Dewch ag enghreifftiau o’ch graff eich hun o becynnau nad oes neb yn cofio eu mabwysiadu ac na allent eu hamddiffyn heddiw. Trafodwch a fyddai rhestr wirio werthuso ysgrifenedig a rhestr lyfrgelloedd cymeradwy (pennod 10.3) yn helpu neu ddim ond yn ychwanegu ffrithiant, a ble mae’r llinell rhwng cynorthwywyr dibwys y dylech eu hysgrifennu eich hun a seilwaith go iawn sy’n werth dibynnu arno. Mae’r ateb yn llunio’r pwysau hirdymor y mae eich tîm yn ei gario, un penderfyniad bach ar y tro.
A ydych chi mewn gwirionedd yn llywodraethu eich dibyniaethau trosiannol, neu dim ond y rhai a enwyd gennych? Mae’r rhan fwyaf o’ch risg yn byw un lefel i lawr, yn y pecynnau y mae eich pecynnau chi wedi’u tynnu i mewn, a gall gwrthdrawiad diemwnt lle mae dwy lyfrgell yn mynnu fersiynau anghydnaws o gyfleustod a rennir rwystro uwchraddiad ar yr union foment waethaf. Mae hyn yn bwysig ar raddfa oherwydd gall un pecyn trosiannol na ellir ei glytio rewi trwsiad diogelwch ar draws cannoedd o ystorfeydd, ac mae’r tyndra cystadleuol yn real: mae dod â’r graff llawn i’r amlwg a’i binio’n costio ymdrech barhaus, tra bo ei anwybyddu’n cyfnewid yr ymdrech honno am gasgliad araf o ddyled sy’n dod i’r amlwg fel uwchraddiad na ellir ei ddatrys. Dewch â’r dystiolaeth: a all eich offer argraffu’r goeden lawn ac egluro pam mae unrhyw becyn penodol yn bresennol a phwy a’i tynnodd i mewn, a faint o fersiynau gwahanol o’ch llyfrgelloedd mwyaf cyffredin sy’n cyd-fodoli heddiw? I fentrau mawr a llywodraethau, ychwanegwch a yw eich rhestr eiddo a’ch polisi’n cyrraedd cydrannau trosiannol o gwbl, oherwydd mae mandad i wybod beth sydd yn eich meddalwedd yn ddiystyr os yw hanner y graff yn anweledig i chi. Mae’r ateb yn dweud wrthych ai uno rheolaidd neu gloddio aml-dîm yw eich uwchraddiad gorfodol nesaf.
O ble mae eich pecynnau’n dod mewn gwirionedd, a beth sy’n atal ymosodwr rhag llithro un i mewn? Mae pob adeiladwaith sy’n tynnu’n uniongyrchol o’r rhyngrwyd cyhoeddus yn etifeddu ei doriadau, ei fersiynau a dynnwyd yn ôl, a dau ymosodiad penodol: dryswch dibyniaeth, lle mae offeryn adeiladu’n nôl pecyn cyhoeddus sy’n cysgodi eich un preifat, a theipsboncio, lle mae pecyn maleisus yn eistedd un allwedd i ffwrdd o enw poblogaidd. Mae hyn yn bwysig i dîm mawr oherwydd gall un cyrch gwenwynig ledaenu drwy eich holl ystad cyn i unrhyw un sylwi, ac mae’r cyfaddawd yn wirioneddol: mae cofrestrfa fewnol neu ddrych storfa’n rhoi man cyfyng polisi ac ynysiad rhag y ffynhonnell uwchraddol ichi, ond mae’n seilwaith y mae’n rhaid i rywun ei redeg a’i gadw’n gyfredol. Dewch â’r arwydd pendant: a yw enwau pecynnau mewnol yn cael eu cwmpasu a’u pinio’n benodol i’r ffynhonnell fewnol, a oes rhestr ganiataol, ac a yw unrhyw ryddhad newydd yn cael cwarantin byr cyn y gellir ei ddefnyddio? I brynwyr llywodraethol a rheoledig, cysylltwch hyn â’r rhestr feddalwedd gymeradwy a’r ystum dim-rhyngrwyd-uniongyrchol y mae caffael yn fwyfwy’n ei fynnu, a byddwch yn onest ynghylch a fyddai eich trefniant presennol yn pasio’r safon honno heddiw.
A allwch chi mewn gwirionedd atgynhyrchu a phrofi sut y cafodd eich arteffactau eu hadeiladu? Dylai ffeil gloi ymrwymedig â stwnshiau cryptograffig wneud eich adeiladwaith yn ffwythiant, gyda’r un mewnbynnau’n cynhyrchu’r un allbwn ar bob peiriant eleni a’r flwyddyn nesaf, a dylai tarddiad ganiatáu i unrhyw un wirio bod arteffact wedi dod go iawn o’ch piblinell a’ch ymrwymiad ffynhonnell. Mae hyn yn bwysig oherwydd bod adeiladwaith na ellir ei atgynhyrchu’n troi nam cynhyrchu yn ddirgelwch na ellir ei ddatrys ac yn eich gadael yn methu profi na fu ymyrryd, ac mae’r ystyriaeth gystadleuol yn wirioneddol: mae gosodiadau llym o ffeiliau cloi, ardystiad wedi’i lofnodi, a tharddiad sy’n cydymffurfio â SLSA yn costio sefydlu a disgyblaeth y mae llif “gosod y diweddaraf yn unig” yn eu hosgoi. Dewch â’r dystiolaeth: a yw integreiddio parhaus yn methu pan fydd y ffeil gloi a’r maniffest yn anghytuno, a ydych yn cynhyrchu ac yn storio SBOM a chofnod tarddiad wedi’i lofnodi ar gyfer pob adeiladwaith, ac a oes unrhyw un erioed wedi gwirio un? I waith mentrau mawr ac yn enwedig waith llywodraethol, mae tarddiad a SBOM yn fwyfwy’n eistedd o fewn mandadau caffael, felly mae’r ateb gonest yma’n penderfynu a ydych yn aros yn gymwys i dendro neu’n cael eich cau allan.
Trwy lens sector
Cwmni newydd. Gyda thîm bach a dim grŵp platfform, pwyswch ar ragosodiadau ac awtomeiddio yn hytrach na phroses. Cyflwynwch ffeiliau cloi o’r diwrnod cyntaf, trowch ddiweddarwr awtomataidd ymlaen sy’n bwndelu rhyddhadau patsh ac yn uno’n awtomatig pan fydd profion yn wyrdd, a chadwch un rheol ysgafn ar gyfer ychwanegu pecynnau: ffafriwch lyfrgelloedd diflas, wedi’u cynnal yn dda, a meddyliwch ddwywaith am rai bach. Ni fyddwch yn adeiladu cofrestrfa fewnol eto, ac mae hynny’n iawn, ond mae’r stwnshiau ymrwymedig eu hunain eisoes yn eich amddiffyn: yn syml, ni fydd fersiwn wenwynig yn gosod.
Busnes bach. Nid oes gennych arbenigwr dibyniaeth a chithau â chyllideb dynn, felly prynwch y ddisgyblaeth yn hytrach na’i hadeiladu. Dibynnwch ar yr awtomeiddio diweddaru y mae eich platfform cynnal a chod eisoes yn ei ddarparu, ffafriwch set fach o lyfrgelloedd aeddfed fel bo uwchraddiadau’n aros yn rhad, a defnyddiwch gynhyrchydd SBOM am ddim yn eich piblinell fel y gallwch ateb “ydyn ni’n cael ein heffeithio?” heb staffio ar ei gyfer. Treuliwch eich sylw prin ar wiriadau trwydded ac ar beidio â mabwysiadu pecynnau dibwys y gallech eu hysgrifennu mewn dwsin o linellau eich hun.
Menter fawr. Cysondeb ar draws llawer o dimau yw’r broblem: cofrestrfa fewnol a rennir sy’n adlewyrchu’r ecosystem gyhoeddus ac yn gorfodi polisi trwydded, ffynhonnell, a fersiwn mewn un man cyfyng, ynghyd â set wedi’i churadu o lyfrgelloedd euraidd fel y rhagosodiad a llwybr eithriad wedi’i ddogfennu ar gyfer unrhyw beth arall. Allyrrwch SBOM ar gyfer pob adeiladwaith i mewn i storfa ganolog fel bo un ymholiad yn ateb eich amlygiad ar draws yr ystad gyfan, treuliwch uwchraddiadau cydgysylltiedig drwy geisiadau tynnu awtomataidd, a thriniwch iechyd dibyniaeth fel portffolio wedi’i fesur a’i lywodraethu yn hytrach na damwain fesul ystorfa.
Llywodraeth. Mae rheolau caffael ac atebolrwydd cyhoeddus yn llunio popeth. Mynnwch fod gwerthwyr yn darparu SBOM y gall peiriant ei ddarllen a tharddiad adeiladu sy’n cydymffurfio â SLSA gyda phob rhyddhad, gosod yn fewnol dim ond o restr feddalwedd gymeradwy a wasanaethir gan ddrych heb lwybr uniongyrchol i’r rhyngrwyd cyhoeddus, a ffafrio dibyniaethau â chynnal a chadw sefydlog a thrwyddedu clir gan y gall system redeg am bymtheg mlynedd a rhaid iddi allu cael ei chlytio ar eu cyfer i gyd. Cynlluniwch fudo diwedd-oes yn fwriadol yn hytrach na fel argyfyngau, a chadwch y cofnodion sy’n caniatáu i archwilydd olrhain unrhyw arteffact a ryddhawyd yn ôl at ei ffynhonnell.
Enghreifftiau
Cwmni newydd. Mae cwmni newydd chwe pherson yn rhyddhau cymhwysiad gwe wedi’i adeiladu ar fframwaith, llyfrgell daliadau, a thua naw cant o becynnau trosiannol nad ydynt erioed wedi’u harchwilio. Ni allant fforddio tîm platfform, felly maen nhw’n pwyso ar awtomeiddio: ffeiliau cloi wedi’u hymrwymo o’r diwrnod cyntaf, diweddarwr awtomataidd sy’n bwndelu rhyddhadau patsh ac yn eu huno pan fydd profion yn wyrdd, ac awr fisol i adolygu’r cynnydd fersiwn mawr sydd wedi cronni. Eu rheol un-paragraff ar gyfer ychwanegu dibyniaethau yw’n bennaf “ffafrio llyfrgelloedd diflas, wedi’u cynnal yn dda, a meddwl ddwywaith am rai bach.” Pan gafodd pecyn poblogaidd ei gyfaddawdu, roedd stwnshiau eu ffeil gloi ymrwymedig yn golygu na fyddai’r fersiwn wenwynig, yn syml, yn gosod, a darllenon nhw am y digwyddiad yn hytrach na’i fyw.
Menter fawr. Mae banc â phedwar cant o ystorfeydd yn rhedeg cofrestrfa becynnau fewnol sy’n adlewyrchu’r ecosystem gyhoeddus ac yn gorfodi polisi yn y man cyfyng hwnnw. Set wedi’i churadu o lyfrgelloedd euraidd, un fframwaith cofnodi cymeradwy, un cleient HTTP, un dosrannwr JSON, yw’r rhagosodiad, ac mae angen eithriad wedi’i ddogfennu ar gyfer unrhyw beth arall. Mae model mewn-ffynhonnell yn caniatáu i unrhyw dîm gyfrannu at y llyfrgelloedd rhannu hynny tra bo grŵp platfform bach yn berchen ar eu hiechyd. Mae uwchraddiadau cydgysylltiedig yn treulio clwt diogelwch ar draws pob un o’r pedwar cant o ystorfeydd drwy geisiadau tynnu awtomataidd o fewn ychydig ddyddiau, ac mae pob adeiladwaith yn allyrru SBOM i mewn i storfa ganolog. Pan gyhoeddir gwendid difrifol, maen nhw’n rhedeg un ymholiad ac yn gwybod eu hamlygiad cyn i’r cylch newyddion orffen.
Llywodraeth. Mae asiantaeth ffederal yn caffael meddalwedd o dan ofynion tarddiad ac SBOM y gellir eu holrhain yn ôl at Orchymyn Gweithredol 14028. Rhaid i werthwyr ddarparu SBOM y gall peiriant ei ddarllen gyda phob rhyddhad a dangos tarddiad adeiladu sy’n cydymffurfio â fframwaith SLSA, fel y gall yr asiantaeth wirio bod pob arteffact wedi dod o’r ffynhonnell a honnwyd. Yn fewnol, dim ond o restr feddalwedd gymeradwy a wasanaethir gan ddrych mewnol heb lwybr uniongyrchol i’r rhyngrwyd cyhoeddus y caiff datblygwyr osod meddalwedd. Mae cynhaladwyedd hirdymor yn gyrru’r dewisiadau: maen nhw’n ffafrio dibyniaethau â chynnal a chadw sefydlog a thrwyddedu clir, gan y gall system redeg am bymtheg mlynedd a rhaid iddi allu cael ei chlytio ar eu cyfer i gyd. Pan fydd cydran yn cyrraedd diwedd ei hoes, mae mudo wedi’i gynllunio’n ei disodli yn hytrach nag argyfwng.
Achos busnes: cymhellion, ROI, a TCO
Mae’r enillion ar ddisgyblaeth dibyniaeth yn cael eu mesur yn bennaf mewn trychinebau nad ydynt byth yn digwydd. Mae ffeil gloi ymrwymedig ac adeiladwaith atgynhyrchadwy’n costio bron dim i’w mabwysiadu ac yn dileu dosbarth cyfan o ddiffygion “yn gweithio ar fy mheiriant i” a namau cynhyrchu na ellir eu hatgynhyrchu, y gall pob un ohonynt losgi diwrnodau o amser peirianneg uwch. Mae cyflymder diweddaru awtomataidd yn trosi’r uwchraddiad argyfwng achlysurol sawl wythnos o hyd, y math sy’n stolio map ffordd ac yn treulio tîm, yn wrn isel cyson o newidiadau bach wedi’u huno. Ar draws portffolio o lawer o ystorfeydd, mae’r symudiad hwnnw o brin-a-mawr i aml-a-bach yn un o’r newidiadau proses â’r trosoledd uchaf sydd ar gael i sefydliad peirianneg.
Mae’r ddadl cyfanswm cost berchnogaeth yn ymwneud â’r hyn rydych yn ei gario dros flynyddoedd, nid yr hyn rydych yn ei wario’r sbrint hwn. Mae dibyniaethau heb eu rheoli’n cronni’n dawel: fersiynau hen ffasiwn na ellir eu huwchraddio mwyach heb ailysgrifennu, trwyddedau sy’n creu amlygiad cyfreithiol na phrisiodd neb amdano, a graff mor gymhleth fel bod un clwt gofynnol yn sbarduno cyflenwad o newidiadau sy’n torri pethau. Mae cost peidio â gwneud hyn yn cyrraedd ar unwaith ac ar yr adeg waethaf, yn ystod digwyddiad diogelwch neu archwiliad neu fudo gorfodol, pan ddaw’r bil am flynyddoedd o gynnal a chadw a ohiriwyd yn ddyledus gyda llog. I wneud yr achos i arweinyddiaeth, ei fframio yn eu hiaith nhw: mae adeiladau atgynhyrchadwy’n lleihau cost digwyddiad, mae SBOMau’n torri amser ymateb i wendidau o ddyddiau i funudau, ac mae llyfrgelloedd cymeradwy ynghyd â tharddiad yn eich cadw’n gymwys ar gyfer contractau rheoledig a llywodraethol y byddech fel arall yn cael eich cau allan ohonynt.
Gwrthbatrymau a pheryglon
- Dim ffeil gloi, neu un heb ei hymrwymo: mae adeiladau’n datrys o’r newydd bob tro, felly ni all neb atgynhyrchu’n ddibynadwy’r hyn a ryddhawyd neu’r hyn a dorrodd.
- “Diweddaraf” arnofiol mewn cynhyrchu: beth bynnag a wasanaethodd y gofrestrfa’r funud honno sy’n dod yn rhyddhad i chi, heb ei adolygu ac na ellir ei olrhain.
- Peidio â diweddaru byth nes cael eich gorfodi: mae blynyddoedd o grwydro’n cwympo i mewn i un uwchraddiad argyfwng arswydus, risg uchel dan bwysau gwendid.
- Blinder bot-diweddaru: mae llifeiriant heb ei fwndelu o geisiadau tynnu’n hyfforddi’r tîm i’w hanwybyddu i gyd, gan gynnwys y rhai brys.
- Ymledu dibyniaeth: ychwanegu pecynnau’n reddfol ar gyfer nodweddion dibwys, gan dyfu graff na ellir ei gynnal ac arwynebedd ymosod eang.
- Dim rhestr eiddo: heb SBOM, mae ateb “ydyn ni’n cael ein heffeithio?” yn golygu dyddiau o archaeoleg â llaw ar draws ystorfeydd.
- Ymddiried yn ddall yn y gofrestrfa gyhoeddus: mae tynnu’n uniongyrchol yn eich amlygu i doriadau, fersiynau a dynnwyd yn ôl, dryswch dibyniaeth, a theipsboncio.
- Anwybyddu dibyniaethau trosiannol: llywodraethu dim ond yr hyn a enwyd gennych tra bo’r rhan fwyaf o’ch risg yn cuddio un lefel i lawr.
- Trwyddedau heb eu gwirio: tynnu i mewn god y mae ei drwydded yn gwrthdaro â sut rydych yn rhyddhau, na chaiff ei ddarganfod ond yn ystod archwiliad neu gaffaeliad.
Model aeddfedrwydd
- Lefel 1, Cychwyn: Ychwanegir dibyniaethau’n rhydd heb unrhyw werthusiad. Nid oes ffeil gloi ymrwymedig, nid yw adeiladau’n atgynhyrchadwy, dim ond mewn argyfyngau gorfodol y mae diweddariadau’n digwydd, ac ni all neb restru beth sydd yn y feddalwedd.
- Lefel 2, Datblygu: Mae rhai timau’n ymrwymo ffeiliau cloi ac yn cael adeiladau sydd, ar y cyfan, yn atgynhyrchadwy, ac mae ychydig o awtomeiddio’n agor ceisiadau tynnu diweddaru, ond mae’r arfer yn anghyson o ystorfa i ystorfa. Mae ymwybyddiaeth o drwyddedau a risg drosiannol yn anffurfiol, heb bolisi, rhestr eiddo, na rheolaeth a rennir dros o ble mae pecynnau’n dod.
- Lefel 3, Safoni: Mae arferion wedi’u dogfennu a’u gorfodi ar draws y sefydliad. Mae diweddarwr awtomataidd yn rhedeg ar gyflymder cyson gyda bwndelu synhwyrol, mae adeiladau’n gosod yn llym o ffeiliau cloi ac yn methu pan fydd y ffeil gloi a’r maniffest yn anghytuno, cynhyrchir SBOM ar gyfer pob adeiladwaith, mae cofrestrfa fewnol yn gorfodi polisi ffynhonnell a thrwydded, a gwerthusir dibyniaethau newydd yn erbyn rhestr wirio ysgrifenedig y mae pob tîm yn ei chymhwyso.
- Lefel 4, Rheoli: Mae’r ystad dibyniaeth yn cael ei mesur a’i rheoli â data yn erbyn llinellau sylfaen. Rydych yn olrhain llusgiad fersiwn (faint o ddibyniaethau sy’n fwy nag un fersiwn fawr ar ei hôl hi), amser cymedrig i glytio gwendid difrifol ar draws pob arteffact, cyfraddau uno diweddaru awtomataidd, cwmpas SBOM fel canran o adeiladau a ryddhawyd, a chyfrif gwrthdrawiadau diemwnt heb eu datrys ac eithriadau polisi. Mae’r metrigau hyn yn gatio rhyddhadau ac yn gyrru ble rydych yn treulio ymdrech, felly caiff uwchraddiadau a gwaith unioni eu rheoli gan dystiolaeth yn hytrach na chan bwy bynnag sy’n gweiddi uchaf.
- Lefel 5, Cydgysylltu: Caiff rheolaeth dibyniaeth ei gwella’n barhaus a’i hintegreiddio ar draws y sefydliad. Caiff tarddiad adeiladu ac ardystiad eu cofnodi a’u gwirio, gellir ymholi SBOMau ar draws y portffolio cyfan ar gyfer ymateb gwendid ar unwaith, mae uwchraddiadau cydgysylltiedig yn treiglo ar draws llawer o ystorfeydd yn awtomatig, caiff llyfrgelloedd euraidd eu curadu a’u mewn-ffynonellu, ac mae’r system gyfan yn addasu wrth i’r ecosystem, y bygythiadau, a mandadau caffael newid.
Syniadau i’w trafod
- Ble mae’r llinell gywir i’ch tîm rhwng ysgrifennu cyfleustod bach eich hun a chymryd dibyniaeth ar ei chyfer?
- Pa mor llac neu dynn ddylai eich cyfyngiadau fersiwn fod, ac a yw’r ateb hwnnw’n wahanol ar gyfer cymwysiadau o’i gymharu â llyfrgelloedd cyhoeddedig?
- A ddylai diweddariadau patsh risg isel uno’n awtomatig pan fydd profion yn wyrdd, a beth fyddai angen ar eich cyfres brofion i wneud hynny’n ddiogel?
- A yw cofrestrfa neu ddrych mewnol yn werth y gost weithredol ar gyfer maint a phroffil risg eich sefydliad?
- Sut y byddech yn blaenoriaethu pa ddibyniaethau i’w “vendora” ar gyfer y rheolaeth fwyaf, a pha rai i’w gadael ar y gofrestrfa gyhoeddus?
- Beth fyddai ei angen i gynhyrchu a defnyddio SBOM mewn gwirionedd ar gyfer pob arteffact rydych yn ei ryddhau, gan ddechrau’r chwarter hwn?
Prif negeseuon
- Mae’r rhan fwyaf o’ch meddalwedd yn god benthyg; mae ei rheoli’n dda yn ddisgyblaeth beirianneg graidd, nid yn ôl-ystyriaeth.
- Ymrwymwch ffeiliau cloi a mynnwch adeiladau atgynhyrchadwy, penderfynol fel bo’r un mewnbynnau bob amser yn cynhyrchu’r un allbwn.
- Diweddarwch yn barhaus mewn camau bach awtomataidd yn hytrach na neidiau prin, gorfodol, arswydus.
- Ychwanegwch ddibyniaethau’n fwriadol yn erbyn safon ysgrifenedig; y rataf i’w rheoli yw’r un na wnaethoch ymgymryd â hi erioed.
- Cynhyrchwch SBOM a chofnodwch darddiad fel eich bod bob amser yn gwybod beth sydd yn eich meddalwedd a ble y daeth ohono.
- Rheolwch eich ffynonellau â chofrestrfa fewnol i amddiffyn rhag dryswch, teipsboncio, a methiant uwchraddol.
Cyfeiriadau a darllen pellach
- U.S. Executive Order 14028, Improving the Nation’s Cybersecurity (2021)
- National Institute of Standards and Technology (NIST), Secure Software Development Framework (SP 800-218)
- Manyleb fframwaith SLSA (Supply-chain Levels for Software Artifacts), Open Source Security Foundation
- Manyleb OWASP CycloneDX a’r fanyleb SPDX, ar gyfer fformatau SBOM
- Tom Preston-Werner, Semantic Versioning Specification (SemVer)
- Dogfennaeth prosiect Reproducible Builds
- Nicole Forsgren, Jez Humble, Gene Kim, Accelerate: The Science of Lean Software and DevOps