Zabezpečte svůj cluster pomocí Azure Policy

Pro zlepšení zabezpečení clusteru Azure Kubernetes Service (AKS) můžete použít a vynutilit integrované zásady zabezpečení v clusteru pomocí Azure Policy. Azure Policy pomáhá vyhovět standardům organizace a hodnotit dodržování předpisů v rozsahu. Po instalaci doplňku Azure Policy pro AKSmůžete na svůj cluster použít jednotlivé definice zásad nebo skupiny definic zásad s názvem iniciativy (někdy označované jako policysets). Úplný seznam definic zásad AKS a iniciativ najdete v tématu Azure Policy integrovaných definic pro AKS .

V tomto článku se dozvíte, jak ve svém clusteru použít definice zásad a ověřit, jestli se tato přiřazení uplatňují.

Požadavky

Přiřazení předdefinované definice zásady nebo iniciativy

Chcete-li použít definici nebo iniciativu zásady, použijte Azure Portal.

  1. Přejděte ke službě Azure Policy v Azure Portal.
  2. V levém podokně stránky Azure Policy vyberte definice.
  3. V části kategorie vyberte Kubernetes .
  4. Vyberte definici nebo iniciativu zásady, kterou chcete použít. V tomto příkladu vyberte Kubernetes cluster pod security baseline standards for Linux-based workloads iniciativu.
  5. Vyberte Přiřadit.
  6. Nastavte obor na skupinu prostředků clusteru AKS s povoleným doplňkem Azure Policy.
  7. Vyberte stránku parametry a aktualizujte efekt z audit na na deny , chcete-li zablokovat nová nasazení porušující základní iniciativu. Můžete také přidat další obory názvů pro vyloučení ze vyhodnocení. V tomto příkladu ponechte výchozí hodnoty.
  8. Vyberte možnost zkontrolovat + vytvořit a vytvořit a odešlete přiřazení zásady.

Ověřte, že je spuštěný Azure Policy.

Potvrďte přiřazení zásad k vašemu clusteru spuštěním následujících kroků:

kubectl get constrainttemplates

Poznámka

Synchronizace zásad může trvat až 20 minut, než se synchronizuje do každého clusteru.

Výstup by měl vypadat přibližně takto:

$ kubectl get constrainttemplate
NAME                                     AGE
k8sazureallowedcapabilities              23m
k8sazureallowedusersgroups               23m
k8sazureblockhostnamespace               23m
k8sazurecontainerallowedimages           23m
k8sazurecontainerallowedports            23m
k8sazurecontainerlimits                  23m
k8sazurecontainernoprivilege             23m
k8sazurecontainernoprivilegeescalation   23m
k8sazureenforceapparmor                  23m
k8sazurehostfilesystem                   23m
k8sazurehostnetworkingports              23m
k8sazurereadonlyrootfilesystem           23m
k8sazureserviceallowedports              23m

Ověření odmítnutí privilegovaného pod

Pojďme nejdřív otestovat, co se stane, když naplánujete pod, pomocí kontextu zabezpečení privileged: true . Tento kontext zabezpečení přestupňování oprávnění pod. Iniciativa nepovoluje privilegované lusky, takže žádost bude odepřena v důsledku odmítnutí nasazení.

Vytvořte soubor s názvem nginx-privileged.yaml a vložte následující YAML manifest:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-privileged
spec:
  containers:
    - name: nginx-privileged
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      securityContext:
        privileged: true

Vytvořte pod příkazem kubectl Apply a zadejte název manifestu YAML:

kubectl apply -f nginx-privileged.yaml

Podle očekávání se nepovedlo naplánovat na, jak je znázorněno v následujícím příkladu výstupu:

$ kubectl apply -f privileged.yaml

Error from server ([denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}): error when creating "privileged.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}

V poli se nedosáhnou fáze plánování, takže před přesunutím na neexistují žádné prostředky, které by bylo možné odstranit.

Vytvoření testu neprivilegovaného pod

V předchozím příkladu se image kontejneru automaticky pokusila použít kořen k navázání NGINX na port 80. Tuto žádost zamítla iniciativa zásad, takže se na začátku nespustí. Zkusíme teď spustit stejný NGINX pod bez privilegovaného přístupu.

Vytvořte soubor s názvem nginx-unprivileged.yaml a vložte následující YAML manifest:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-unprivileged
spec:
  containers:
    - name: nginx-unprivileged
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine

Vytvořte pod pomocí příkazu kubectl Applu a zadejte název manifestu YAML:

kubectl apply -f nginx-unprivileged.yaml

V části se úspěšně naplánovalo. Když zkontrolujete stav pod, pomocí příkazu kubectl Get lusky je spuštěný:

$ kubectl get pods

NAME                 READY   STATUS    RESTARTS   AGE
nginx-unprivileged   1/1     Running   0          18s

Tento příklad ukazuje základní iniciativu ovlivňující jenom nasazení, která porušují zásady v kolekci. Povolená nasazení budou nadále fungovat.

Pomocí příkazu kubectl Delete odstraňte Nginx s neprivilegovaným příkazem a zadejte název vašeho manifestu YAML:

kubectl delete -f nginx-unprivileged.yaml

Zakázat zásadu nebo iniciativu

Odebrání základní iniciativy:

  1. Přejděte do podokna zásady na Azure Portal.
  2. V levém podokně vyberte přiřazení .
  3. Klikněte na tlačítko ... vedle Kubernetes cluster pod security baseline standards for Linux-based workloads iniciativy.
  4. Vyberte Odstranit přiřazení.

Další kroky

Další informace o tom, jak Azure Policy funguje: