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:
- Se till att du har ett GitHub-konto.
- Ha ett befintligt GitHub-arkiv. För den här handledningen kan du klona det här demo-arkivet.
- Följ de här instruktionerna för att klona demoregistret.
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:
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:
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:
Ä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:
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:
Ge hemligheten ett namn och ett hemligt värde och klicka sedan på Lägg till 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:
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.
Lämna ett svar