Cloud & IT Cert Prep · Lektion

Säker hantering av hemligheter och miljövariabler

Undvik hårdkodade hemligheter i källkoden genom att använda secrets managers (Vault, AWS Secrets Manager) och injicering av miljövariabler under körning.

Lektion 2 av 413 steg

Säker hantering av hemligheter och miljövariabler är en gratis lektion i Cloud & IT Cert Prep på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Cloud & IT Cert Prep, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.

Problemet med hårdkodade hemligheter

Hårdkodade hemligheter — API-nycklar, databaslösenord, privata TLS-nycklar och OAuth-token som bäddas in direkt i källkoden — är en av de vanligaste och mest förebyggbara säkerhetssårbarheterna. Hemligheter i källkoden exponeras i versionshanteringshistoriken (även efter att de har tagits bort), är synliga för alla utvecklare med åtkomst till kodarkivet och läcker ofta när kodarkiv av misstag görs offentliga. Verktyg som GitGuardian och truffleHog söker kontinuerligt efter läckta hemligheter på plattformar som GitHub.

# 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: bättre, men inte tillräckligt

Miljövariabler tar bort hemligheter från källkoden genom att injicera dem vid körning via värdoperativsystemet eller containerorkestreraren. Programmet läser os.environ['DB_PASSWORD'] i stället för ett hårdkodat värde. Detta är bättre än hårdkodning, men miljövariabler har svagheter: de visas i processlistor, ärvs av underordnade processer, hamnar ofta i kraschdumpfiler och felsökningsloggar och kräver manuell rotation. De lämpar sig för utveckling, men räcker inte ensamma för hantering av produktionshemligheter.

# 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

Dedikerade system för hemlighetshantering

System för hemlighetshantering är specialbyggda system för lagring, rotation och granskning av åtkomst till hemligheter. Ledande lösningar är bland andra HashiCorp Vault (öppen källkod och enterprise), AWS Secrets Manager, Azure Key Vault och Google Cloud Secret Manager. Program autentiserar sig mot systemet för hemlighetshantering vid körning, hämtar hemligheten och använder den — inga hemligheter lagras någonsin på disk eller i miljövariabler. All åtkomst loggas, vilket möjliggör granskning av vem som fick åtkomst till vilken hemlighet och nä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 av hemligheter

En viktig fördel med system för hemlighetshantering jämfört med miljövariabler är automatisk rotation. AWS Secrets Manager kan automatiskt rotera lösenord för RDS-databaser enligt ett schema (till exempel var 30:e dag) utan att programmet behöver distribueras på nytt. Systemet för hemlighetshantering uppdaterar lösenordet i databasen och den lagrade hemligheten samtidigt. Program som hämtar hemligheter vid varje anslutning får automatiskt den nya autentiseringsuppgiften. Detta eliminerar den vanliga användningen av ”permanenta” lösenord för tjänstekonton som aldrig roteras.

# 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

Försvaret .gitignore

Den första försvarslinjen mot incheckade hemligheter är en korrekt underhållen .gitignore-fil som utesluter alla filer som kan innehålla hemligheter. .gitignore förhindrar dock endast framtida incheckningar – hemligheter som redan har checkats in finns kvar i gits historik. Om hemligheter råkar checkas in måste de omedelbart betraktas som röjda: rotera hemligheten och använd därefter eventuellt verktyg som git filter-repo för att skriva om historiken (vilket krävs för efterlevnad, men inte är tillräckligt i sig eftersom hemligheten redan kan ha extraherats).

# 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

Hemligheter i Infrastructure as Code

Filer för Infrastructure as Code (IaC) (Terraform, CloudFormation och Kubernetes-manifest) innehåller ofta hemligheter – anslutningssträngar till databaser, API-nycklar i deklarationer av miljövariabler och TLS-certifikat. Dessa filer checkas ofta in i versionshantering, vilket skapar risk för att hemligheter röjs. Lösningar omfattar dynamiska hemligheter i Vault (Vault genererar en kortlivad autentiseringsuppgift specifikt för varje Terraform-körning), Kubernetes Secrets (lagras i etcd och måste krypteras vid lagring) samt external-secrets-operator, som synkroniserar från en hemlighetshanterare till Kubernetes vid körning.

Principen om minsta privilegium för hemligheter

Varje applikation eller tjänst ska endast få åtkomst till de hemligheter som den specifikt behöver – principen om minsta privilegium tillämpad på hemligheter. En webbapplikation behöver databaslösenordet men inte den privata CA-nyckeln. Ett rapporteringsjobb behöver skrivskyddade databasautentiseringsuppgifter, inte skrivåtkomst. Hemlighetshanterare tillämpar detta genom åtkomstprinciper som anger vilka identiteter (IAM-roller, servicekonton och AppRoles) som får läsa vilka hemligheter, samtidigt som all åtkomst loggas för 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.

Dynamiska hemligheter

Dynamiska hemligheter genereras vid behov för en specifik begärande och upphör automatiskt att gälla. Vault kan generera en tillfällig databasautentiseringsuppgift som är giltig i en timme och kopplad till den specifika tjänst som begärde den. När den upphör att gälla återkallas autentiseringsuppgiften automatiskt av databasen. Det innebär att det inte finns några statiska autentiseringsuppgifter med lång giltighet som kan stjälas – även om en angripare fångar upp en dynamisk autentiseringsuppgift upphör den snabbt att gälla och är kopplad till den begärande identiteten i granskningsloggarna.

# 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.

Hemligheter i CI/CD-pipelines

CI/CD-pipelines behöver ofta hemligheter – autentiseringsuppgifter för molnleverantörer vid driftsättning, token för Docker-register och signeringsnycklar. Lagra aldrig hemligheter i pipelineskript eller konfigurationsfiler. Använd i stället pipelineplattformens inbyggda hemlighetslagring (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials Store) eller hämta hemligheter från ett centralt valv vid körning med hjälp av en maskinidentitet. Markera hemliga variabler som maskerade i loggar för att förhindra att de råkar exponeras i byggutdata.

# 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

Granskning av åtkomst till hemligheter

Hemlighetshanterare tillhandahåller omfattande granskningsloggar över varje åtkomsthändelse för hemligheter: vilken identitet som fick åtkomst till vilken hemlighet, från vilken IP-adress, vid vilken tidpunkt samt om åtkomsten lyckades eller nekades. Dessa loggar är avgörande för efterlevnad (SOC 2, PCI-DSS) och incidenthantering. När en autentiseringsuppgift misstänks ha röjts visar granskningsloggarna vilka system som använde den och när – vilket möjliggör snabb identifiering av potentiellt berörda system och beslut om begränsningsåtgärder.

Pre-commit-hookar för att förhindra hemligheter

Pre-commit-hookar är skript som körs automatiskt innan varje git-incheckning slutförs, vilket gör det möjligt att upptäcka hemligheter innan de hamnar i versionshanteringshistoriken. Verktyg som detect-secrets (Yelp), GitLeaks och git-secrets (AWS) integreras som pre-commit-hookar och söker igenom uppstegade filer efter mönster som motsvarar API-nycklar, anslutningssträngar, privata nycklar och JWT-token. Om en hemlighet upptäcks avvisas incheckningen och utvecklaren uppmanas att ta bort autentiseringsuppgiften. pre-commit-ramverket gör det enkelt att lägga till och dela hook-konfigurationer mellan team.

# 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

Snabbkontroll

Testa er förståelse av CompTIA Security+-koncepten (SY0-701) från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har ni lärt er att hårdkodade hemligheter i källkod måste elimineras och ersättas med hemlighetshanterare som Vault eller AWS Secrets Manager, att automatisk rotation tar bort långlivade autentiseringsuppgifter som angripare kan missbruka även efter en första kompromettering, samt att dynamiska hemligheter och åtkomstprinciper enligt minsta privilegium minimerar värdet av varje enskild hemlighet som röjs. Härnäst utforskar vi beroendesäkerhet och analys av programvarukomposition.

Gratis att börja

Lär dig Cloud & IT Cert Prep med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
150
Lektioner
600

Vanliga frågor

Är lektionen ”Säker hantering av hemligheter och miljövariabler” gratis?

Ja – hela texten till ”Säker hantering av hemligheter och miljövariabler” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Cloud & IT Cert Prep, kan Ni uppgradera till CoddyKit PRO. Kursen i Cloud & IT Cert Prep innehåller totalt 4 lektioner.

Vad lär jag mig i ”Säker hantering av hemligheter och miljövariabler”?

Undvik hårdkodade hemligheter i källkoden genom att använda secrets managers (Vault, AWS Secrets Manager) och injicering av miljövariabler under körning. Ni övar på Cloud & IT Cert Prep med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Cloud & IT Cert Prep?

Du behöver inga förkunskaper. Utbildningen i Cloud & IT Cert Prep på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Säker hantering av hemligheter och miljövariabler”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Cloud & IT Cert Prep-lektionen?

Ja. Varje Cloud & IT Cert Prep-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Indatavalidering och kodning av utdata
  2. Säker hantering av hemligheter och miljövariabler
  3. Beroendesäkerhet och analys av programvarukomposition
  4. DevSecOps: flytta säkerheten åt vänster i pipelinerna
← Tillbaka till Cloud & IT Cert Prep