1 open besluit1414 voorstellen

Onderwerp

Bouwen op het bouwcluster

Eigen software wordt alleen gebouwd op één afgeschermd bouwcluster, met een gepubliceerde versie van het pijplijnsjabloon. Het sjabloon legt de vaste stappen, controles en toegangsbewijzen vast; teams kiezen alleen de bouwmethode en hun eigen tests.

Nog niet bevestigd door een mens. Eigenaar: vdo89. Bron in de atlas

Domein
Volgt uit
Functies
Producten
Verwant

Wat het is

Eigen software, van applicatieteams en van het platform, wordt gebouwd op één apart gehost applicatiecluster: het bouwcluster. Daar draaien ook de toelatingsroute voor software van derden en de platformnaamruimten die ondertekende software overzetten. Teams gebruiken een gepubliceerde versie van het pijplijnsjabloon, met vaste stappen van ophalen tot wijzigingsvoorstel.

Dit onderwerp legt de plaats en afscherming van het bouwcluster vast, zijn verbindingen, de stappen en versies van het sjabloon, de verplichte tests en de identiteiten en toegangsbewijzen van de pijplijnen.

Waarom zo

Een bouw voert code uit die nog niet is gecontroleerd. Op een eigen cluster, met een naamruimte per team, begrensd uitgaand verkeer en zonder ondertekensleutel, blijft een gecompromitteerde bouw beperkt tot die ene naamruimte. Het vaste sjabloon maakt de controles onontkoombaar, en kortlevende toegangsbewijzen voorkomen dat een gelekt token buiten de pijplijn bruikbaar is.

De netwerkplaats, de termijnen voor sjabloonversies en de dynamische test via het virtuele adres zijn een voorstel.

Uitspraken

2 vastgesteld18 voorstellen

Alle 18 voorstellen vaststellen

Eén afgeschermd bouwcluster

VastgesteldOntwerpbesluit#

Alle eigen software, van teams en van het platform, wordt gebouwd op één apart gehost applicatiecluster van het platform: het bouwcluster, gescheiden van productietoepassingen en basisdiensten. Daar draait ook de toelatingsroute voor software van derden.

Toelichting

Drie redenen. De plaats waar software ontstaat, moet onder beheer van het platform staan: een herkomstverklaring is alleen iets waard als een onafhankelijke besturing haar afgeeft. Een bouw voert ongecontroleerde code uit, zoals bouwstappen en testscripts van teams en bibliotheken van buiten, die niet naast productie of basisdiensten hoort. En een bouw heeft iets meer rechten nodig dan een toepassing; die rechten gelden alleen op dat cluster. Afgewezen: bouwen op werkplekken of bij een externe bouwdienst (de sleutels staan dan buiten het platform, dat de bouwomgeving niet kan controleren), bouwen in het eigen applicatiecluster van ieder team (ieder cluster krijgt dan het ruimere bouwprofiel en schrijfrecht op de registry, en het team verklaart zelf de herkomst) en bouwen op het basisdienstencluster (ongecontroleerde code naast geheimenbeheer en toegang). Het extra cluster kost weinig: een gehoste besturing op het clusterbeheer en enkele virtuele werkers, geleverd via hetzelfde leverpad als ieder cluster. Wel deelt het bouwcluster daarmee het clusterbeheer met de andere clusters.

VastgesteldRegel#

Eigen software wordt alleen op het bouwcluster gebouwd, met een gepubliceerde versie van het pijplijnsjabloon, en nooit op een werkplek. Sjabloon, bouwomgeving en ondertekenaar staan buiten de naamruimten van de teams.

Toelichting

De herkomstverklaring per versie legt de bouwomgeving vast; het toelatingsbeleid eist een herkomstattest, en een rapport toont releases zonder herkomst.

VoorstelWaarde#

Het bouwcluster bouw-prd-c1-01 is een gehost cluster in cel 1 met drie virtuele werkers in drie rekken, zodat het uitval van één werker draagt. Het staat, net als het portaalcluster, in het routeringsdomein platform (vrf-platform), met werkers en ingang op een eigen segment uit VLAN 700–709 (L2-VNI 10700–10709) en een /26 uit de platformreeks; de adressen komen via DHCP-doorgifte van de gateway naar Infoblox.

Toelichting

Het cluster krijgt de standaardinrichting en heeft de API-naam api.bouw-prd-c1-01.c1.dc3.internal. Het groeit met extra werkers en blijft één cluster voor de hele vloot.

VoorstelRegel#

Ieder team krijgt op het bouwcluster een eigen naamruimte met een quotum; een bouwtaak ziet de taken, geheimen en beelden van andere teams niet. Iedere bouwtaak draait als tijdelijke container in een schone omgeving, zonder toegang tot het knooppunt of andere naamruimten. De platformnaamruimten toelating en overzet zijn niet toegankelijk voor teams, en een team meldt zich niet aan op het bouwcluster.

Toelichting

Een gecompromitteerde bouw blijft zo beperkt tot de eigen naamruimte en kan niet ondertekenen; de toetsen Toelatingscontrole van software en Herleidbaarheid van software beproeven dat.

VoorstelRegel#

Bouwtaken gebruiken het beperkte bouwprofiel dat OpenShift Pipelines voor bouwen levert. Dat profiel is ruimer dan het striktste profiel voor containers en geldt alleen op het bouwcluster, als vastgelegde uitzondering op de regel dat containers zonder verhoogde rechten draaien.

Toelichting

Een bouw stelt een beeld in een container samen en heeft daarvoor iets meer rechten nodig dan een toepassing. De compliancescan controleert dat het profiel nergens anders geldt.

Netwerk van het bouwcluster

VoorstelRegel#

Het bouwcluster bereikt alleen de opslagplaatsen met broncode, de pakketspiegel, de containerregistry, de ondertekenvoorziening, het geheimenbeheer voor de eigen geheimen van de bouw en de andere vastgelegde bestemmingen; geen afnemerszone en geen platformcluster. Bibliotheken komen alleen uit de pakketspiegel. Omdat binnen het routeringsdomein platform geen firewall bouwtaken van basisdiensten scheidt, begrenzen EgressFirewall en netwerkbeleid het uitgaande verkeer per naamruimte; de proxy laat alleen toegestane bronnen door.

Toelichting

De firewall ziet alleen het adres van de werker. Een weigering valt onder de detectieregel voor uitgaand verkeer naar een niet-toegestane bestemming, en de zonecontrole bewaakt de stromen. Afgewezen: het bouwcluster vrij laten in het routeringsdomein, zoals een ander platformcluster; bouwtaken zouden dan zonder firewall basisdiensten en platformclusters bereiken.

VoorstelWaarde#

De softwarelevering gebruikt deze verbindingen; alle eindpunten sluiten zelf TLS af.

VanNaarPoortDoelZoneregel
GitLab (RWS)Eigen ingangsshard van het ontvangstpunt; virtueel adres met doorgifte443Webhook voor een toepassingExtern naar ingang, alleen vanaf GitLab; ingang naar platform als aanvulling op de zonematrix
Forgejo op het basisdienstenclusterOntvangstpunt van het bouwcluster443Webhook voor platformsoftwareBinnen vrf-platform
BouwclusterGitLab en zijn pakketregistry443Broncode, wijzigingsvoorstel, bibliothekenAanvulling op de zonematrix: platform naar extern
BouwclusterForgejo op het basisdienstencluster443; 22Sjabloon; broncode van platformsoftware met een SSH-certificaatBinnen vrf-platform
BouwclusterContainerregistry op het basisdienstencluster443Basisbeelden lezen, quarantaine schrijven, overzettenBinnen vrf-platform
BouwclusterGeheimenbeheer op het basisdienstencluster8200Toegangsbewijzen; ondertekenen via de transit-engineBinnen vrf-platform
BouwclusterVlootcluster443Rekor, tijdstempeldienst, later Fulcio; Central van Advanced Cluster Security; Trusted Profile AnalyzerBinnen vrf-platform
Werkers van het bouwclusterGehoste besturing op het clusterbeheer; toegang, naam en tijd6443 en 443; 53; 123Als ieder gehost clusterBinnen vrf-platform
Naamruimte toelatingProxyVolgens de uitwerkingOphalen uit een toegestane bronAanvulling op de zonematrix: platform naar extern
Naamruimte van een team (dynamische test)Virtueel adres voor toepassingen van het cluster voor ontwikkelen en beproeven443Dynamische test vóór de vrijgave voor reguliere productieAanvulling op de zonematrix: platform naar ingang
Automatisering op het basisdienstenclusterProxyVolgens de uitwerkingSpiegelen; kwetsbaarheidsgegevensVaste stroom naar de proxy voor het spiegelen
Automatisering van de ontvangende celContainerregistry van de andere cel443Replicatievrf-platform over de koppeling tussen de cellen
Werkers van ieder clusterContainerregistry van de eigen cel443Vrijgegeven software ophalenVaste stroom van de afnemerszones naar vrf-platform; binnen vrf-platform voor platformclusters
VlootclusterAPI van ieder cluster6443Beleid en vertrouwensbasisVaste stroom naar de afnemerszones; binnen vrf-platform voor platformclusters
Toelichting

De vier aanvullingen op de zonematrix gelden alleen voor de adresreeks van het bouwcluster; de drie uitgaande beperkt de EgressFirewall tot de naamruimten die ze nodig hebben. Zie ook het domein netwerk.

VoorstelOntwerpbesluit#

De dynamische test vóór de vrijgave voor reguliere productie loopt vanuit de naamruimte van het team op het bouwcluster naar het virtuele adres van het cluster voor ontwikkelen en beproeven op de externe verkeersverdeling (443), dat doorgeeft naar de ingang van dat cluster; niet rechtstreeks naar de afnemerszone.

Toelichting

Aanvaard restrisico: een bouwtaak met ongecontroleerde code bereikt gepubliceerde toepassingen, net als kantoor. De EgressFirewall laat alleen teamnaamruimten door naar de virtuele adressen op 443, en de verkeersverdeling begrenst de verbindingen.

Het pijplijnsjabloon

VoorstelWerking#

Het pijplijnsjabloon heeft negen vaste stappen. Teams kiezen alleen de bouwmethode en hun eigen tests; de controle-, ondertekenings- en herkomststappen kunnen zij niet weglaten of wijzigen.

StapWat er gebeurtBlokkeert bij
1 OphalenBroncode op een vastgelegde versie uit de opslagplaats van het team of van het platform; het sjabloon in de door het team gekozen gepubliceerde versieNiet-ondertekende vastlegging, onbekende bron of ingetrokken sjabloonversie
2 GeheimencontroleZoeken naar wachtwoorden, sleutels en tokens in code en configuratieIeder gevonden geheim, met een melding aan het SOC
3 BouwenBouw in een afgeschermde, tijdelijke omgeving met alleen het beperkte bouwprofielMislukte bouw
4 Testen en statische analyseEenheidstests, statische code-analyse, analyse van afhankelijkheden en de tests van het teamMislukte test; bevinding met hoge ernst zonder vastgelegd besluit met eigenaar en termijn
5 OnderdelenlijstOnderdelenlijst in een open standaardformaat, gekoppeld aan het inhoudskenmerk van het resultaatOntbrekende of lege lijst, of een lijst die niet bij het inhoudskenmerk hoort
6 Kwetsbaarheden en licentiesScan van resultaat en onderdelen tegen actuele kwetsbaarheidsgegevens en de lijst van toegestane licentiesKritieke kwetsbaarheid; hoge kwetsbaarheid zonder vastgelegde tijdelijke maatregel bij vrijgave voor productie; niet-toegestane licentie
7 Opslag in quarantaineOpslag in de quarantaineruimte van de containerregistry onder het inhoudskenmerk; versielabels zijn onveranderbaarBestaand label
8 Ondertekening, herkomst en vrijgaveHandtekening van de Chains-besturing op resultaat, onderdelenlijst en herkomstverklaring; registratie in het transparantielogboek; daarna vrijgave van hetzelfde inhoudskenmerk naar de vrijgegeven ruimteMislukte ondertekening of registratie; het beeld blijft dan in quarantaine
9 Gewenste inrichting bijwerkenWijzigingsvoorstel met het nieuwe inhoudskenmerk, ingediend met het taaktoken van de pijplijn, dat in de opslagplaats van het team alleen voorstellen mag doenGeen blokkade; mislukt het voorstel, dan wordt niets uitgerold en krijgt het team een melding
Toelichting

In de eerste levering is dit versie v1 van het sjabloon. De ernst van kwetsbaarheden volgt de oplostermijnen. Een geslaagde bouw is geen toestemming om productie stilzwijgend te veranderen: het wijzigingsvoorstel van de laatste stap volgt de gewone beoordeling.

VoorstelRegel#

Het sjabloon verschijnt als genummerde, onveranderbare versie onder een versielabel (v1, v2, …) in de opslagplaats Catalogus; het platform bestuurt de pijplijn en laat alleen gepubliceerde versies toe. Een team legt in zijn eigen opslagplaats vast welke versie het gebruikt. Na publicatie van een opvolger blijft een versie ten hoogste 90 dagen bruikbaar, en een versie met een beveiligingsfout wordt direct ingetrokken en blokkeert dan al bij het ophalen.

Toelichting

Zo hebben teams tijd om over te stappen en ondersteunt het platform alleen actuele controles. Dezelfde revisie en dezelfde verplichte controles borgen dat de beoordeelde toestand wordt uitgevoerd.

VoorstelWerking#

Iedere vastlegging of ieder wijzigingsvoorstel start de pijplijn vanuit het versiebeheer, met een kortlevend alleen-lezen token voor die opslagplaats. Voor toepassingen stuurt GitLab een webhook via de externe verkeersverdeling en staat de PipelineRun met Pipelines as Code in de opslagplaats van het team. Voor platformsoftware start een Tekton-trigger op een webhook van Forgejo, omdat de Forgejo-koppeling van Pipelines as Code een Technology Preview is.

Toelichting

Dat Pipelines as Code werkt zonder langlevend token van het team, is een voorwaarde bij de acceptatie; de terugvaloptie is een Tekton-trigger op de webhook met de PipelineRun uit het sjabloon. De PipelineRun roept het sjabloon aan met de git resolver op het versielabel, die buiten de pijplijn leest met het repositorygebonden leestoken van het platform. Het team ziet het resultaat als beeld in de containerregistry, als scanrapport in het portaal en als wijzigingsvoorstel in de opslagplaats van zijn toepassing.

VoorstelOntwerpbesluit#

De taken git-clone en buildah komen via de cluster resolver uit de naamruimte openshift-pipelines; voor geheimencontrole, onderdelenlijst (syft) en de controle met roxctl zijn er eigen taken. De versies van syft en skopeo liggen vast in de taak van het sjabloon.

Toelichting

De openbare Tekton Hub is in OpenShift Pipelines 1.22 verwijderd.

VoorstelRegel#

Bouwtaken en basisbeelden komen uit de vrijgegeven ruimte van de eigen containerregistry, bibliotheken alleen langs een uitgaande route met een lijst van toegestane bronnen. Omdat een toegestane bron iets zegt over de herkomst en niet over de inhoud, staat iedere gebruikte bibliotheek in de onderdelenlijst en wordt zij gescand.

Toelichting

De lijst van toegestane bronnen staat in de opslagplaats Beleid; zie de lijsten van licenties en bronnen.

VoorstelWerking#

Krijgt een basisbeeld of bibliotheek een beveiligingsupdate, dan herbouwt de pijplijn automatisch de software die volgens de onderdelenlijsten dat onderdeel bevat, en levert zij een nieuwe versie langs dezelfde stappen. De uitrol naar productie blijft een beoordeeld wijzigingsvoorstel.

Toelichting

Het platform herbouwt; het applicatieteam geeft vrij. Hoe het voorstel wordt samengevoegd en uitgerold, staat in het domein dienstverlening en portaal.

Veilig ontwikkelen en testen

VoorstelRegel#

Teams ontwikkelen volgens de regels voor veilig programmeren, gebaseerd op de OWASP-richtlijnen en vastgesteld door de CISO-functie; ze staan in de opslagplaats Platform. De pijplijn dwingt de technische controles af: statische code-analyse en analyse van afhankelijkheden in het sjabloon, en een dynamische beveiligingstest vóór de vrijgave voor reguliere productie. Een van buiten bereikbare toepassing krijgt ook vóór de vrijgave voor productie en daarna jaarlijks een dynamische beveiligingstest.

Toelichting

Voor toepassingen draaien de scanners van GitLab waar de licentie dat toelaat, anders en voor platformsoftware uit Forgejo een open scanner; voor de afhankelijkheden syft, Clair en Trusted Profile Analyzer. Bevindingen volgen de oplostermijnen en staan met termijn in de werkvoorraad. Tegenspraak: de maatregel noemt de dynamische test een verplichte stap van het sjabloon voor alle via het platform geleverde software, maar de vaste stappen van het sjabloon bevatten haar niet en de regel eist haar alleen vóór de vrijgave voor reguliere productie. Welke van de twee geldt, vraagt een besluit.

VoorstelEis#

Veilig programmeren is verplicht voor alle software die op het platform draait, en alle software doorloopt een ontwikkelcyclus met beveiligingstests: statische analyse, een dynamische test en analyse van de samenstelling en afhankelijkheden.

Toelichting

Eisen uit de referentieset securityeisen. De verplichte stappen in het pijplijnsjabloon dekken ze voor alle via het platform geleverde software.

Identiteiten en toegangsbewijzen

VoorstelRegel#

Ieder team heeft een eigen pijplijnidentiteit (een serviceaccount, vanaf groeipadstap 2 met een SPIFFE-identiteit) en een gefedereerd robotaccount dat alleen in de eigen quarantaine schrijft. Met het taaktoken leest de pijplijn de broncode en dient zij het wijzigingsvoorstel in; wat dat token mag, legt het team in GitLab vast. Het platform zelf heeft geen toegang tot de opslagplaatsen van teams.

VoorstelOntwerpbesluit#

Pijplijnen gebruiken alleen kortlevende toegangsbewijzen van ten hoogste 15 minuten per stap, via federatie met de pijplijnidentiteit: aanmelding bij het geheimenbeheer met de Kubernetes-identiteit, een gefedereerd robotaccount in Quay, het taaktoken in GitLab en een SSH-certificaat uit het geheimenbeheer in Forgejo. Er zijn geen robotaccounts of projecttokens per team in de pijplijn. Ook toelating, overzet, spiegel en replicatie schrijven met gefedereerde robotaccounts.

Toelichting

Een bewaard token werkt ook buiten de pijplijn en na een lek. Dat Forgejo het SSH-certificaat aanvaardt, is een voorwaarde bij de acceptatie, met als terugvaloptie een repositorygebonden leestoken als uitzondering met einddatum.

Wat een team kan

VoorstelUitgangspunt#

Een team kan zelf een sjabloonversie kiezen, bouwmethode en tests bepalen, het wijzigingsvoorstel met het nieuwe inhoudskenmerk na beoordeling samenvoegen, een toelating aanvragen en zijn rapporten inzien. Een team kan niet: stappen uit het sjabloon weglaten, ondertekenen, in een vrijgegeven ruimte schrijven, zich aanmelden op het bouwcluster, software van buiten de containerregistry starten of de toelatingscontrole uitschakelen.

VoorstelWaarde#

De softwarelevering biedt deze interfaces, elk met een eigen isolatie en grens.

InterfaceAfnemerIsolatieGrens of quotumBijzonderheden
PijplijnsjabloonApplicatieteams, ontwikkelteamNaamruimte en pijplijnidentiteit per teamQuotum per naamruimteControle-, ondertekenings- en herkomststappen liggen vast
QuarantainePijplijn van het team; toelatingsrouteSchrijfrecht alleen op het eigen voorvoegsel7 dagenGeen cluster leest hieruit
Vrijgegeven, derden en spiegelClusters van de cel; bouwtakenLeesrobot per cluster; schrijven alleen door het platformBewaarregel; objectopslag in de realm platform van het opslagclusterLeesbaar voor alle clusters van de cel; een beeld bevat geen geheimen
ToelatingsrouteApplicatieteams, platformbeheerAanvraag als wijzigingsvoorstel op het register; de aanvrager schrijft niet in derdenPer beeld en versie, met einddatumEen ontbrekende handtekening van de leverancier staat in het register als aanvaard risico
RapportenApplicatieteamsAlleen de eigen software, in het portaal en in de analysevoorziening—Meldingen over nieuwe kwetsbaarheden aan de eigenaar
ToelatingscontroleIeder clusterLabel op de naamruimte, teruggezet als het verdwijnt—Afwijking alleen als uitzondering

Verwijzen hiernaar

Onderwerpen 3