GitOps för Azure Kubernetes Service

Kubernetes Service
GitHub

Företagsåtgärder måste följa många regelkrav, regler för datasekretess och säkerhetsstandarder. Säkerhet bör följa principen om åtkomst med lägsta behörighet. Granskningar måste spåra vem som har ändrat vad och när i alla produktionssystem.

Organisationer som använder Kubernetes för att köra sina programarbetsbelastningar måste följa dessa krav när de skyddar sina kluster. Kubernetes är inte säkert som standard, men operatörer kan använda dess funktioner för att göra det säkert.

GitOps är ett operativt ramverk för kubernetes-klusterhantering och programleverans. GitOps tillämpar utvecklingsmetoder som versionskontroll, samarbete, efterlevnad och kontinuerlig integrering/kontinuerlig distribution (CI/CD) för infrastrukturautomatisering.

Kubernetes beskriver allt från klustertillstånd till programdistributioner deklarativt med kod. I GitOps använder IaC (infrastruktur som kod) kod för att deklarera önskat tillstånd för infrastrukturkomponenter som virtuella datorer, nätverk och brandväggar. Den här koden är versionskontrollerad och granskningsbar.

GitOps för Kubernetes placerar det önskade tillståndet för klusterinfrastrukturen under versionskontroll. En komponent i klustret synkroniserar koden kontinuerligt. I stället för att ha direkt åtkomst till klustret sker de flesta åtgärder via kodändringar som kan granskas och granskas. Den här metoden stöder säkerhetsprincipen för åtkomst med lägsta behörighet.

GitOps tillämpar inte bara principer i klustret, utan hjälper även till att stödja säkerheten genom att ge feedback om föreslagna principändringar. Tidig feedback är enklare för utvecklare och minskar risker och kostnader.

I den här artikeln beskrivs en lösning för att använda GitOps med ett AKS-kluster (Azure Kubernetes Services). Den här lösningen ger fullständiga granskningsfunktioner, principframtvingande och tidig feedback.

Potentiella användningsfall

Den här lösningen gynnar alla organisationer som vill ha fördelarna med att distribuera program och infrastruktur som kod, med en spårningslogg för varje ändring. Lösningen är särskilt lämplig för strikt reglerade branscher som försäkring, bank och finans.

Arkitektur

Diagram of GitOps for AKS, with GitHub source control, Flux GitOps controller, Syncier Security Tower GitOps control kit, and Gatekeeper admission controller.

Ladda ned en Visio-fil med den här arkitekturen.

Den här lösningen följer en stark GitOps-metod.

  1. Den enda sanningspunkten är den GitHub lagringsplats som innehåller de etablerade AKS-klusterkonfigurationerna. Lagringsplatsen lagrar alla AKS-programmanifest och önskade tillstånd för klusterinfrastruktur. Varje ändring av klustret sker under versionskontroll. GitHub funktioner:

    • Säkerställer granskning av ändringar.
    • Förhindrar oavsiktliga eller obehöriga ändringar.
    • Framtvingar önskade kvalitetskontroller.
  2. Flux är GitOps-operatorn och kontrollanten och är den enda komponenten som kan göra ändringar i klustret. Flux hämtar önskade tillståndsändringar för klustret från GitHub och synkroniserar dem till AKS. Flux:

    • Hämtar önskade ändringar från GitHub.
    • Identifierar eventuella konfigurationsavvikelser.
    • Stäm av tillståndet i Kubernetes-klustret.
    • Hanterar Gatekeeper och programmen.
    • Uppdateringar sig själv.
  3. Open Policy Agent (OPA) Gatekeeper tillämpar principer med en verifierande webhook för antagning. Gatekeeper validerar ändringar i klusterkonfigurationen mot etablerade principer och tillämpar endast ändringarna om de följer principerna.

  4. Syncier Security Tower är ett GitOps-kontrollpaket som ger en översikt över alla AKS-kluster och hjälper till att hantera principer. Syncier Security Tower:

    • Monterar alla klusteravbildningar i en översikt som visar vilka versioner som distribueras och identifierar inaktuella avbildningar.
    • Ger feedback om principöverträdelser via feedback från pull-begäran (PR) innan ändringar tillämpas.
    • Introducerar riskgodkännande när principer inte kan tillämpas av goda skäl.
    • Tillhandahåller säkerhetsprinciper för OPA Gatekeeper.

Komponenter

Den här lösningen använder följande komponenter:

  • Azure Kubernetes Service (AKS) är en mycket tillgänglig, säker och fullständigt hanterad Kubernetes-tjänst i Azure. I AKS hanterar Azure Kubernetes API-servern och klusterägare och -operatörer får åtkomst till och hanterar Kubernetes-noderna och nodpoolerna.

  • GitHub är en kodvärdplattform för versionskontroll och samarbete. GitHub erbjuder git-distribuerad versionskontroll, källkodshantering och andra funktioner.

  • Flux är en samling verktyg med öppen källkod för att hålla Kubernetes-kluster synkroniserade med konfigurationskällor som Git-lagringsplatser. Flux automatiserar konfigurationsuppdateringar när det finns ny kod att distribuera.

  • OPA Gatekeeper är ett projekt som integrerar OPA-antagningskontrollanten med öppen källkod med Kubernetes. Kubernetes-antagningskontrollanter tillämpar principer på objekt under skapande-, uppdaterings- och borttagningsåtgärder och är grundläggande för kubernetes-principframtvingande.

  • Syncier Security Tower är ett verktyg som Syncier har utvecklat och gör offentligt tillgängligt för att hjälpa dig att lösa utmaningar med säkerhet och efterlevnad i GitOps. För att säkerställa att endast betrodda avbildningar körs i klustret levereras Syncier Security Tower med en uppsättning principer för bästa praxis som är grupperade efter välkända säkerhetsstandarder.

Alternativ

I den här arkitekturen är Flux den GitOps-operator som stäms av klustrets önskade tillstånd på Git-lagringsplatsen med de distribuerade resurserna i AKS-klustret. Ett alternativ till Flux är Argo CD-projektet med öppen källkod, ett deklarativt GitOps-verktyg för kontinuerlig leverans för Kubernetes. Både Argo CD och Flux används ofta och listas som CNCF-inkubationsprojekt (Cloud Native Computing Foundation).

Överväganden

Följande överväganden gäller för den här lösningen.

Skalbarhet

GitOps har många fördelar, men i takt med att klustrets landskap växer ökar även antalet lagringsplatser. Den här lösningen hjälper dig att möta utmaningar som:

  • Ha en översikt över alla miljöer och kluster.
  • Spåra kritiska bilder.
  • Kontrollera att vissa principer är aktiva i varje kluster.

Säkerhet

Den här lösningen ger flera säkerhetsrelaterade fördelar. Med GitOps-metoden får enskilda utvecklare eller administratörer inte direkt åtkomst till Kubernetes-klustren för att tillämpa ändringar eller uppdateringar. I stället skickar användarna ändringar till en Git-lagringsplats och GitOps-operatorn Flux läser dem i det här fallet och tillämpar dem på klustret. Den här metoden följer rekommenderade säkerhetsmetoder för lägsta behörighet genom att inte ge DevOps-team skrivbehörighet till Kubernetes-API:et. I diagnostik- eller felsökningsscenarier kan du bevilja klusterbehörigheter under en begränsad tid från fall till fall.

För att säkerställa att AKS-klustren använder rekommenderade säkerhetsmetoder tillämpar den här lösningen OPA-principer med en verifierande webhook för antagning. Syncier Security Tower innehåller en uppsättning principer baserade på Kubernetes-säkerhetsstandarder som du kan etablera i ett klusteromfång. Syncier Security Tower ger tidig feedback via PR-granskning om föreslagna Kubernetes-manifest bryter mot principerna.

Utöver uppgiften att konfigurera lagringsplatsbehörigheter bör du överväga att implementera följande säkerhetsåtgärder i Git-lagringsplatser som synkroniseras till AKS-kluster:

  • Grenskydd: Skydda de grenar som representerar kubernetes-klustrens tillstånd från att skicka ändringar direkt till dem. Kräv att varje ändring ska föreslås av en pull-begäran som granskas av minst en annan person. Använd även pr för att utföra automatiska kontroller. Syncier Security Tower verifierar till exempel Kubernetes-manifest som en pull-begäran skapar eller ändrar. Syncier Security Tower kontrollerar ändringar mot etablerade principer innan de kan synkroniseras till klustret.

  • PR-granskning: Kräv att PR:er har minst en granskare för att tillämpa principen med fyra ögon. Du kan också använda funktionen GitHub kodägare för att definiera personer eller team som ansvarar för att granska specifika filer på en lagringsplats.

  • Oföränderlig historik: Tillåt endast nya incheckningar utöver befintliga ändringar. Oföränderlig historik är särskilt viktig i granskningssyfte.

  • Ytterligare säkerhetsåtgärder: Kräv att dina GitHub användare aktiverar tvåfaktorautentisering. Tillåt också endast signerade incheckningar, som inte kan ändras i efterhand.

Operations

GitOps kan öka DevOps-produktiviteten. En av de mest användbara funktionerna är möjligheten att snabbt återställa ändringar som beter sig oväntat, bara genom att utföra Git-åtgärder. Incheckningsdiagrammet innehåller fortfarande alla incheckningar, så det kan hjälpa till med analysen efter döden.

GitOps-team hanterar ofta flera miljöer för samma program. Det är vanligt att flera steg i ett program distribueras till olika Kubernetes-kluster eller namnrymder. Git-lagringsplatsen, som är den enda sanningskällan, visar vilka versioner av program som för närvarande distribueras till ett kluster.

Syncier Security Tower extraherar den här informationen från lagringsplatsen och visar den på ett användarvänligt sätt. En översikt visar vilka containeravbildningar och versioner som distribueras i varje miljö.

DevOps-team kan använda avancerade Syncier Security Tower-funktioner för att få insikter om vem som har ändrat vad och när i ett program, eller bläddra och filtrera baserat på faktorer som ändringstyp eller resurstyp. Syncier Security Tower tillhandahåller ett kontrollcenter för att aktivera principer och jämföra efterlevnadstillstånd över olika kluster.

Distribuera det här scenariot

Utför följande steg för att etablera en GitOps-konfiguration för AKS:

  1. Skapa ett AKS-kluster genom att följa snabbstartsguiden genom att Anslut till klustret. Stoppa innan du kör programmet och distribuera inte något i klustret ännu.

  2. Installera Flux CLI genom att följa installationsanvisningarna för Flux.

  3. Kör följande kommandon i ett Bash-gränssnitt. Ange variablerna GITHUB_TOKEN, GITHUB_USERoch GITHUB_REPO enligt din miljö.

    export GITHUB_TOKEN="<your token>"
    export GITHUB_USER="<your username>"
    export GITHUB_REPO="<your repository>"
    
    flux bootstrap github \
       --owner=$GITHUB_USER \
       --repository=$GITHUB_REPO \
       --branch=main \
       --path=./cluster \
       --personal
    
    git clone https://github.com/$GITHUB_USER/$GITHUB_REPO
    cd $GITHUB_REPO
    
    mkdir -p .securitytower
    cat << EOF > .securitytower/cluster.yaml
    apiVersion: securitytower.io/v1alpha1
    kind: Cluster
    metadata:
       name: $GITHUB_REPO
    spec:
       policies:
          path: /policies
    EOF
    
    flux create kustomization policies \
       --source=flux-system \
       --path="./policies" \
       --prune=true \
       --validation=none \
       --interval=1m \
       --export > ./cluster/policies.yaml
    
    git add .
    git commit -m "Create Syncier Security Tower cluster config and add policy Kustomization"
    git push
    
    kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.4/deploy/gatekeeper.yaml
    
  4. Installera Gatekeeper genom att följa installationsguiden för Gatekeeper. Information om hur du konfigurerar Gatekeeper korrekt finns i Framtvinga principer med OPA Gatekeeper.

  5. Installera Syncier Security Tower på lagringsplatsen från GitHub Marketplace.

  6. Om du vill konfigurera alla nödvändiga konfigurationsfiler följer du Komma igång guide för Syncier Security Tower.

Nu har du etablerat en GitOps-installation som körs. Här kan göra du följande:

  • Lägg till fler kluster.
  • Använd Syncier Security Tower för att få en översikt över de bilder som dina kluster använder.
  • Etablera principer med Syncier Security Tower för att uppfylla dina säkerhetsstandarder.

Prissättning

  • Normalt beräknar du kostnader med hjälp av priskalkylatorn för Azure.

  • AKS erbjuder kostnadsfri klusterhantering. Kostnaderna är begränsade till de beräknings-, lagrings- och nätverksresurser som AKS använder för att vara värd för noder. Se prissättningen för virtuella Azure-datorer eller Azure Container Instances för att granska specifik prisinformation för varje beräkningstjänst.

  • GitHub erbjuder en kostnadsfri tjänst, men om du vill använda avancerade säkerhetsrelaterade funktioner som kodägare eller nödvändiga granskare behöver du teamplanen. Mer information finns på prissättningssidan för GitHub.

Nästa steg