A Azure Kubernetes Service (AKS-) fürtök védelme Azure Policy

A Azure Kubernetes Service -fürtökre beépített biztonsági szabályzatokat alkalmazhat és érvényesíthet a Azure Policy használatával. Azure Policy segít a szervezeti szabványok betartatásában és a megfelelőség nagy léptékű értékelésében. Az AKS-hez készült Azure Policy bővítmény telepítése után egyéni szabályzatdefiníciókat vagy kezdeményezésnek (más néven szabályzatkészleteknek) nevezett szabályzatdefiníciócsoportokat alkalmazhat a fürtre. Az AKS-szabályzat- és kezdeményezésdefiníciók teljes listáját az AKS beépített definícióinak Azure Policy című cikkben találja.

Ez a cikk bemutatja, hogyan alkalmazhat szabályzatdefiníciókat a fürtre, és ellenőrizheti, hogy a hozzárendelések kikényszerítése folyamatban van-e.

Előfeltételek

Beépített szabályzatdefiníció vagy -kezdeményezés hozzárendelése

A szabályzatdefiníciót vagy kezdeményezést az Azure Portal az alábbi lépésekkel alkalmazhatja:

  1. Keresse meg a Azure Policy szolgáltatást Azure Portal Policy (Szabályzat) néven.
  2. A Azure Policy lap bal oldali ablaktábláján válassza a Definíciók lehetőséget.
  3. A Kategóriák területen válassza a lehetőséget Kubernetes.
  4. Válassza ki az alkalmazni kívánt szabályzatdefiníciót vagy kezdeményezést. Ebben a példában válassza ki a Kubernetes-fürt podjának biztonsági alapkonfigurációs szabványait a Linux-alapú számítási feladatokhoz kezdeményezéshez.
  5. Válassza a Hozzárendelés elemet.
  6. Állítsa a Hatókör beállítást az AKS-fürt erőforráscsoportjára, amelyen engedélyezve van a Azure Policy bővítmény.
  7. Válassza a Paraméterek lapot, és frissítse az effektust a-ról audit a-ra deny az alapterv kezdeményezést megsértő új üzemelő példányok letiltásához. További névtereket is hozzáadhat a kiértékelésből való kizáráshoz. Ebben a példában tartsa meg az alapértelmezett értékeket.
  8. A szabályzat-hozzárendelés elküldéséhez válassza a Felülvizsgálat + létrehozás lehetőséget>.

Egyéni szabályzatdefiníció létrehozása és hozzárendelése

Az egyéni szabályzatok lehetővé teszik az Azure használatára vonatkozó szabályok meghatározását. Kényszerítheti például a következő típusú szabályokat:

  • Biztonsági eljárások
  • Költségkezelés
  • Szervezetspecifikus szabályok (például elnevezés vagy helyek)

Egyéni szabályzat létrehozása előtt ellenőrizze a gyakori minták és minták listáját , és ellenőrizze, hogy az eset már szerepel-e benne.

Az egyéni szabályzatdefiníciók JSON-ban vannak megírva. További információ az egyéni szabályzatok létrehozásáról: Azure Policy definícióstruktúra és Egyéni szabályzatdefiníció létrehozása.

Megjegyzés

Azure Policy most egy templateInfo nevű új tulajdonságot használ, amely lehetővé teszi a kényszersablon forrástípusának meghatározását. A templateInfo szabályzatdefiníciókban való definiálásakor nem kell megadnia a constraintTemplate vagy a constraint tulajdonságokat. Továbbra is meg kell határoznia az apiGroup-okat és -típusokat. Erről további információt a Azure Policy hatásainak ismertetése című témakörben talál.

Miután létrehozta az egyéni szabályzatdefiníciót, tekintse meg a Szabályzatdefiníció hozzárendelése című témakört a szabályzat Kubernetes-fürthöz való hozzárendelésének részletes útmutatójához.

Annak ellenőrzése, hogy fut-e egy Azure Policy

  • Ellenőrizze, hogy a rendszer alkalmazza-e a szabályzat-hozzárendeléseket a fürtre az alábbi kubectl get paranccsal.

    kubectl get constrainttemplates
    

    Megjegyzés

    A szabályzat-hozzárendelések szinkronizálása akár 20 percet is igénybe vehet az egyes fürtökbe.

    A kimenetnek az alábbi példakimenethez hasonlónak kell lennie:

    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
    

Emelt szintű pod elutasításának ellenőrzése

Először teszteljük, mi történik, ha egy podot a biztonsági környezetével privileged: trueütemez. Ez a biztonsági környezet eszkalálja a pod jogosultságait. A kezdeményezés letiltja a kiemelt podokat, ezért a kérés megtagadva, ami az üzembe helyezés elutasítását eredményezi.

  1. Hozzon létre egy nevű nginx-privileged.yaml fájlt, és illessze be az alábbi YAML-jegyzékfájlt.

    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. Hozza létre a podot a kubectl apply paranccsal, és adja meg a YAML-jegyzékfájl nevét.

    kubectl apply -f nginx-privileged.yaml
    

    A vártnak megfelelően a pod nem ütemezhető, ahogy az alábbi példakimenetben látható:

    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}
    

    A pod nem éri el az ütemezési fázist, így a továbblépés előtt nincs törölhető erőforrás.

Nemprivileged pod létrehozásának tesztelése

Az előző példában a tárolólemezkép automatikusan root használatával próbálta meg az NGINX-et a 80-ás porthoz kötni. A szabályzat kezdeményezése megtagadja ezt a kérést, ezért a pod nem indul el. Most próbálja meg futtatni ugyanazt az NGINX-podot emelt szintű hozzáférés nélkül.

  1. Hozzon létre egy nevű nginx-unprivileged.yaml fájlt, és illessze be az alábbi YAML-jegyzékfájlt.

    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. Hozza létre a podot a kubectl apply paranccsal, és adja meg a YAML-jegyzékfájl nevét.

    kubectl apply -f nginx-unprivileged.yaml
    
  3. Ellenőrizze a pod állapotát a kubectl get pods paranccsal.

    kubectl get pods
    

    A kimenetnek hasonlónak kell lennie a következő példakimenethez, amely azt mutatja, hogy a pod sikeresen ütemezve van, és Fut állapotú:

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

    Ez a példa az alapterv kezdeményezést mutatja be, amely csak a gyűjtemény szabályzatait megsértő üzemelő példányokat érinti. Az engedélyezett üzemelő példányok továbbra is működnek.

  4. Törölje az NGINX nem emelt szintű podot a kubectl delete paranccsal, és adja meg a YAML-jegyzékfájl nevét.

    kubectl delete -f nginx-unprivileged.yaml
    

Szabályzat vagy kezdeményezés letiltása

Az alapterv kezdeményezését az alábbi lépésekkel távolíthatja el a Azure Portal:

  1. Lépjen a Házirend panelre a Azure Portal.
  2. Válassza a Hozzárendelések lehetőséget.
  3. Válassza a ... gombot a Kubernetes-fürt podjának biztonsági alapkonfigurációs szabványai mellett a Linux-alapú számítási feladatok kezdeményezéséhez .
  4. Válassza a Hozzárendelés törlése lehetőséget.

Következő lépések

A Azure Policy működésével kapcsolatos további információkért tekintse meg az alábbi cikkeket: