GitHub Actions er GitHubs indbyggede CI/CD-platform (Continuous Integration and Continuous Delivery), som gør det muligt for udviklingsteams at automatisere deres arbejdsgange, herunder build-, test- og deployment-pipeline.

En ulempe ved at bruge GitHub Actions er, at dine logfiler er offentlige, og at alle kan få adgang til dem med de nødvendige tilladelser.

For at forhindre, at følsomme data bliver afsløret i GitHub Actions-logfiler, bør du bruge krypterede miljøvariabler til at gemme følsomme data sikkert. Disse krypterede miljøvariabler er kendt som GitHub Actions Secrets.

Denne artikel viser dig, hvordan du kan bruge GitHub Actions Secrets til at forhindre, at følsomme oplysninger vises i dine GitHub Actions-logfiler.

Forudsætninger:

For at følge denne vejledning:

Sådan holder du dine GitHub-actionsprotokoller sikre

Når du opbygger arbejdsgange ved hjælp af GitHub Actions, kan enhver besøgende på dit repository se logfilerne, så de bør ikke indeholde følsomme oplysninger. Du kan dog ikke bare slette dine tokens, adgangskoder og andre følsomme oplysninger – du har brug for dem til test og for at din app kan fungere korrekt.

Løsningen er at skjule dem med workflow-kommandoen ::add-mask::, som sætter en stjerne (*) i stedet for de følsomme data, som den anvendes på.

I det følgende afsnit vises det, hvordan du maskerer en log.

Sådan maskerer du logs

Åbn først det klonede arkiv i din teksteditor.

Opret mappen .github/workflows/ i roden af dit arkiv for at gemme dine arbejdsgangsfiler. Opret derefter en ny fil med navnet hide-secrets.yml i mappen .github/workflows, og tilføj følgende kode til den:

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"

Indtast ændringerne, og skub dem til dit GitHub-repositorium. Den opdaterede GitHub Actions-workflow er aktiv og udløses, når du skubber en ny ændring.

Åbn dit repository på GitHub, og vælg fanen Actions (handlinger) for at se logfilerne. Dit workflow bør se ud som følger:

Vis et eksempel på dit workflow
Vis et eksempel på dit workflow

Når du undersøger logfilerne for arbejdsgangen, finder du verySecretToken -strengen udskrevet i logfilerne. Klik på dit workflow og derefter på opgavenavnet (print-secret-token) for at få vist loggen. Den skal se således ud:

Undersøg dine GitHub-actionslogs
Undersøg dine GitHub-aktionslogs

Hvis du vil skjule den, skal du bruge kommandoen ::add-mask::, redigere filen hide-secrets.yml og tilføje et nyt trin til jobbet print-secret-token:

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"

Du bør tilføje Add Mask -trinnet øverst, da maskering først anvendes, når ::add-mask:: er kørt. Hvis du sætter den hemmelige verySecretToken ind før Add Mask -trinnet, vil den stadig blive vist som umaskeret. Så for at sikre, at værdien er maskeret, er det vigtigt at bruge ::add-mask:: så hurtigt som muligt.

Når du har commitet og offentliggjort dine ændringer til dit GitHub-repositorium, vil strengen verySecretToken blive erstattet af stjerner (*), hvor som helst den vises i dine logfiler:

Lav plain tekster
Lav plain tekster

Mens dette løser maskeringsproblemet, introducerer det et nyt problem. Din verySecretToken er stadig i workflowfilen, så alle med adgang til kildekoden kan se den.

En anden ulempe ved at maskere almindelig tekst er, at hvis man blot maskerer en del af et ord, skjules alle forekomster af det. Tag f.eks. følgende sætning: “Programmering er fantastisk, men mine mest produktive dage er de dage, hvor jeg ikke skriver et program.” Hvis du maskerer ordet “program”, vil det ikke kun maskere ordet i slutningen af sætningen, men også alle andre steder, hvor det forekommer, f.eks. i “programmering”.

Hvis du forsøger at maskere almindelig tekst, ender du med noget, der ligner dette:

Problem med at maskere almindelig tekst
Problem med at maskere almindelig tekst

En bedre tilgang til at skjule følsomme data i GitHub Actions logs er at bruge GitHub Actions Secrets, som demonstreret i følgende afsnit.

Sådan bruger du GitHub Actions Secrets

Du kan bruge GitHub Actions Secrets til at gemme alle private data, du ønsker at bruge i dit GitHub Actions-arbejdsflow. Secrets oprettes som nøgle/værdipar på repository- eller organisationsniveau.

Mens det pågældende repository kun kan få adgang til hemmeligheder, der er oprettet på repository-niveau, deles hemmeligheder, der er oprettet på organisationsniveau, af alle repositories i en organisation.

Hemmeligheder, der oprettes på repository-niveau, kan bruges i handlinger af alle, der har tilladelser til en samarbejdspartnerrolle. Du kan til enhver tid ændre værdien af dine secrets. Secrets kan dog ikke bruges med arbejdsgange fra et forked repository.

Følgende retningslinjer gælder for navngivning af secrets:

  • Hemmelige navne må ikke indeholde mellemrum.
  • Hemmelige navne er ikke små- og store bogstaver følsomme.
  • Hemmelige navne kan ikke begynde med et tal.
  • Hemmelige navne må ikke begynde med præfikset GITHUB_.
  • Hemmelige navne skal være entydige – secrets med samme navn kan ikke eksistere på samme niveau.

Du kan bruge disse secrets i GitHub-arbejdsgangen for handlinger ved blot at tilføje secrets før dit hemmelige navn som en YML-variabel, som vist nedenfor:

${{ secrets.MY_SECRET_TOKEN }}

Du kan også maskere secrets for at opnå større sikkerhed, som vist i følgende afsnit.

Sådan maskerer du secrets

Først skal du oprette en GitHub-hemmelighed. I dit repository på GitHub skal du klikke på fanen Settings, vælge Secrets > Actions i venstre sidebjælke og derefter klikke på Ny repository secret for at tilføje en ny hemmelighed:

Opret en ny repository secret
Opret en ny repository-hemmelighed

Giv din secret et navn og en hemmelig værdi, og klik derefter på Add secret:

Tilføj en ny GitHub Secret
Tilføj en ny GitHub-hemmelighed

Nu, hvor du har oprettet din secret og givet den værdien verySecretToken, kan du bruge den i din arbejdsgangsfil. Åbn din hide-secrets.yml-fil, og lav følgende ændringer:

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 }}"

Den eneste forskel mellem dette og den tidligere kode er, at du erstattede secret tokenet med din nyligt oprettede GitHub secret “${{ secrets.MY_SECRET_TOKEN }}.”

Når du har commitet koden og skubbet ændringerne til dit GitHub-repositorium, er dine secrets maskeret:

Maskerede GitHub-Actions Secrets
Maskerede GitHub-Actions Secrets

Opsummering

Du må ikke afsløre følsomme oplysninger i dine GitHub Action-logs. Maskering af almindelig tekst er en måde at skjule data på, men alle, der får adgang til dine arbejdsgangsfiler, kan se de oplysninger, du forsøger at skjule.

Som denne vejledning viser, er GitHub Actions Secret en langt mere sikker tilgang til at beskytte dine følsomme data og derefter maskere dem.

Læs vores dokumentation for at få mere at vide om at bruge Git hos Kinsta. Prøv vores Applikation Hosting gratis nu.

Jeremy Holcombe Kinsta

Indholds- og marketingredaktør hos Kinsta, WordPress webudvikler og indholdsforfatter. Ud over alt WordPress nyder jeg stranden, golf og film. Jeg har også problemer med høje mennesker ;).