Sdílet prostřednictvím


Použití bezpečnostních opatření nasazení k vynucení osvědčených postupů ve službě Azure Kubernetes Service (AKS) (Preview)

V tomto článku se dozvíte, jak pomocí bezpečnostních opatření nasazení vynutit osvědčené postupy v clusteru Azure Kubernetes Service (AKS).

Přehled

V průběhu životního cyklu vývoje dochází k chybám, problémům a dalším problémům, pokud počáteční nasazení prostředků Kubernetes zahrnuje chybné konfigurace. Kvůli usnadnění vývoje Kubernetes nabízí Služba Azure Kubernetes Service (AKS) ochranu nasazení (Preview). Ochrana nasazení vynucuje osvědčené postupy Kubernetes ve vašem clusteru AKS prostřednictvím ovládacích prvků Azure Policy.

Ochrana nasazení nabízí dvě úrovně konfigurace:

  • Warning: Zobrazí v terminálu kódu upozornění, aby vás upozornily na všechny konfigurace clusteru nesplňující požadavky, ale přesto umožňuje požadavek projít.
  • Enforcement: Vynucuje kompatibilní konfigurace tím, že zamítá a ztlumí nasazení, pokud nedodržují osvědčené postupy.

Jakmile nakonfigurujete ochranu nasazení pro upozornění nebo vynucení, nasazení chrání programově vyhodnocuje clustery při vytváření nebo aktualizaci kvůli dodržování předpisů. Ochrana nasazení také zobrazuje agregované informace o dodržování předpisů napříč úlohami na úrovni jednotlivých prostředků prostřednictvím řídicího panelu dodržování předpisů služby Azure Policy na webu Azure Portal nebo v rozhraní příkazového řádku nebo terminálu. Spuštění nekompatibilní úlohy značí, že váš cluster nedodržuje osvědčené postupy a že úlohy v clusteru jsou ohrožené problémy způsobené konfigurací clusteru.

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Požadavky

  • Musíte povolit doplněk Azure Policy pro AKS. Další informace najdete v tématu Povolení služby Azure Policy v clusteru AKS.

  • Pokud chcete nakonfigurovat ochranu nasazení, musíte mít verzi 2.0.0b1 nebo novější rozšíření aks-preview . Pokud chcete rozšíření nainstalovat, přečtěte si téma Instalace rozšíření rozhraní příkazového řádku aks-preview. Doporučujeme také aktualizovat Azure CLI, abyste měli nainstalovanou nejnovější verzi.

  • Pokud chcete vytvořit a upravit konfiguraci pro ochranu nasazení, potřebujete předplatné s následujícími oprávněními ke clusteru AKS:

    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • Musíte zaregistrovat příznak funkce ochrany nasazení. Pokud chcete příznak funkce zaregistrovat, přečtěte si téma Registrace příznaku funkce pro ochranu nasazení.

Instalace rozšíření rozhraní příkazového řádku aks-preview

  1. Nainstalujte rozšíření rozhraní příkazového aks-preview az extension add řádku pomocí příkazu.

    az extension add --name aks-preview
    
  2. Pomocí příkazu aktualizujte rozšíření, abyste měli nainstalovanou az extension update nejnovější verzi.

    az extension update --name aks-preview
    

Registrace příznaku funkce ochrany nasazení

  1. SafeguardsPreview Pomocí příkazu zaregistrujte příznak az feature register funkce.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Zobrazení stavu Zaregistrované trvá několik minut.

  2. Pomocí příkazu ověřte stav az feature show registrace.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Jakmile se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí az provider register příkazu.

    az provider register --namespace Microsoft.ContainerService
    

Zásady ochrany nasazení

Poznámka:

Tyto ReadOnlyRootFilesystem zásady RootfilesystemInitContainers jsou aktuálně dostupné jenom v Linuxu.

Následující tabulka uvádí zásady, které se stanou aktivními, a prostředky Kubernetes, na které cílí, když povolíte ochranu nasazení. Aktuálně dostupné záruky nasazení můžete zobrazit na webu Azure Portal jako definici služby Azure Policy nebo v předdefinovaných definicích služby Azure Kubernetes Service. Záměrem této kolekce je vytvořit společný a obecný seznam osvědčených postupů použitelných pro většinu uživatelů a případů použití.

Zásady ochrany nasazení Cílový prostředek Kubernetes Výsledek změny, pokud je k dispozici
[Preview]: Nejde upravit jednotlivé uzly Uzel
Omezení prostředků procesoru a paměti kontejnerů clusteru Kubernetes by neměla překročit zadaná omezení. Pod Nastaví omezení prostředků procesoru na 500 m, pokud není nastavená a nastaví limity paměti na 500Mi, pokud neexistuje žádná cesta.
[Preview]: Musí mít nastavená pravidla proti spřažení. Nasazení, StatefulSet, ReplicationController, ReplicaSet
[Preview]: Žádné popisky specifické pro AKS Nasazení, stavová sada, replika
Kontejnery clusteru Kubernetes by měly používat jenom povolené image. Pod
[Preview]: Tainty vyhrazeného systémového fondu Uzel Odebere CriticalAddonsOnly taint z fondu uzlů uživatele, pokud není nastavený. AKS používá CriticalAddonsOnly taint k tomu, aby zákaznické pody zůstaly mimo systémový fond. Tato konfigurace zajišťuje jasné oddělení mezi komponentami AKS a pody zákazníků a zabraňuje vyřazení podů zákazníků, které netolerují CriticalAddonsOnly taint.
Ujistěte se, že kontejnery clusteru mají nakonfigurované testy připravenosti nebo aktivity. Pod
Clustery Kubernetes by měly používat třídu StorageClass rozhraní úložiště kontejneru (CSI) StorageClass
[Preview]: Kontejnery clusteru Kubernetes by měly načítat image jenom v případě, že jsou k dispozici tajné kódy pro vyžádání image. Pod
[Preview]: Cluster Kubernetes by měl implementovat přesné rozpočty přerušení podů. Nasazení, ReplikaSet, Stavová sada Nastaví maxUnavailable v prostředku PodDisruptionBudget na 1.
[Preview]: Clusterové služby Kubernetes by měly používat jedinečné selektory. Služba
[Preview]: ReadOnlyRootFilesystem Ve specifikaci podu je nastavená hodnota true Pod Nastaví readOnlyRootFilesystem v specifikaci podu hodnotu true , pokud není nastavená. Tato konfigurace brání kontejnerům v zápisu do kořenového systému souborů.
[Preview]: RootfilesystemInitContainers Ve specifikaci podu je nastavená hodnota true Pod Nastaví rootFilesystemInitContainers v specifikaci podu hodnotu true , pokud není nastavená.
[Preview]: Image kontejneru clusteru Kubernetes by neměly obsahovat nejnovější značku image. Nasazení, StatefulSet, ReplicationController, ReplicaSet
[Preview]: Image kontejneru clusteru Kubernetes musí obsahovat předpřipravený háček. Nasazení, StatefulSet, ReplicationController, ReplicaSet

Pokud chcete odeslat nápad nebo žádost o ochranu nasazení, otevřete problém v úložišti AKS na GitHubu a přidejte [deployment safeguards request] ho na začátek názvu.

Povolení bezpečnostních opatření nasazení

Poznámka:

Pokud jste službu Azure Policy poprvé povolili k používání bezpečnostních opatření nasazení, možná budete muset počkat až 20 minut , než se azure Policy projeví.

Použití úrovně ochrany Enforcement nasazení znamená, že se přihlašujete k blokování a ztlumení nasazení. Než povolíte, zvažte, jak tyto zásady můžou fungovat s clusterem EnforcementAKS.

Povolení bezpečnostních opatření nasazení v novém clusteru

Povolte ochranu nasazení v novém clusteru pomocí az aks create příkazu s příznaky --safeguards-level a --safeguards-version příznakem.

Pokud chcete dostávat upozornění na nedodržování předpisů, nastavte --safeguards-level hodnotu Warning. Pokud chcete zakázat nebo ztlumit všechna nevyhovující nasazení, nastavte ho na Enforcementhodnotu . Chcete-li zobrazit upozornění, nastavte --safeguards-level na hodnotu Upozornění. Pokud chcete zakázat nebo ztlumit všechna nasazení, která nedodržují bezpečnostní opatření nasazení, nastavte --safeguards-level hodnotu Vynucení. Pokud chcete nastavit verzi ochrany nasazení, použijte příznak --safeguards-version . V současné době je V2.0.0 nejnovější verzí bezpečnostních opatření pro nasazení.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

Povolení ochrany nasazení v existujícím clusteru

Povolte ochranu nasazení v existujícím clusteru s povoleným doplňkem Azure Policy pomocí az aks update příkazu s příznakem --safeguards-level a --safeguards-version příznakem. Pokud chcete dostávat upozornění na nedodržování předpisů, nastavte --safeguards-level hodnotu Warning. Pokud chcete zakázat nebo ztlumit všechna nevyhovující nasazení, nastavte ho na Enforcementhodnotu .

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

Pokud chcete aktualizovat úroveň zabezpečení nasazení existujícího clusteru, použijte az aks update příkaz s příznakem nastaveným --safeguards-level na Warning nebo Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

Vyloučení oborů názvů

Z bezpečnostních opatření nasazení můžete také vyloučit určité obory názvů. Když vyloučíte obor názvů, aktivita v daném oboru názvů nemá vliv na upozornění nebo vynucení ochrany nasazení.

Pokud například chcete vyloučit obory ns1 názvů a ns2použijte čárkami oddělený seznam oborů názvů s --safeguards-excluded-ns příznakem, jak je znázorněno v následujícím příkladu:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

Aktualizace verze ochrany nasazení

Poznámka:

v2.0.0 je nejnovější verze bezpečnostních opatření nasazení.

Aktualizujte verzi ochrany nasazení pomocí az aks update příkazu s --safeguards-version příznakem nastaveným na novou verzi. Následující příklad aktualizuje existující cluster tak, aby používal verzi 2.0.0:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

Ověření dodržování předpisů napříč clustery

Po nasazení manifestu Kubernetes se v rozhraní příkazového řádku nebo terminálu zobrazí upozornění nebo potenciální zpráva o odepření, pokud cluster nedodržuje bezpečnostní opatření nasazení, jak je znázorněno v následujících příkladech:

Upozorňující

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

Vynucení

Díky ochranným Enforcement prostředkům nasazení ztlumí úroveň prostředků Kubernetes, pokud je to možné. Vaše prostředky Kubernetes ale stále potřebují předat všechna bezpečnostní opatření, aby se úspěšně nasadily. Pokud nějaké zásady ochrany selžou, váš prostředek se odepře a nebude nasazen.

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

Pokud vaše prostředky Kubernetes splňují příslušné bezpečnostní opatření pro mutaci a splňují všechny ostatní požadavky na ochranu, úspěšně se nasadí, jak je znázorněno v následujícím příkladu:

$ kubectl apply -f pod.yml
pod/my-pod created

Ověření dodržování předpisů napříč clustery pomocí řídicího panelu Azure Policy

Pokud chcete ověřit použití bezpečnostních opatření nasazení a zkontrolovat dodržování předpisů clusteru, přejděte na stránku webu Azure Portal pro váš cluster a vyberte Zásady a pak přejděte na Azure Policy.

V seznamu zásad a iniciativ vyberte iniciativu přidruženou k ochraně nasazení. Zobrazí se řídicí panel zobrazující stav dodržování předpisů v clusteru AKS.

Poznámka:

Aby bylo možné správně vyhodnotit dodržování předpisů v clusteru AKS, musí být iniciativa Azure Policy vymezená na skupinu prostředků vašeho clusteru.

Zakázání bezpečnostních opatření nasazení

Pomocí příkazu zakažte ochranu nasazení v clusteru az aks update a nastavte na --safeguards-level hodnotu Off.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

Často kladené dotazy

Poprvé jsem povolil(a) ochranu nasazení se službou Azure Policy. Proč se mi nezobrazují žádná upozornění? Proč se moje pody neodmítají?

Synchronizace služby Azure Policy s clusterem může trvat až 35 minut, jakmile je poprvé povolená.

Právě jsem se přepnul z Upozornění na Vynucování. Projeví se to okamžitě?

Při přechodu na úroveň ochrany nasazení možná budete muset počkat až 15 minut, než se nová úroveň projeví.

Můžu si vytvořit vlastní mutaci?

Ne. Pokud máte nápad na ochranu, otevřete problém v úložišti AKS Na GitHubu a přidejte [deployment safeguards request] ho na začátek názvu.

Můžu vybrat a zvolit, které muty chci v vynucení?

Ne. Ochrana nasazení je všechna nebo nic. Po zapnutí upozornění nebo vynucení budou všechna bezpečnostní opatření aktivní.

Proč byl prostředek nasazení přijat, i když neposlouchal osvědčené postupy?

Ochrana nasazení vynucuje standardy osvědčených postupů prostřednictvím ovládacích prvků Azure Policy a má zásady, které se ověřují proti prostředkům Kubernetes. K vyhodnocení a vynucování komponent clusteru azure Policy rozšiřuje Gatekeeper. Vynucování vrátného v současné době funguje také v fail-open modelu. Protože neexistuje žádná záruka, že Gatekeeper bude reagovat na naše síťové volání, zajistíme, že v takovém případě se ověření přeskočí, aby odepření neblokoval vaše nasazení.

Další informace najdete v tématu Ověřování úloh v Gatekeeperu.

Další kroky