Osvědčené postupy pro zabezpečení clusteru a upgrady v Azure Kubernetes Service (AKS)

Při správě clusterů v Azure Kubernetes Service (AKS) je klíčovým aspektem zabezpečení úloh a dat. Při spouštění clusterů s více tenanty pomocí logické izolace potřebujete zejména zabezpečit přístup k prostředkům a úlohám. Minimalizujte riziko útoku tím, že použijete nejnovější aktualizace zabezpečení operačního systému Kubernetes a uzlu.

Tento článek se zaměřuje na zabezpečení clusteru AKS. Získáte informace o těchto tématech:

  • K Azure Active Directory přístupu k serveru API použijte řízení přístupu na základě role (Kubernetes RBAC) a Kubernetes.
  • Zabezpečení přístupu ke kontejneru k prostředkům uzlu
  • Upgradujte cluster AKS na nejnovější verzi Kubernetes.
  • Udržujte uzly aktuální a automaticky aplikujte opravy zabezpečení.

Můžete si také přečíst osvědčené postupy pro správu i image kontejneru a pro zabezpečení podů.

Integraci služby Azure Kubernetes Services se službou Defender for Cloud můžete použít také k detekci hrozeb a zobrazení doporučení pro zabezpečení clusterů AKS.

Zabezpečený přístup k serveru rozhraní API a uzlům clusteru

Osvědčené postupy

Jedním z nejdůležitějších způsobů zabezpečení clusteru je zabezpečení přístupu k serveru rozhraní Kubernetes API. Pokud chcete řídit přístup k serveru rozhraní API, integrujte Řízení přístupu na základě role v Kubernetes Azure Active Directory (Azure AD). Pomocí těchto ovládacích prvků zabezpečíte AKS stejným způsobem, jakým zabezpečíte přístup k předplatným Azure.

Server rozhraní Kubernetes API poskytuje jeden spojovací bod pro požadavky na provádění akcí v rámci clusteru. Pokud chcete zabezpečit a auditovat přístup k serveru rozhraní API, omezte přístup a poskytni nejnižší možné úrovně oprávnění. I když tento přístup není pro Kubernetes jedinečný, je zvlášť důležitý, když logicky izolaci clusteru AKS pro použití ve více tenantech.

Azure AD poskytuje řešení pro správu identit připravené pro podniky, které se integruje s clustery AKS. Vzhledem k tomu, že Kubernetes neposkytuje řešení pro správu identit, můžete být při podrobném stisknutí pevného tlačítka omezen přístup k serveru rozhraní API. Díky clusterům integrovaným do Azure AD v AKS můžete k ověřování uživatelů na serveru rozhraní API použít stávající uživatelské a skupinové účty.

Azure Active Directory integrace pro clustery AKS

Pomocí řízení přístupu na základě role v Kubernetes a integrace Azure AD můžete zabezpečit server rozhraní API a poskytnout minimální požadovaná oprávnění k sadě prostředků s vymezeným oborem, jako je jeden obor názvů. Různým uživatelům nebo skupinám Azure AD můžete udělit různé role Kubernetes. S podrobnými oprávněními můžete omezit přístup k serveru rozhraní API a poskytnout jasný záznam pro audit provedených akcí.

Doporučeným postupem je použít skupiny k poskytnutí přístupu k souborům a složkám místo jednotlivých identit. Můžete například použít členství ve skupině Azure AD k navázání uživatelů na role Kubernetes, a ne na jednotlivé uživatele. Při změně členství uživatele ve skupinách se jejich přístupová oprávnění ke clusteru AKS odpovídajícím způsobem mění.

Mezitím řekněme, že jednotlivého uživatele svážete přímo s rolí a změní se jeho pracovní funkce. I když se členství ve skupinách Azure AD aktualizuje, jejich oprávnění v clusteru AKS ne. V tomto scénáři bude mít uživatel více oprávnění, než vyžaduje.

Další informace o integraci Azure AD, Řízení přístupu na základě role Kubernetes a Azure RBAC najdete v tématu Osvědčené postupy pro ověřování a autorizaci v AKS.

Zabezpečení přístupu ke kontejneru k prostředkům

Osvědčené postupy

Omezte přístup k akcím, které kontejnery mohou provádět. Poskytujte nejmenší počet oprávnění a vyhněte se použití kořenového přístupu nebo privilegovaného eskalace.

Stejným způsobem, jakým byste měli uživatelům nebo skupinám udělit minimální požadovaná oprávnění, byste také měli kontejnery omezit jenom na nezbytné akce a procesy. Abyste minimalizovali riziko útoku, vyhněte se konfiguraci aplikací a kontejnerů, které vyžadují eskalovaná oprávnění nebo kořenový přístup.

Například nastavte allowPrivilegeEscalation: false v manifestu podu. Tyto integrované kontexty zabezpečení podů Kubernetes umožňují definovat další oprávnění, jako je například uživatel nebo skupina, které se mají spustit jako, nebo možnosti Linuxu, které se mají zveřejnit. Další osvědčené postupy najdete v tématu Zabezpečení přístupu podů k prostředkům.

Pro ještě podrobnější kontrolu nad akcemi kontejnerů můžete také použít integrované funkce zabezpečení Linuxu, jako je AppArmor a seccomp.

  1. Definujte funkce zabezpečení Linuxu na úrovni uzlu.
  2. Implementujte funkce prostřednictvím manifestu podu.

Integrované funkce zabezpečení Linuxu jsou dostupné jenom na uzlech a podech Linuxu.

Poznámka

V současné době nejsou prostředí Kubernetes zcela bezpečná pro použití nehořaslepých více tenantů. Další funkce zabezpečení, jako jsou AppArmor, *seccomp,*Zásady zabezpečení podů nebo Kubernetes RBAC pro uzly, efektivně blokují zneužití.

V případě skutečného zabezpečení při spouštění nehořatelových úloh s více tenanty důvěřujte pouze hypervisoru. Doména zabezpečení pro Kubernetes se stane celým clusterem, nikoli jednotlivým uzlem.

U těchto typů nehořlacích úloh s více tenanty byste měli použít fyzicky izolované clustery.

App Armor

K omezení akcí kontejneru můžete použít modul zabezpečení jádra Linuxu AppArmor. AppArmor je k dispozici jako součást základního operačního systému uzlu AKS a ve výchozím nastavení je povolený. Vytvoříte profily AppArmor, které omezují akce čtení, zápisu nebo spouštění, nebo systémové funkce, jako je připojení systémů souborů. Výchozí profily AppArmor omezují přístup k různým umístěním a a umožňují logicky izolovat kontejnery /proc /sys od základního uzlu. AppArmor funguje pro všechny aplikace, které běží v Linuxu, nejen pro pody Kubernetes.

Profily AppArmor, které se používají v clusteru AKS k omezení akcí kontejnerů

Pokud chcete vidět AppArmor v akci, následující příklad vytvoří profil, který brání zápisu do souborů.

  1. SSH k uzlu AKS.

  2. Vytvořte soubor s názvem deny-write.profile.

  3. Vložte následující obsah:

    #include <tunables/global>
    profile k8s-apparmor-example-deny-write flags=(attach_disconnected) {
      #include <abstractions/base>
    
      file,
      # Deny all file writes.
      deny /** w,
    }
    

Profily AppArmor se přidávají pomocí apparmor_parser příkazu .

  1. Přidejte profil do AppArmor.

  2. Zadejte název profilu vytvořeného v předchozím kroku:

    sudo apparmor_parser deny-write.profile
    

    Pokud se profil správně parsuje a použije na AppArmor, neuvidíte žádný výstup a vrátíte se do příkazového řádku.

  3. Na místním počítači vytvořte manifest podu s názvem aks-apparmor.yaml. Tento manifest:

    • Definuje poznámku pro container.apparmor.security.beta.kubernetes .
    • Odkazuje na profil odepření zápisu vytvořený v předchozích krocích.
    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-apparmor
      annotations:
        container.apparmor.security.beta.kubernetes.io/hello: localhost/k8s-apparmor-example-deny-write
    spec:
      containers:
      - name: hello
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command: [ "sh", "-c", "echo 'Hello AppArmor!' && sleep 1h" ]
    
  4. Když je pod nasazený, použijte k ověření, že se pod hello-apparmor zobrazuje jako blokovaný:

    $ kubectl get pods
    
    NAME             READY   STATUS    RESTARTS   AGE
    aks-ssh          1/1     Running   0          4m2s
    hello-apparmor   0/1     Blocked   0          50s
    

Další informace o AppArmor najdete v tématu Profily AppArmor v Kubernetes.

Zabezpečené výpočetní prostředí

Zatímco AppArmor funguje pro všechny linuxové aplikace, seccomp (sek ure comp uting) funguje na úrovni procesu. Seccomp je také modul zabezpečení jádra Linuxu a nativně ho podporuje modul runtime Dockeru používaný uzly AKS. S seccomp můžete omezit volání procesů kontejneru. Sladění s osvědčeným postupem udělení minimálního oprávnění ke spuštění kontejneru:

  • Definování pomocí filtruje akce, které se mají povolit nebo odepřít.
  • Anotace v manifestu YAML podu, která se přidruží k filtru seccomp.

Pokud chcete vidět seccomp v akci, vytvořte filtr, který zabrání změně oprávnění k souboru.

  1. SSH k uzlu AKS.

  2. Vytvořte filtr seccomp s názvem /var/lib/kubelet/seccomp/prevent-chmod.

  3. Vložte následující obsah:

    {
      "defaultAction": "SCMP_ACT_ALLOW",
      "syscalls": [
        {
          "name": "chmod",
          "action": "SCMP_ACT_ERRNO"
        },
        {
          "name": "fchmodat",
          "action": "SCMP_ACT_ERRNO"
        },
        {
          "name": "chmodat",
          "action": "SCMP_ACT_ERRNO"
        }
      ]
    }
    

    Ve verzi 1.19 a novější musíte nakonfigurovat následující:

    {
      "defaultAction": "SCMP_ACT_ALLOW",
      "syscalls": [
        {
          "names": ["chmod","fchmodat","chmodat"],
          "action": "SCMP_ACT_ERRNO"
        }
      ]
    }
    
  4. Na místním počítači vytvořte manifest podu s názvem aks-seccomp.yaml a vložte následující obsah. Tento manifest:

    • Definuje poznámku pro seccomp.security.alpha.kubernetes.io .
    • Odkazuje na filtr prevent-chmod vytvořený v předchozím kroku.
    apiVersion: v1
    kind: Pod
    metadata:
      name: chmod-prevented
      annotations:
        seccomp.security.alpha.kubernetes.io/pod: localhost/prevent-chmod
    spec:
      containers:
      - name: chmod
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command:
          - "chmod"
        args:
         - "777"
         - /etc/hostname
      restartPolicy: Never
    

    Ve verzi 1.19 a novější musíte nakonfigurovat následující:

    apiVersion: v1
    kind: Pod
    metadata:
      name: chmod-prevented
    spec:
      securityContext:
        seccompProfile:
          type: Localhost
          localhostProfile: prevent-chmod
      containers:
      - name: chmod
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command:
          - "chmod"
        args:
         - "777"
         - /etc/hostname
      restartPolicy: Never
    
  5. Nasaďte ukázkový pod pomocí příkazu kubectl apply:

    kubectl apply -f ./aks-seccomp.yaml
    
  6. Pomocí příkazu kubectl get pods zobrazte stav podu.

    • Pod hlásí chybu.
    • Příkaz chmod není možné spustit pomocí filtru seccomp, jak je znázorněno v následujícím příkladu výstupu:
    $ kubectl get pods
    
    NAME                      READY     STATUS    RESTARTS   AGE
    chmod-prevented           0/1       Error     0          7s
    

Další informace o dostupných filtrech najdete v tématu Profily zabezpečení Seccomp pro Docker.

Pravidelná aktualizace na nejnovější verzi Kubernetes

Osvědčené postupy

Pokud chcete mít aktuální informace o nových funkcích a opravách chyb, pravidelně upgradujte verzi Kubernetes v clusteru AKS.

Kubernetes vydává nové funkce rychlejším tempem než tradičnější platformy infrastruktury. Aktualizace Kubernetes zahrnují:

  • Nové funkce
  • Opravy chyb nebo zabezpečení

Nové funkce obvykle prochází stavem alfa a beta verze, než se stanou stabilními. Jakmile je stabilní, jsou všeobecně dostupné a doporučené pro použití v produkčním prostředí. Cyklus vydání nových funkcí Kubernetes umožňuje aktualizovat Kubernetes bez pravidelného narušování změn nebo úprav nasazení a šablon.

AKS podporuje tři dílčí verze Kubernetes. Po vydání nové dílčí verze opravy se nejstarší podporovaná podverzální verze a podporované verze oprav vyřazeny. K menším aktualizacím Kubernetes dochází pravidelně. Pokud chcete zůstat v rámci podpory, ujistěte se, že máte proces zásad správného řízení, který vám pomůže zkontrolovat potřebné upgrady. Další informace najdete v tématu Podporované verze Kubernetes a AKS.

Pokud chcete zkontrolovat dostupné verze pro váš cluster, použijte příkaz az aks get-upgrades, jak je znázorněno v následujícím příkladu:

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster

Cluster AKS pak můžete upgradovat pomocí příkazu az aks upgrade. Proces upgradu bezpečně:

  • Korpusy a vyprázdní jeden uzel po jednom.
  • Naplánuje pody na zbývajících uzlech.
  • Nasadí nový uzel s nejnovějšími verzemi operačního systému a Kubernetes.

Důležité

Otestujte nové dílčí verze ve vývojovém testovacím prostředí a ověřte, že vaše úloha zůstává v pořádku s novou verzí Kubernetes.

Kubernetes může vyhánět rozhraní API (jako ve verzi 1.16), na která vaše úlohy spoléhají. Při uvedení nových verzí do produkčního prostředí zvažte použití více fondů uzlů v samostatných verzích a postupné upgrade jednotlivých fondů, aby se aktualizace postupně rozšiřovat napříč clusterem. Pokud používáte více clusterů, upgradujte postupně jeden cluster a postupně sledujte jeho dopad nebo změny.

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version KUBERNETES_VERSION

Další informace o upgradech v AKS najdete v tématu Podporované verze Kubernetes v AKS a Upgrade clusteru AKS.

Zpracování aktualizací linuxových uzlů

Každý večer mají linuxové uzly v AKS opravy zabezpečení prostřednictvím kanálu aktualizace distribuce. Toto chování se automaticky konfiguruje při nasazování uzlů v clusteru AKS. Pokud to vyžaduje oprava zabezpečení nebo aktualizace jádra, uzly se automaticky restartují, aby se minimalizovalo přerušení a potenciální dopad na spuštěné úlohy. Další informace o tom, jak zpracovávat restartování uzlů, najdete v tématu Použití aktualizací zabezpečení a jádra na uzly v AKS.

Upgrady i image uzlu

Bezobslužné upgrady aplikují aktualizace na operační systém linuxového uzlu, ale image použitá k vytvoření uzlů pro cluster zůstane beze změny. Pokud se do clusteru přidá nový linuxový uzel, použije se k vytvoření uzlu původní image. Tento nový uzel obdrží všechny aktualizace zabezpečení a jádra dostupné během automatické kontroly každou noc, ale zůstane bez opravy, dokud se nedokončí všechny kontroly a restartování. Pomocí upgradu image uzlu můžete zkontrolovat a aktualizovat image uzlů používané clusterem. Další podrobnosti o upgradu nod image najdete v tématu Azure Kubernetes Service upgradu image uzlu (AKS).

Proces Windows aktualizace uzlů serveru

V Windows Server pravidelně proveďte operaci upgradu image uzlu, abyste bezpečně cordon a vyprázdněné pody nasadili aktualizované uzly.