CI/CD-pipelines har tillgång till dina hemligheter, din kod och dina servrar. Ändå ser jag sällan att de härdas ordentligt.
1. Pinning av actions till SHA
# Dåligt — en komprometterad tag kan injicera kod
- uses: actions/checkout@v4
# Bra — fixerad till exakt commit
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
Varför? Om någon kapar actions/checkout och uppdaterar taggen v4 körs deras kod i din pipeline.
2. Minsta möjliga behörigheter
permissions:
contents: read # Bara läsning av repo
packages: write # Skriv bara till packages
Standardbehörigheterna är alldeles för breda. Begränsa alltid.
3. Miljöskydd för deployment
Konfigurera i GitHub → Settings → Environments:
- Required reviewers — manuellt godkännande innan deploy
- Deployment branches — bara
mainfår deploya - Wait timer — fördröjning innan deploy startar
jobs:
deploy:
environment:
name: production
url: https://example.se
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65
- run: ./deploy.sh
4. Rotera hemligheter regelbundet
GitHub Secrets är bekvämt, men:
- Rotera alla tokens minst var 90:e dag
- Använd korta livslängder där det går (OIDC tokens)
- Logga aldrig hemligheter —
add-maskom det behövs
- run: echo "::add-mask::${{ secrets.API_TOKEN }}"
5. Skanna beroenden
- name: Dependency audit
run: |
pip install pip-audit
pip-audit --requirement requirements.txt --fix --dry-run
6. Begränsa self-hosted runners
Self-hosted runners kör kod på din infrastruktur. Om du använder dem:
- Kör aldrig runners på servrar med känslig data
- Använd ephemeral runners som raderas efter varje jobb
- Isolera runners i egna VMs eller containers
En komprometterad pipeline kan vara värre än ett dataintrång. Behandla den därefter.