GitHub Actions-cache beveiligen

GitHub Actions kan workflows nu expliciet lees-, schrijf-, alleen-schrijf- of geen toegang tot de dependencycache geven. Daarmee wordt cachetoegang een bewuste vertrouwensbeslissing in plaats van een impliciet gevolg van een job.

Auteur
Intercube
Gepubliceerd
Leestijd
8 min leestijd

01

Wat GitHub heeft veranderd

GitHub introduceerde cache-mode op 10 september 2026. De workflowkey kan op workflow- of jobniveau lees-, schrijf-, alleen-schrijf- of geen cachetoegang geven. Een waarde op jobniveau overschrijft die van de workflow, zodat iedere stap binnen één pipeline precies de rechten kan krijgen die bij zijn taak horen.

De cacheservice dwingt de gekozen modus af met begrensde tokens. Een herbruikbare workflow kan nooit meer toegang krijgen dan de aanroepende workflow heeft ontvangen. Die overerving is belangrijk voor organisaties die buildlogica centraliseren, omdat de vertrouwensgrens nu de volledige aanroepketen volgt.

Workflows zonder cache-mode behouden de standaarden van GitHub op basis van het trigger-event. Vertrouwde events zoals push krijgen lees- en schrijftoegang. Events met een lager vertrouwensniveau, zoals pull_request_target, krijgen alleen leestoegang. Bestaande workflows blijven dus werken, maar teams kunnen de bedoelde rechten voortaan zichtbaar vastleggen.

02

Waarom cachetoegang een vertrouwensgrens is

Een dependencycache versnelt builds door bestanden tussen jobs en workflowruns te hergebruiken. Diezelfde opslag kan beveiligingsgrenzen oversteken. Wanneer een job met weinig vertrouwen inhoud kan opslaan onder een key die later door een vertrouwde release wordt hersteld, kan ongecontroleerde data invloed krijgen op code met deploymentcredentials of productieartefacten.

GitHub beschermt triggers met een lager vertrouwensniveau standaard met alleen-lezen toegang. Een expliciete instelling voor schrijven of alleen schrijven kan die bescherming echter overschrijven. GitHub plaatst dan een waarschuwing in de workflow. De uiteindelijke beoordeling blijft bij het team, want alleen daar is bekend welke code draait, welke cachekeys overlappen en welke bevoegdheden de volgende job heeft.

Cache poisoning beperkt zich niet tot een zichtbare cache-action. Integraties van package managers, setup-actions en herbruikbare workflows kunnen de Actions-cache namens een job gebruiken. Een goede controle begint daarom bij de effectieve rechten en alle gebruikers van de opgeslagen data, niet bij één opvallende YAML-stap.

03

Geef iedere job de kleinste bruikbare rechten

Classificeer eerst iedere job. Een validatiejob voor een externe bijdrage kan genoeg hebben aan een alleen-lezen dependencycache, of helemaal geen gedeelde cache wanneer herstelde data gevoelige analyse kan beïnvloeden. Een vertrouwde build op de hoofdbranch kan lees- en schrijftoegang nodig hebben om een cache voor latere runs te publiceren. Een producer die nooit eerdere data mag gebruiken, kan alleen-schrijven krijgen, mits de cachekeys zorgvuldig zijn ontworpen.

Houd cacherechten los van repository- en deploymentrechten. Een job die productie kan deployen, hoeft niet automatisch naar de cache te schrijven omdat beide taken na een merge plaatsvinden. Door build, validatie en release te scheiden, wordt duidelijk waar onvertrouwde inhoud stopt en welke stap het artefact maakt dat productie bereikt.

Leg voor herbruikbare workflows een expliciet contract vast. De aanroepende workflow bepaalt de maximale cachetoegang, terwijl de gedeelde workflow beschrijft welke jobs herstellen of opslaan. Zo kan een latere wijziging aan de gedeelde workflow niet ongemerkt het cachegedrag verruimen voor iedere repository die haar gebruikt.

  • Gebruik lezen voor jobs die vertrouwde cachedata mogen herstellen maar niets mogen publiceren.
  • Gebruik schrijven alleen wanneer event, branch en uitgevoerde code latere runs mogen beïnvloeden.
  • Gebruik alleen-schrijven wanneer produceren en consumeren van cachedata strikt gescheiden moeten blijven.
  • Gebruik geen toegang wanneer cachehergebruik weinig oplevert of een onnodige vertrouwensgrens kruist.

04

Voer de wijziging in zonder releases te breken

Inventariseer eerst het huidige cachegebruik. Noteer workflowtriggers, aanroepen naar herbruikbare workflows, cache-actions, caching via package managers en keys die branches of events met elkaar delen. Breng daarna de huidige effectieve standaard van GitHub in kaart. Zo worden workflows zichtbaar die op schrijfrechten vertrouwen zonder die uit te spreken.

Voer cache-mode gefaseerd in. Begin bij jobs waarvan de juiste rechten geen twijfel oproepen en controleer daarna de workflowlogs op overgeslagen restores en saves. GitHub behandelt een geblokkeerde restore als een cache miss en een geblokkeerde save als informatie. De workflow kan dus groen blijven terwijl de buildtijd of actualiteit van de cache verandert. Valideer daarom ook gedrag en doorlooptijd.

Test na de uitrol de vertrouwensgrens met representatieve pull requests en releases vanaf de hoofdbranch. Bevestig dat onvertrouwde runs geen cache kunnen opslaan die door bevoorrechte jobs wordt gebruikt, dat herbruikbare workflows het bedoelde maximum erven en dat een cache miss nog steeds een volledige build oplevert. Documenteer uitzonderingen zodat gemak de releaseketen later niet ongemerkt verzwakt.

  • Breng iedere workflow, trigger en action in kaart die cachedata leest of schrijft.
  • Scheid validatie met weinig vertrouwen van vertrouwde build- en deploymentstappen.
  • Controleer informatieve cachemeldingen naast de eindstatus van de workflow.
  • Test herbruikbare workflows vanuit vertrouwde en onvertrouwde aanroepers.
  • Houd een volledige build zonder cache gezond, zodat een release nooit van cachebeschikbaarheid afhangt.

Controle voor GitHub Actions-cache

  • Behandel herstellen en opslaan van cachedata als afzonderlijke rechten.
  • Houd pull-requestworkflows met weinig vertrouwen alleen-lezen of cachevrij, tenzij een beoordeelde uitzondering bestaat.
  • Controleer caching via package managers en setup-actions naast expliciete actions/cache-stappen.
  • Stel bij herbruikbare workflows een maximum in vanuit de aanroepende workflow.
  • Valideer cache misses, workflowduur en de integriteit van artefacten tijdens de uitrol.

Primaire bronnen

Beoordeel het vertrouwensmodel achter je deployments.

Wij kunnen in kaart brengen hoe code, caches, artefacten en credentials door je releaseworkflow bewegen en de juiste productiegrenzen vastleggen.

Beoordeel de deploymentworkflow