DevOps-bootcamp · leksjon

Sikker håndtering av legitimasjon

Implementer anbefalte fremgangsmåter for sikker håndtering av legitimasjon for skyleverandører og sensitive data i automatiserte Terraform-pipelines.

Leksjon 3 av 410 trinn

Sikker håndtering av legitimasjon er en gratis leksjon i DevOps-bootcamp på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i DevOps-bootcamp, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Sikre legitimasjonsdata i CI/CD

Når dere automatiserer infrastruktur med Terraform i en CI/CD-pipeline, trenger pipelinen tilgang til kontoer hos skyleverandører. Sikker håndtering av disse legitimasjonsdataene er avgjørende for å hindre uautorisert tilgang og datainnbrudd.

Tenk på det som å gi en robot nøklene til huset deres. Dere vil sørge for at bare riktig robot får de riktige nøklene, og at nøklene er beskyttet.

Unngå hardkoding av hemmeligheter

En vanlig feil er å legge inn sensitiv informasjon, for eksempel API-nøkler eller passord, direkte i Terraform-konfigurasjonsfiler eller CI/CD-skript. Dette kalles hardkoding.

  • Sikkerhetsrisiko: Hemmeligheter blir en del av kildekodehistorikken (for eksempel Git).
  • Eksponering: Alle som har tilgang til repositoriet, kan se dem.
  • Vedlikehold: Hvis en hemmelighet skal endres, må koden endres og distribueres på nytt.

Miljøvariabler (grunnleggende)

For lokal utvikling eller enkle scenarier er miljøvariabler en enkel måte å oppgi legitimasjonsdata på uten hardkoding. Dere angir dem i skallet før Terraform kjøres.

Dette er bedre enn hardkoding, men er ikke ideelt for delte CI/CD-pipelines, siden hemmeligheter fortsatt kan vises i logger eller prosesslister hvis de ikke håndteres forsiktig.

export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="abcdef..."
terraform plan

Hemmelighetshåndtering i CI/CD-plattformer

Moderne CI/CD-plattformer tilbyr innebygde funksjoner for håndtering av hemmeligheter. Disse gjør det mulig å lagre sensitive data på en sikker måte i selve plattformen, separat fra kodelageret.

Når pipelinen kjøres, settes disse hemmelighetene inn i byggemiljøet som miljøvariabler eller filer, men de eksponeres aldri i logger eller lagres i repositoriet.

Eksempel på GitHub Actions-hemmeligheter

GitHub Actions har en egen seksjon for hemmeligheter i repositoriet. Dere kan legge dem til via Settings > Secrets and variables > Actions > New repository secret.

I arbeidsflytfilen kan dere deretter referere til disse hemmelighetene ved å bruke konteksten secrets. De maskeres automatisk i logger.

name: Deploy Infra
on: [push]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1
    - name: Terraform Init
      run: terraform init

Cloud IAM-roller for pipelines

Den sikreste metoden for autentisering av CI/CD er å bruke IAM-roller eller tjenestekontoer som skyleverandøren tilbyr.

I stedet for tilgangsnøkler med lang levetid antar CI/CD-pipelinen en midlertidig rolle med bestemte tillatelser, ofte ved å bruke OpenID Connect (OIDC) for tillitsforhold. Dette eliminerer behovet for å lagre statiske legitimasjonsdata helt.

Eksempel på AWS IAM-rolle + OIDC

For AWS kan dere konfigurere en IAM-rolle som GitHub Actions-arbeidsflyten kan anta direkte ved hjelp av OIDC. Det betyr at ingen AWS-tilgangsnøkler lagres noe sted!

Dere definerer en tillitspolicy for rollen, som tillater GitHub sin OIDC-leverandør å anta den basert på bestemte vilkår (for eksempel repositoriet eller grenen).

resource "aws_iam_role" "github_actions_role" {
  name = "github-actions-oidc-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          Federated = "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
        }
        Action = "sts:AssumeRoleWithWebIdentity"
        Condition = {
          StringEquals = {
            "token.actions.githubusercontent.com:aud" : "sts.amazonaws.com"
          }
          StringLike = {
            "token.actions.githubusercontent.com:sub" : "repo:your-org/your-repo:*"
          }
        }
      }
    ]
  })
}

Sensitive Terraform-resultater

Noen ganger kan Terraform-resultater inneholde sensitive data, for eksempel databasepassord eller private nøkler. Dere bør merke disse resultatene som sensitive.

Når et resultat er merket som sensitivt, skjuler Terraform verdien i CLI-resultatet og tilstandsfilen når den vises. Dette bidrar til å hindre utilsiktet eksponering.

output "database_password" {
  value       = aws_db_instance.main.password
  description = "The database root password."
  sensitive   = true
}

Kontroll av sikre legitimasjonsdata

Hvilken metode regnes generelt som den sikreste for at CI/CD-pipelines skal autentisere seg mot skyleverandører, uten behov for å lagre statiske legitimasjonsdata med lang levetid?

Oppsummering: Sikker legitimasjon

De har lært viktige strategier for håndtering av sensitive data i Terraform CI/CD-pipelines:

  • Unngå hardkoding: Legg aldri hemmeligheter direkte inn i koden.
  • Bruk CI/CD-hemmeligheter: Bruk plattformspesifikke løsninger for håndtering av hemmeligheter for statiske legitimasjonsdata.
  • Bruk IAM-roller/OIDC: For best mulig sikkerhet bør dere bruke IAM-roller hos skyleverandøren med OIDC for å anta midlertidige tillatelser uten å lagre nøkler.
  • Merk sensitive resultater: Beskytt sensitive data som eksponeres av Terraform-resultater.

Disse fremgangsmåtene er avgjørende for å opprettholde en robust og sikker infrastruktur.

Gratis å komme i gang

Lær deg DevOps-bootcamp med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
142
Leksjoner
568

Ofte stilte spørsmål

Er leksjonen «Sikker håndtering av legitimasjon» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien DevOps-bootcamp, inkludert «Sikker håndtering av legitimasjon», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Hva lærer jeg i «Sikker håndtering av legitimasjon»?

Implementer anbefalte fremgangsmåter for sikker håndtering av legitimasjon for skyleverandører og sensitive data i automatiserte Terraform-pipelines. Du øver på DevOps-bootcamp med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med DevOps-bootcamp?

Ingen tidligere erfaring er nødvendig. DevOps-bootcamp på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Sikker håndtering av legitimasjon»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne DevOps-bootcamp-leksjonen?

Ja. Alle DevOps-bootcamp-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Terraform i CI/CD-pipelines
  2. Automatisere `plan` og `apply`
  3. Sikker håndtering av legitimasjon
  4. GitOps og automatisering av pull requests
← Tilbake til DevOps-bootcamp