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ørg for, at du har en GitHub-konto.
- Du skal have et eksisterende GitHub-repositorium. Til denne vejledning kan du klone dette demo-repositorium.
- Følg disse instruktioner for at klone demo-repositoriet.
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:
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:
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:
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:
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:
Giv din secret et navn og en hemmelig værdi, og klik derefter på Add secret:
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:
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.
Skriv et svar