Udviklere hardkoder stadig API-tokens, adgangskoder og andre legitimationsoplysninger i kildekoden eller .env-filer og pusher dem til Git. Det sker i sideprojekter såvel som i produktionssystemer.

Mønsteret er velkendt: Hvis der ikke er nogen ligetil måde at levere hemmeligheder til automatiserings- og udrulningspipelines på, begynder Git at ligne det eneste holdbare sted at opbevare dem. Teams bilder sig ind, at de vil rydde op i det senere. I praksis er det, når en hemmelighed først er committed, næsten umuligt at fjerne den helt fra historikken.

Hvorfor Git er farligt til hemmeligheder

Git gemmer hver eneste revision. Du kan slette et token fra toppen af en branch, men ældre commits indeholder det stadig. Kloner, forks, spejle, CI-checkouts og sikkerhedskopier spreder alle denne historik. I det øjeblik en hemmelighed lander i et commit, bør du antage, at den har forladt din direkte kontrol.

Hvem der kan læse repositoryet, har også en tendens til at være bredere end folk forventer — eksterne leverandører, kortsigtede bidragydere, interne forks — enhver af dem kan se legitimationsoplysninger, de aldrig var beregnet til at have.

GitHub og GitLab udfører scanning efter hemmeligheder. Hvis en udbyder flager et token, skal du behandle det som lækket: tilbagekald det og roter alt, hvad der var afhængigt af det.

Hvor hemmeligheder hører hjemme i stedet for Git

En hemmelighed er ikke bare endnu en fil i træet. Det er en legitimationsoplysning, der bør leve uden for repositoryet, kun kunne læses af de rette aktører, understøtte rotation og differentiere sig pr. miljø (udvikling, staging, produktion).

Selvhosting af Vault eller OpenBao er en valid tilgang, men det tilføjer infrastruktur, der skal drives, patches og overvåges.

Semaphore indeholder et Key Store, der integreres direkte i automatiseringen. Du kan opbevare hemmeligheder i enten:

  • Semaphores krypterede lager (standard)
  • En ekstern backend, såsom:
    • HashiCorp Vault — gem legitimationsoplysninger i din egen Vault-udrulning i stedet for i Semaphores database; værdier læses, når et job behøver dem (Pro).
    • OpenBao — det community-vedligeholdte, Vault-kompatible fork; forbinder gennem samme integrationssti som Vault (Pro).
    • Devolutions Server — brug Devolutions som backend til hemmeligheder for Enterprise-installationer, i samme ånd som Vault (Enterprise).

Brug det indbyggede lager for en hurtig løsning, eller tilslut dit eksisterende hemmelighedssystem på virksomhedsniveau. Begge integreres med arbejdsgange uden brugerdefineret limkode.

Hvad du kan gemme i Key Store

  • API-tokens
  • SSH-nøgler
  • Adgangskoder
  • Miljøvariabler
  • JSON og andre konfigurationsnyttelaster

Værdier ligger aldrig i repositoryet; de leveres til jobs under kørsel. Du kan bruge forskellige poster pr. miljø og begrænse, hvem eller hvilke arbejdsgange der må bruge hver hemmelighed.

Hvordan det fungerer i praksis

Du opretter en post i Key Store, knytter hemmeligheder til den og refererer til denne post fra din opgavekonfiguration. Semaphore opløser og injicerer værdierne, når jobbet kører.

For eksempel eksisterer adgangsnøgler under en AWS-udrulning kun i det pågældende jobs levetid på den agent, der udfører det. Udviklere behøver ikke en kopi i deres lokale checkout, og intet følsomt behøver at blive committed til Git.

Eksempel

Åbn Secrets → New Secret i brugerfladen, og definer variabler såsom:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

Referer til hemmeligheden ved navn i din arbejdsgang. Semaphore udstiller værdierne som miljøvariabler for det pågældende job:

blocks:
  - name: Deploy
    task:
      secrets:
        - name: aws-credentials
      jobs:
        - name: deploy
          commands:
            - aws s3 sync ./dist s3://my-bucket

For SSH gemmes den private nøgle i en hemmelighed; Semaphore kan placere den under ~/.ssh/ for jobbet:

blocks:
  - name: Deploy via SSH
    task:
      secrets:
        - name: production-ssh-key
      jobs:
        - name: deploy
          commands:
            - ssh deploy@production-server "cd /app && git pull"

Key Store vs. andre tilgange

Metode Sikker Synlighed Kan tilbagekaldes
.env i Git Hele teamet Nej
GitHub Actions Secrets ⚠️ Afhænger af opsætning Ja
Semaphore Key Store Afgrænset (Scoped) Ja

Du får også rotation uden at redigere applikationskode, adgangsgrænser efter rolle eller team samt en ren adskillelse mellem miljøer.

Konklusion

Behandl ethvert token, der er blevet committed til Git, som kompromitteret. Historikken forgrener sig på tværs af maskiner og organisationer; hver ekstra kopi er endnu et sted, en angriber kan lede.

Key Store holder materiale ude af repositories, leverer det kun ved udførelsestidspunktet og giver dig håndtag til rotation og adgangskontrol. For automatisering baseret på Ansible, Terraform, OpenTofu eller PowerShell er dette ikke valgfri pynt — det er minimumskravet for at operere sikkert.

Du vil måske finde dette interessant