Zabezpečení clusterů Azure Kubernetes Service (AKS) pomocí Azure Policy

Pomocí služby Azure Policy můžete použít a vynutit integrované zásady zabezpečení v clusterech Azure Kubernetes Service (AKS). Azure Policy pomáhá vynucovat standardy organizace a vyhodnocovat dodržování předpisů ve velkém měřítku. Po instalaci doplňku Azure Policy pro AKS můžete u clusteru použít jednotlivé definice zásad nebo skupiny definic zásad označovaných jako iniciativy (někdy označované jako sady zásad). Úplný seznam zásad AKS a definic iniciativ najdete v tématu Předdefinované definice azure Policy pro AKS .

V tomto článku se dozvíte, jak použít definice zásad pro váš cluster a ověřit, že se tato přiřazení vynucují.

Požadavky

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

Definici zásad nebo iniciativu můžete použít na webu Azure Portal pomocí následujícího postupu:

  1. Na webu Azure Portal přejděte ke službě Azure Policy s názvem Policy.
  2. V levém podokně stránky Azure Policy vyberte Definice.
  3. V části Kategorie vyberte Kubernetes.
  4. Zvolte definici zásad nebo iniciativu, kterou chcete použít. V tomto příkladu vyberte standardy standardních hodnot zabezpečení podů clusteru Kubernetes pro iniciativu založené na úlohách založených na Linuxu .
  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 takaudit, aby deny blokovala nová nasazení, která porušují iniciativu směrného plánu. Můžete také přidat další obory názvů, které se mají vyloučit z vyhodnocení. V tomto příkladu ponechte výchozí hodnoty.
  8. Výběrem možnosti Zkontrolovat a vytvořit vytvořit>odešlete přiřazení zásady.

Vytvoření a přiřazení vlastní definice zásad

Vlastní zásady umožňují definovat pravidla pro používání Azure. Můžete například vynutit následující typy pravidel:

  • Postupy zabezpečení
  • Správa nákladů
  • Pravidla specifická pro organizaci (například pro pojmenování nebo umístění)

Než vytvoříte vlastní zásadu, projděte si seznam běžných vzorů a ukázek a zjistěte, jestli už je váš případ pokrytý.

Definice vlastních zásad se zapisují ve formátu JSON. Další informace o vytváření vlastních zásad najdete v tématu Struktura definic služby Azure Policy a Vytvoření vlastní definice zásad.

Poznámka:

Azure Policy teď využívá novou vlastnost označovanou jako templateInfo , která umožňuje definovat typ zdroje pro šablonu omezení. Při definování templateInfo v definicích zásad nemusíte definovat vlastnosti constraintTemplate nebo constraint . Stále potřebujete definovat skupiny a typy apiGroups. Další informace o tom najdete v tématu Principy efektů azure Policy.

Jakmile vytvoříte vlastní definici zásad, přečtěte si téma Přiřazení definice zásad pro podrobný postup přiřazení zásad ke clusteru Kubernetes.

Ověření, že je spuštěná služba Azure Policy

  • Pomocí následujícího kubectl get příkazu ověřte, že se přiřazení zásad použijí pro váš cluster.

    kubectl get constrainttemplates
    

    Poznámka:

    Synchronizace přiřazení zásad do jednotlivých clusterů může trvat až 20 minut .

    Výstup by se měl podobat následujícímu příkladu výstupu:

    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í zamítnutí privilegovaného podu

Nejprve otestujeme, co se stane, když naplánujete pod s kontextem privileged: truezabezpečení . Tento kontext zabezpečení eskaluje oprávnění podu. Iniciativa nepovoluje privilegované pody, takže požadavek je odepřen, což vede k zamítnutí nasazení.

  1. Vytvořte soubor s názvem nginx-privileged.yaml a vložte do následujícího manifestu YAML.

    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
    
  2. Vytvořte pod pomocí kubectl apply příkazu a zadejte název manifestu YAML.

    kubectl apply -f nginx-privileged.yaml
    

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

    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}
    

    Pod se nedosahuje fáze plánování, takže před přechodem se nedají odstranit žádné prostředky.

Vytvoření neprivilegovaného podu

V předchozím příkladu se image kontejneru automaticky pokusila použít kořen k vytvoření vazby NGINX na port 80. Iniciativa zásad tuto žádost odmítne, takže se pod nespustí. Teď zkusme spustit stejný pod NGINX bez privilegovaného přístupu.

  1. Vytvořte soubor s názvem nginx-unprivileged.yaml a vložte do následujícího manifestu YAML.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-unprivileged
    spec:
      containers:
        - name: nginx-unprivileged
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    
  2. Vytvořte pod pomocí kubectl apply příkazu a zadejte název manifestu YAML.

    kubectl apply -f nginx-unprivileged.yaml
    
  3. Pomocí příkazu zkontrolujte stav podu kubectl get pods .

    kubectl get pods
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu, který ukazuje, že pod je úspěšně naplánovaný a má stav Spuštěno:

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

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

  4. Odstraňte neprivilegovaný pod NGINX pomocí kubectl delete příkazu a zadejte název manifestu YAML.

    kubectl delete -f nginx-unprivileged.yaml
    

Zakázání zásady nebo iniciativy

Základní iniciativu na webu Azure Portal můžete odebrat pomocí následujícího postupu:

  1. Na webu Azure Portal přejděte do podokna Zásady .
  2. Vyberte zadání.
  3. Vyberte tlačítko ... vedle standardních standardů zabezpečení podů clusteru Kubernetes pro iniciativu úloh založenou na Linuxu.
  4. Vyberte Odstranit přiřazení.

Další kroky

Další informace o tom, jak Azure Policy funguje, najdete v následujících článcích: