GitHub Actions is GitHub’s ingebouwde platform voor continuous integration and continuous delivery (CI/CD) waarmee devteams hun workflow kunnen automatiseren, inclusief de build-, test- en deployment-pijplijn.

Een nadeel van het gebruik van GitHub Actions is dat je logs openbaar zijn, en iedereen er toegang toe heeft met de nodige machtigingen.

Om te voorkomen dat gevoelige gegevens worden blootgesteld in GitHub Actions logs, moet je versleutelde omgevingsvariabelen gebruiken om gevoelige gegevens veilig op te slaan. Deze versleutelde omgevingsvariabelen staan bekend als GitHub Actions Secrets.

Dit artikel laat zien hoe je GitHub Actions Secrets kunt gebruiken om te voorkomen dat gevoelige informatie in je GitHub Actions logs verschijnt.

Vereisten

Om deze tutorial te volgen:

Zo houd je GitHub Action Logs veilig

Als je workflows bouwt met GitHub Actions, kan elke bezoeker van je repository de logs bekijken, dus ze zouden geen gevoelige informatie moeten bevatten. Je kunt echter niet zomaar je tokens, wachtwoorden en andere gevoelige informatie verwijderen – je hebt ze nodig voor het testen en voor het correct functioneren van je app.

De oplossing is om ze te verbergen met het ::add-mask:: workflow commando, dat een sterretje (*) zet op de plaats van de gevoelige gegevens waarop het wordt toegepast.

De volgende sectie laat zien hoe je een logboek kunt maskeren.

Zo maskeer je je logs

Open eerst het gekloonde archief in je tekstverwerker.

Maak de map .github/workflows/ aan in de root van je repository om je workflowbestanden in op te slaan. Maak dan een nieuw bestand met de naam hide-secrets.yml in de .github/workflows map en voeg er de volgende code aan toe:

name: Hide Sensitive Information
on: push
jobs:
  print-secret-token:
    runs-on: ubuntu-latest
    steps:
      - name: echo a secret
        run: echo "your secret token is verySecretToken"

Commit de wijzigingen en push ze naar je GitHub repository. De bijgewerkte GitHub Actions workflow is actief en zal worden geactiveerd telkens als je een nieuwe wijziging pusht.

Open je repository op GitHub en selecteer de Actions tab om de logs te bekijken. Je workflow zou er als volgt uit moeten zien:

Een voorbeeld van je workflow
Een voorbeeld van je workflow

Als je de workflow logs bekijkt, zie je de verySecretToken string afgedrukt op de logs. Klik op je workflow, en dan op de naam van de taak (print-secret-token) om het logboek te bekijken. Het zou er zo uit moeten zien:

Je GitHub Actions logs bekijken
Je GitHub Actions logs bekijken

Om het te verbergen gebruik je het ::add-mask:: commando, bewerk je het hide-secrets.yml bestand, en voeg je een nieuwe stap toe aan de print-secret-token taak:

name: Hide Sensitive Information
on: push
jobs:
  print-secret-token:
    runs-on: ubuntu-latest
    steps:
      - name: Add Mask
        run: echo "::add-mask::verySecretToken"
      - name: echo a secret  
        run: echo "your secret token is verySecretToken"

Je moet de stap Add Mask bovenaan toevoegen, omdat het maskeren pas geldt nadat ::add-mask:: is uitgevoerd. Als je het secret verySecretToken vóór de stap Add Mask zet, zal het nog steeds ongemaskeerd verschijnen. Om ervoor te zorgen dat de waarde gemaskeerd wordt, is het dus essentieel om zo snel mogelijk ::add-mask:: te gebruiken.

Zodra je je wijzigingen commit en publiceert op je GitHub repository, zal de string verySecretToken worden vervangen door sterretjes (*) overal waar hij in je logs voorkomt:

Platte tekst schrijven
Platte tekst schrijven

Hoewel dit het maskeerprobleem oplost, introduceert het een nieuw probleem. Je verySecretToken staat nog steeds in het workflowbestand, dus iedereen met toegang tot de broncode kan het zien.

Een ander nadeel van het maskeren van platte tekst is dat het maskeren van slechts een deel van een woord alle gevallen van dat woord verbergt. Neem bijvoorbeeld de volgende zin: “Programming is great, but my most productive days are those when I do not write a program.” Als je het woord “program” maskeert, zal het niet alleen het woord aan het eind van de zin maskeren, maar ook overal waar het voorkomt, zoals in “programming”

Als je platte tekst probeert te maskeren, krijg je zoiets als dit:

Probleem met het maskeren van platte teksten
Probleem met het maskeren van platte teksten

Een betere aanpak voor het verbergen van gevoelige gegevens in GitHub Actions logs is het gebruik van GitHub Actions Secrets, zoals we zullen laten zien in de volgende sectie.

Zo gebruik je GitHub Actions Secrets

Je kunt GitHub Actions Secrets gebruiken om alle privé gegevens op te slaan die je in je GitHub Actions workflow wilt gebruiken. Secrets worden aangemaakt als sleutel/waarde paren op repository- of organisatieniveau.

Waar die repository alleen toegang heeft tot secrets die op repository-niveau zijn aangemaakt, worden secrets die op organisatieniveau zijn aangemaakt gedeeld door alle repositories binnen een organisatie.

Secrets die je maakt op archiefniveau zijn beschikbaar voor gebruik in actions door iedereen die rechten heeft op de rol van employee. Je kunt de waarde van je secrets op elk moment wijzigen. Secrets kunnen echter niet gebruikt worden met workflows uit een geforkt archief.

Voor het benoemen van secrets gelden de volgende richtlijnen:

  • Geheime namen kunnen geen spaties bevatten.
  • Geheime namen zijn niet hoofdlettergevoelig.
  • Geheime namen kunnen niet beginnen met een getal.
  • Geheime namen mogen niet beginnen met de prefix GITHUB_.
  • Geheime namen moeten uniek zijn – secrets met dezelfde naam kunnen niet op hetzelfde niveau bestaan.

Je kunt deze secrets binnen de GitHub Actions workflow gebruiken door eenvoudigweg  secrets toe te voegen voor je geheime naam als een YML variabele, zoals hieronder getoond:

${{ secrets.MY_SECRET_TOKEN }}

Je kunt secrets ook maskeren voor meer veiligheid, zoals getoond in het volgende gedeelte.

Zo maskeer je secrets

Maak eerst een GitHub secret. In je repository op GitHub, klik op de Settings tab, selecteer Secrets > Actions in de linker zijbalk, en klik dan op New repository secrets om een nieuwe secret toe te voegen:

Een nieuw repository secret maken
Een nieuw repository secret maken

Geef je secret een naam en een secret waarde en klik dan op Add secret:

Een nieuwe GitHub secret toevoegen
Een nieuwe GitHub secret toevoegen

Nu je je secret hebt gemaakt en het de verySecretToken waarde hebt gegeven, kun je het gebruiken in je workflow bestand. Open je hide-secrets.yml bestand en breng de volgende wijzigingen aan:

name: Hide Sensitive Information
on: push
jobs:
  print-secret-token:
    runs-on: ubuntu-latest
    steps:
      - name: Add Mask
        run: echo "::add-mask::${{ secrets.MY_SECRET_TOKEN }}"
      - name: Echo a secret  
        run: echo "your secret token is ${{ secrets.MY_SECRET_TOKEN }}"

Het enige verschil tussen dit en de vorige code is dat je het secret token hebt vervangen door je nieuw gemaakte GitHub secret “${{ secrets.MY_SECRET_TOKEN }}.”

Zodra je de code commit en de wijzigingen naar je GitHub repository pusht, zijn je secrets gemaskeerd:

Gemaskeerde GitHub Actions secrets
Gemaskeerde GitHub Actions secrets

Samenvatting

Je wil geen gevoelige informatie laten zien in je GitHub Action logs. Platte tekst maskeren is één manier om gegevens te verbergen, maar iedereen die toegang heeft tot je workflow bestanden kan de informatie zien die je probeert te verbergen.

Zoals deze tutorial laat zien, zijn GitHub Actions Secrets een veel veiligere aanpak om je gevoelige gegevens veilig te stellen, en ze vervolgens te maskeren.

Lees onze documentatie om meer te leren over het gebruik van Git bij Kinsta. Probeer nu gratis onze Applicatie Hosting.

Jeremy Holcombe Kinsta

Content & Marketing Editor bij Kinsta, WordPress Web Developer en Content Writer. Buiten alles wat met WordPress te maken heeft, geniet ik van het strand, golf en films. En verder heb ik last van alle problemen waar andere lange mensen ook tegenaan lopen ;).