Cloud & IT Cert Prep · Lektion

Sikker håndtering af secrets og miljøvariabler

Undgå hardkodede secrets i kildekoden ved at bruge secrets-managere (Vault, AWS Secrets Manager) og injektion af miljøvariabler under kørsel.

Lektion 2 af 413 trin

Sikker håndtering af secrets og miljøvariabler er en gratis Cloud & IT Cert Prep-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cloud & IT Cert Prep, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.

Problemet med hardkodede hemmeligheder

Hardkodede hemmeligheder — API-nøgler, databaseadgangskoder, private TLS-nøgler og OAuth-tokens, der er indlejret direkte i kildekoden — er en af de mest almindelige og forebyggelige sikkerhedssårbarheder. Hemmeligheder i kildekoden bliver eksponeret i versionsstyringens historik (selv efter sletning), er synlige for alle udviklere med adgang til repositoriet og lækkes ofte, når repositorier ved en fejl gøres offentligt tilgængelige. Værktøjer som GitGuardian og truffleHog scanner løbende platforme som GitHub for lækkede hemmeligheder.

# DANGEROUS: hardcoded secret in source code
# db_password = 'P@ssw0rd#2026'
# api_key = 'sk-live-abc123xyz789'
# aws_secret = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'

# These secrets are now:
# - In git history (even if later deleted)
# - Visible to all repo contributors
# - Potentially in CI/CD logs
# - Often leaked when repos go public accidentally

Miljøvariabler: Bedre, men ikke nok

Miljøvariabler fjerner hemmeligheder fra kildekoden ved at indsætte dem under kørsel via værtsoperativsystemet eller containerorkestratoren. Applikationen læser os.environ['DB_PASSWORD'] i stedet for en hardkodet værdi. Det er bedre end hardkodning, men miljøvariabler har svagheder: De vises i proceslister, nedarves af underprocesser, ender ofte i nedbrudsdumps og fejlfindingslogge og kræver manuel rotation. De er velegnede til udvikling, men er ikke tilstrækkelige alene til håndtering af hemmeligheder i produktion.

# Environment variable pattern:
# In .env file (NEVER commit to git):
# DB_PASSWORD=P@ssw0rd#2026
# API_KEY=sk-live-abc123xyz789

# In .gitignore:
# .env
# *.env
# .env.*

# In application code:
# db_password = os.environ.get('DB_PASSWORD')
# api_key = os.environ.get('API_KEY')

# Risk: env vars visible in 'ps aux' output,
# inherited by child processes, appear in /proc/<pid>/environ

Dedikerede systemer til håndtering af hemmeligheder

Systemer til håndtering af hemmeligheder er specialbyggede systemer til lagring, rotation og kontrol af adgang til hemmeligheder. Blandt de førende løsninger er HashiCorp Vault (open source og enterprise), AWS Secrets Manager, Azure Key Vault og Google Cloud Secret Manager. Applikationer godkender sig over for systemet til håndtering af hemmeligheder under kørsel, henter hemmeligheden og bruger den — ingen hemmeligheder gemmes nogensinde på disk eller i miljøvariabler. Al adgang logges, så det er muligt at kontrollere, hvem der har tilgået hvilken hemmelighed og hvornår.

# HashiCorp Vault secret retrieval (conceptual):
# Application authenticates to Vault using:
#   - AWS IAM role (in cloud environments)
#   - Kubernetes service account token
#   - AppRole credentials

# After authentication, retrieve secret:
# vault kv get -field=password secret/prod/database

# In application (Python SDK):
# client = hvac.Client(url='https://vault.company.com')
# client.auth.aws.iam_login(role='prod-app')
# secret = client.secrets.kv.read_secret('prod/database')
# db_password = secret['data']['password']

Automatisk rotation af hemmeligheder

En vigtig fordel ved systemer til håndtering af hemmeligheder frem for miljøvariabler er automatisk rotation. AWS Secrets Manager kan automatisk rotere RDS-databaseadgangskoder efter en plan (f.eks. hver 30. dag) uden at kræve, at applikationen implementeres igen. Systemet til håndtering af hemmeligheder opdaterer adgangskoden i databasen og den gemte hemmelighed samtidigt. Applikationer, der henter hemmeligheder ved hver forbindelse, modtager automatisk de nye legitimationsoplysninger. Det eliminerer den almindelige praksis med »permanente« adgangskoder til tjenestekonti, som aldrig roteres.

# AWS Secrets Manager rotation configuration:
# Secret:         prod/app-database-credentials
# Rotation:       enabled
# Frequency:      every 30 days
# Lambda function: SecretsManager-MyRDSRotation

# Rotation process:
# 1. Lambda creates new DB password
# 2. Updates secret in Secrets Manager
# 3. Updates password on RDS instance
# 4. Tests new credentials work
# 5. Deprecates old credentials
# Application: always calls GetSecretValue at runtime -> gets fresh value

.gitignore-forsvaret

Den første forsvarslinje mod committede hemmeligheder er en korrekt vedligeholdt .gitignore-fil, der udelukker alle filer, som kan indeholde hemmeligheder. .gitignore forhindrer dog kun fremtidige commits — hemmeligheder, der allerede er committet, bliver i git-historikken. Hvis hemmeligheder ved en fejl bliver committet, skal de straks behandles som kompromitterede: rotér hemmeligheden, og brug derefter eventuelt værktøjer som git filter-repo til at omskrive historikken (påkrævet af hensyn til compliance, men utilstrækkeligt alene, eftersom hemmeligheden allerede kan være blevet hentet ud).

# Recommended .gitignore entries for secret files:
# .env
# .env.*
# *.pem
# *.key
# *.p12
# *.pfx
# credentials.json
# service_account*.json
# secrets.yaml
# config/secrets.yml
# terraform.tfvars  (may contain cloud credentials)
# .aws/credentials

# Pre-commit hook to scan for secrets before commit:
# pre-commit install
# hook: detect-secrets / gitleaks / truffleHog

Hemmeligheder i infrastruktur som kode

Filer med infrastruktur som kode (IaC) (Terraform, CloudFormation, Kubernetes-manifester) indeholder ofte hemmeligheder — forbindelsesstrenge til databaser, API-nøgler i deklarationer af miljøvariabler og TLS-certifikater. Disse filer bliver ofte committet til versionsstyring, hvilket skaber risiko for eksponering af hemmeligheder. Løsninger omfatter dynamiske hemmeligheder i Vault (Vault genererer en kortlivet legitimationsoplysning specifikt til hver Terraform-kørsel), Kubernetes Secrets (gemmes i etcd og skal krypteres under lagring) samt external-secrets-operator, der synkroniserer fra en hemmelighedshåndtering til Kubernetes under kørsel.

Princippet om mindst mulige privilegier for hemmeligheder

Hver applikation eller tjeneste bør kun have adgang til de hemmeligheder, den specifikt kræver — princippet om mindst mulige privilegier anvendt på hemmeligheder. En webapplikation har brug for databaseadgangskoden, men ikke den private CA-nøgle. Et rapporteringsjob har brug for skrivebeskyttede databaselegitimationsoplysninger, ikke skriveadgang. Hemmelighedshåndteringer håndhæver dette gennem adgangspolitikker, der angiver, hvilke identiteter (IAM-roller, tjenestekonti, AppRoles) der må læse hvilke hemmeligheder, mens al adgang logges af hensyn til revision.

# Vault policy: web application can read DB password only
# policy name: web-app-policy
# path 'secret/prod/database' {
#   capabilities = ['read']
# }
# path 'secret/prod/tls-certs/*' {
#   capabilities = []  # DENY - app does not need TLS keys
# }

# This policy is assigned to the web app's AppRole.
# The reporting service gets a separate policy with
# only 'secret/prod/reporting-db-readonly' access.

Dynamiske hemmeligheder

Dynamiske hemmeligheder genereres efter behov til en specifik anmoder og udløber automatisk. Vault kan generere en midlertidig databaselegitimationsoplysning, der er gyldig i 1 time og knyttet til den specifikke tjeneste, der anmodede om den. Efter udløbet tilbagekaldes legitimationsoplysningen automatisk af databasen. Denne tilgang betyder, at der ikke findes langtidsholdbare statiske legitimationsoplysninger, som kan stjæles — selv hvis en angriber opsnapper en dynamisk legitimationsoplysning, udløber den hurtigt og er knyttet til den anmodende identitet i revisionsloggene.

# Vault dynamic secrets: temporary DB credentials
# Application calls Vault to get a DB credential:
# vault read database/creds/web-app-role
#
# Vault response:
# username: v-web-app-x7k2m-1234567890  (unique, temporary)
# password: A1b2C3d4E5f6G7h8            (randomly generated)
# lease_duration: 1h                     (auto-expires)
#
# After 1 hour, Vault instructs DB to revoke this user.
# No static password ever exists for the attacker to steal.

Hemmeligheder i CI/CD-arbejdsgange

CI/CD-arbejdsgange kræver ofte hemmeligheder — legitimationsoplysninger til cloududbydere ved udrulning, tokens til Docker-registre og signeringsnøgler. Gem aldrig hemmeligheder i arbejdsgangsscripts eller konfigurationsfiler. Brug i stedet platformens indbyggede hemmelighedslager (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials Store), eller hent hemmeligheder fra et centralt lager under kørsel ved hjælp af en maskinidentitet. Markér hemmelighedsvariabler som maskeret i loggene for at forhindre utilsigtet eksponering i build-outputtet.

# GitHub Actions: using secrets in pipeline
# secrets.yml in GitHub Settings -> Secrets (encrypted storage)
# Secret: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

# In .github/workflows/deploy.yml:
# env:
#   AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
#   AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

# Best practice: use OIDC federation instead
# GitHub -> AWS trust relationship via OIDC token
# -> No static AWS keys needed at all

Revision af adgang til hemmeligheder

Hemmelighedshåndteringer leverer omfattende revisionslogge over hver hændelse med adgang til en hemmelighed: hvilken identitet der tilgik hvilken hemmelighed, fra hvilken IP-adresse, på hvilket tidspunkt, og om adgangen lykkedes eller blev afvist. Disse logge er afgørende for compliance (SOC 2, PCI-DSS) og håndtering af hændelser. Når en legitimationsoplysning mistænkes for at være kompromitteret, viser revisionsloggene, hvilke systemer der tilgik den, og hvornår — så det hurtigt bliver muligt at identificere potentielt berørte systemer og træffe beslutninger om begrænsning af skaden.

Pre-commit-hooks til forebyggelse af hemmeligheder

Pre-commit-hooks er scripts, der automatisk køres, før hvert git-commit færdiggøres, så hemmeligheder kan opdages, før de kommer ind i versionsstyringens historik. Værktøjer som detect-secrets (Yelp), GitLeaks og git-secrets (AWS) integreres som pre-commit-hooks og scanner de staged filer for mønstre, der matcher API-nøgler, forbindelsesstrenge, private nøgler og JWT-tokens. Hvis der opdages en hemmelighed, afvises committet, og udvikleren bliver bedt om at fjerne legitimationsoplysningen. pre-commit-rammeværket gør det nemt at tilføje og dele hook-konfigurationer på tværs af teams.

# Installing detect-secrets as pre-commit hook:
# 1. Install: pip install detect-secrets
# 2. Create baseline: detect-secrets scan > .secrets.baseline
# 3. Add to .pre-commit-config.yaml:
#    repos:
#      - repo: https://github.com/Yelp/detect-secrets
#        rev: v1.4.0
#        hooks:
#          - id: detect-secrets
#            args: ['--baseline', '.secrets.baseline']
# 4. Install hooks: pre-commit install

# Now every commit attempt is scanned:
# git commit -m 'add config'
# -> detect-secrets runs
# -> if AWS key pattern found: COMMIT BLOCKED
# -> developer must remove secret and use secrets manager

Hurtigt tjek

Afprøv din forståelse af CompTIA Security+-begreberne (SY0-701) fra denne lektion.

Opsummering af lektionen

I denne lektion har du lært, at hardkodede hemmeligheder i kildekode skal fjernes og erstattes med hemmelighedshåndteringer som Vault eller AWS Secrets Manager, at automatisk rotation fjerner langtidsholdbare legitimationsoplysninger, som angribere kan misbruge selv efter det første kompromis, og at dynamiske hemmeligheder og adgangspolitikker baseret på mindst mulige privilegier begrænser værdien af enhver enkelt hemmelighed, der bliver eksponeret. Som det næste ser vi på afhængighedssikkerhed og analyse af softwaresammensætning.

Gratis at komme i gang

Lær Cloud & IT Cert Prep med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
150
Lektioner
600

Ofte stillede spørgsmål

Er lektionen “Sikker håndtering af secrets og miljøvariabler” gratis?

Ja — hele teksten til “Sikker håndtering af secrets og miljøvariabler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cloud & IT Cert Prep-kurset, skal du opgradere til CoddyKit PRO. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Sikker håndtering af secrets og miljøvariabler”?

Undgå hardkodede secrets i kildekoden ved at bruge secrets-managere (Vault, AWS Secrets Manager) og injektion af miljøvariabler under kørsel. Du øver dig i Cloud & IT Cert Prep med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Cloud & IT Cert Prep?

Der kræves ingen tidligere erfaring. Cloud & IT Cert Prep på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Sikker håndtering af secrets og miljøvariabler”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Cloud & IT Cert Prep-lektion?

Ja. Alle Cloud & IT Cert Prep-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Inputvalidering og outputkodning
  2. Sikker håndtering af secrets og miljøvariabler
  3. Sikkerhed for afhængigheder og software composition analysis
  4. DevSecOps: Flyt sikkerheden til venstre i pipelines
← Tilbage til Cloud & IT Cert Prep