GitHub Actions är GitHub’s inbyggda plattform för kontinuerlig integrering och kontinuerlig leverans (CI/CD). Som ett resultat kan utvecklingsteam automatisera sitt arbetsflöde, inklusive bygg-, test- och distribuerings-pipeline.

En nackdel med att använda GitHub Actions är att dina loggar är offentliga och att vem som helst kan komma åt dem med nödvändiga behörigheter.

För att förhindra att känsliga data exponeras i GitHub Actions loggar bör du exempelvis använda krypterade miljövariabler. Då kan du lagra känsliga data på ett säkert sätt. Dessa krypterade miljövariabler kallas GitHub Actions Secrets.

Den här artikeln visar hur du använder GitHub Actions Secrets för att förhindra att känslig information visas i dina GitHub Actions-loggar.

Förutsättningar:

För att kunna följa den här handledningen:

Hur du håller dina GitHub Actions-loggar säkra

När du bygger arbetsflöden med hjälp av GitHub Actions kan alla besökare på ditt arkiv se loggarna. De bör därför inte innehålla känslig information. Du kan dock inte bara radera dina tokens, lösenord och annan känslig information – du behöver dem för testning och för att din app ska fungera korrekt.

Lösningen är att exempelvis dölja dem med arbetsflödes-kommandot ::add-mask::, som sätter en asterisk (*) i stället för de känsliga uppgifterna som det tillämpas på.

I följande avsnitt visas hur du maskerar en logg.

Hur man maskerar loggar

Öppna först det klonade arkivet i din textredigerare.

Skapa sedan katalogen .github/workflows/ i roten av ditt arkiv för att lagra dina arbetsflödes-filer. Generera därefter en ny fil som heter hide-secrets.yml i katalogen .github/workflows och lägg till följande kod i 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"

Lägg in följande kod i koden: ”Commit the changes and push them to your GitHub repository”. Det uppdaterade arbetsflödet GitHub Actions är aktivt och utlöses när du aktiverar en ny ändring.

Öppna ditt arkiv på GitHub och välj fliken Åtgärder för att visa loggarna. Ditt arbetsflöde bör sedan se ut på följande sätt:

Förhandsgranska ditt arbetsflöde
Förhandsgranska ditt arbetsflöde

När du granskar loggarna för arbetsflödet hittar du verySecretToken-strängen som skrivs ut i loggarna. Klicka på ditt arbetsflöde och sedan på uppgiftsnamnet (print-secret-token) för att visa loggen. Den ska se ut så här:

Undersök dina GitHub-åtgärdsloggar
Undersök dina GitHub Actions-loggar

Använd kommandot add-mask

Om du vill dölja den använder du kommandot ::add-mask::, redigerar filen hide-secrets.yml och lägger till ett nytt steg i 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 lägga till steget Add Mask högst upp. Maskering tillämpas nämligen endast efter att ::add-mask:: har körts. Om du lägger hemligheten verySecretToken före steget Add Mask kommer den fortfarande att visas som omaskerad. För att säkerställa att värdet maskeras är det därför viktigt att använda ::add-mask:: så snart som möjligt.

När du väl har lagt in och publicerat dina ändringar i ditt GitHub-arkiv kommer strängen verySecretToken att ersättas med asterisker (*) varhelst den dyker upp i dina loggar:

Skapa rena texter
Skapa rena texter

Även om detta löser maskerings-problemet så introducerar det ett nytt problem. Din verySecretToken finns fortfarande i arbetsflödes-filen. Som ett resultat kan alla som har tillgång till källkoden se den.

Det finns även andra nackdelar med att maskera vanlig text. Om man exempelvis bara maskerar en del av ett ord så döljer man alla förekomster av det. Ta exempelvis följande mening: ”Programmering är bra, men mina mest produktiva dagar är de dagar då jag inte skriver något program.” Om du maskerar ordet ”program” maskeras inte bara ordet i slutet av meningen utan även varhelst det förekommer, bland annat i ”programmering.”

Om du försöker att maskera vanlig text får du något liknande:

Problem med att maskera vanlig text
Problem med att maskera vanlig text

Ett bättre sätt att dölja känsliga data i GitHub Actions-loggarna är att använda GitHub Actions Secrets, vilket visas i följande avsnitt.

Hur man använder GitHub Actions Secrets

Du kan använda GitHub Actions Secrets för att lagra privata data som du vill använda i ditt arbetsflöde för GitHub Actions. Hemligheter skapas som nyckel/värdepar på arkiv- eller organisationsnivå.

Det arkivet kan endast få tillgång till hemligheter som skapats på arkivnivå. Hemligheter som har skapats på organisationsnivå visas dock i alla arkiv-utrymmen inom en organisation.

Hemligheter som skapas på arkiv-nivå kan användas i åtgärder av alla som har behörighet för samarbets-rollen. Du kan när som helst ändra värdet på dina hemligheter. Hemligheter kan dock inte användas med arbetsflöden från ett förgrenat arkiv.

Följande riktlinjer gäller för namngivning av hemligheter:

  • Hemliga namn får inte innehålla mellanslag.
  • Inga hemliga namn är skiftlägeskänsliga.
  • De kan inte börja med ett nummer.
  • Ett hemligt namn får inte börja med prefixet GITHUB_.
  • Hemliga namn måste vara unika – hemligheter med samma namn kan inte finnas på samma nivå.

Du kan använda dessa hemligheter i arbetsflödet för GitHub Actions. Lägg bara till secrets före ditt hemliga namn som en YML-variabel, som visas nedan:

${{ secrets.MY_SECRET_TOKEN }}

Du kan dessutom maskera hemligheter för en ökad säkerhet, vilket visas i följande avsnitt.

Hur man maskerar hemligheter

Skapa först en GitHub-hemlighet. I ditt arkiv på GitHub klickar du på fliken Inställningar, väljer Hemligheter > Åtgärder i den vänstra sidofältet och klickar sedan på Ny arkivhemlighet för att lägga till en ny hemlighet:

Skapa en ny arkivhemlighet
Skapa en ny arkivhemlighet

Ge hemligheten ett namn och ett hemligt värde och klicka sedan på Lägg till hemlighet:

Lägg till en ny GitHub-hemlighet
Lägg till en ny GitHub-hemlighet

Nu när du har skapat din hemlighet och gett den värdet verySecretToken kan du använda den i din arbetsflödes-fil. Öppna filen hide-secrets.yml och gör följande ändringar:

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 enda skillnaden mellan detta och den tidigare koden är att du ersatte secret token med din nyligen skapade GitHub-hemlighet ”${{ secrets.MY_SECRET_TOKEN }}.”

När du väl har lagt in koden och flyttat ändringarna till ditt GitHub-arkiv är dina hemligheter maskerade:

Maskerade GitHub Actions-hemligheter
Maskerade GitHub Actions-hemligheter

Sammanfattning

Du får inte avslöja någon känslig information i dina GitHub Action-loggar. Maskering av vanlig text är visserligen ett sätt att dölja data. Vem som helst som får tillgång till dina arbetsflödesfiler kan dock se den information som du försöker dölja.

Som den här handledningen visar är GitHub Actions Secret ett mycket säkrare sätt att skydda dina känsliga uppgifter och sedan maskera dem.

Läs vår dokumentation för att lära dig mer om hur du använder Git på Kinsta. Prova vår applikationshosting kostnadsfritt nu.

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).