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
- Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, můžete ho vytvořit pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal.
- Potřebujete doplněk Azure Policy pro AKS nainstalovaný v clusteru AKS.
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:
- Na webu Azure Portal přejděte ke službě Azure Policy s názvem Policy.
- V levém podokně stránky Azure Policy vyberte Definice.
- V části Kategorie vyberte
Kubernetes
. - 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 .
- Vyberte Přiřadit.
- Nastavte obor na skupinu prostředků clusteru AKS s povoleným doplňkem Azure Policy.
- Vyberte stránku Parametry a aktualizujte efekt tak
audit
, abydeny
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. - 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: true
zabezpeč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í.
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
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.
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
Vytvořte pod pomocí
kubectl apply
příkazu a zadejte název manifestu YAML.kubectl apply -f nginx-unprivileged.yaml
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í.
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:
- Na webu Azure Portal přejděte do podokna Zásady .
- Vyberte zadání.
- Vyberte tlačítko ... vedle standardních standardů zabezpečení podů clusteru Kubernetes pro iniciativu úloh založenou na Linuxu.
- Vyberte Odstranit přiřazení.
Další kroky
Další informace o tom, jak Azure Policy funguje, najdete v následujících článcích:
Azure Kubernetes Service