Udostępnij za pośrednictwem


Stosowanie zabezpieczeń wdrażania w celu wymuszania najlepszych rozwiązań w usłudze Azure Kubernetes Service (AKS) (wersja zapoznawcza)

W tym artykule pokazano, jak za pomocą zabezpieczeń wdrożenia wymusić najlepsze rozwiązania w klastrze usługi Azure Kubernetes Service (AKS).

Omówienie

W całym cyklu projektowania często występują błędy, problemy i inne problemy, jeśli początkowe wdrożenie zasobów Kubernetes obejmuje błędy konfiguracji. Aby ułatwić tworzenie aplikacji na platformie Kubernetes, usługa Azure Kubernetes Service (AKS) oferuje zabezpieczenia wdrożenia (wersja zapoznawcza). Zabezpieczenia wdrożenia wymuszają najlepsze rozwiązania dotyczące rozwiązania Kubernetes w klastrze AKS za pomocą kontrolek usługi Azure Policy.

Zabezpieczenia wdrożenia oferują dwa poziomy konfiguracji:

  • Warning: Wyświetla komunikaty ostrzegawcze w terminalu kodu, aby otrzymywać alerty o wszelkich niezgodnych konfiguracjach klastra, ale nadal zezwalają na wykonywanie żądania.
  • Enforcement: wymusza zgodne konfiguracje, odmawiając i modyfikując wdrożenia, jeśli nie są zgodne z najlepszymi rozwiązaniami.

Po skonfigurowaniu zabezpieczeń wdrożenia dla opcji "Ostrzeżenie" lub "Wymuszanie" zabezpieczenia wdrożenia programowo oceniają klastry w czasie tworzenia lub aktualizowania pod kątem zgodności. Zabezpieczenia wdrożenia zawierają również zagregowane informacje o zgodności w obciążeniach na poziomie poszczególnych zasobów za pośrednictwem pulpitu nawigacyjnego zgodności usługi Azure Policy w witrynie Azure Portal lub w interfejsie wiersza polecenia lub terminalu. Uruchomienie niezgodnego obciążenia wskazuje, że klaster nie jest zgodna z najlepszymi rozwiązaniami i że obciążenia w klastrze są zagrożone problemami spowodowanymi przez konfigurację klastra.

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Wymagania wstępne

  • Należy włączyć dodatek usługi Azure Policy dla usługi AKS. Aby uzyskać więcej informacji, zobacz Włączanie usługi Azure Policy w klastrze usługi AKS.

  • Aby skonfigurować zabezpieczenia wdrożenia, musisz mieć wersję lub nowszą aks-preview wersję 2.0.0b1 rozszerzenia. Aby zainstalować rozszerzenie, zobacz Instalowanie rozszerzenia interfejsu wiersza polecenia aks-preview. Zalecamy również zaktualizowanie interfejsu wiersza polecenia platformy Azure, aby upewnić się, że masz zainstalowaną najnowszą wersję.

  • Aby utworzyć i zmodyfikować konfigurację zabezpieczeń wdrożenia, potrzebna jest subskrypcja z następującymi uprawnieniami w klastrze usługi AKS:

    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • Należy zarejestrować flagę funkcji zabezpieczeń wdrożenia. Aby zarejestrować flagę funkcji, zobacz Rejestrowanie flagi funkcji pod kątem zabezpieczeń wdrożenia.

Instalowanie rozszerzenia interfejsu wiersza polecenia aks-preview

  1. Zainstaluj rozszerzenie interfejsu aks-preview az extension add wiersza polecenia przy użyciu polecenia .

    az extension add --name aks-preview
    
  2. Zaktualizuj rozszerzenie, aby upewnić się, że masz zainstalowaną najnowszą wersję przy użyciu az extension update polecenia .

    az extension update --name aks-preview
    

Rejestrowanie flagi funkcji zabezpieczeń wdrożenia

  1. Zarejestruj flagę SafeguardsPreview funkcji przy użyciu az feature register polecenia .

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

    Wyświetlenie stanu Zarejestrowane trwa kilka minut.

  2. Sprawdź stan rejestracji przy użyciu az feature show polecenia .

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu az provider register polecenia .

    az provider register --namespace Microsoft.ContainerService
    

Zasady zabezpieczeń wdrożenia

Uwaga

Zasady ReadOnlyRootFilesystem i RootfilesystemInitContainers są obecnie dostępne tylko w systemie Linux.

W poniższej tabeli wymieniono zasady, które stają się aktywne, oraz zasoby platformy Kubernetes przeznaczone dla nich podczas włączania zabezpieczeń wdrożenia. Obecnie dostępne zabezpieczenia wdrożenia można wyświetlić w witrynie Azure Portal jako definicję usługi Azure Policy lub w ramach wbudowanych definicji usługi Azure Policy dla usługi Azure Kubernetes Service. Celem tej kolekcji jest utworzenie wspólnej i ogólnej listy najlepszych rozwiązań mających zastosowanie do większości użytkowników i przypadków użycia.

Zasady zabezpieczeń wdrożenia Docelowy zasób Kubernetes Wynik mutacji, jeśli jest dostępny
[Wersja zapoznawcza]: Nie można edytować poszczególnych węzłów Węzeł Nie dotyczy
Limity zasobów procesora CPU i pamięci kontenerów klastra Kubernetes nie powinny przekraczać określonych limitów Zasobnik Ustawia limity zasobów procesora CPU na 500 m, jeśli nie są ustawione i ustawia limity pamięci na 500Mi, jeśli żadna ścieżka nie jest obecna
[Wersja zapoznawcza]: musi mieć zestaw reguł koligacji przeciw koligacji Wdrażanie, StatefulSet, ReplicationController, ReplicaSet Nie dotyczy
[Wersja zapoznawcza]: Brak etykiet specyficznych dla usługi AKS Wdrażanie, StanfulSet, Zestaw replik Nie dotyczy
Kontenery klastra Kubernetes powinny używać tylko dozwolonych obrazów Zasobnik Nie dotyczy
[Wersja zapoznawcza]: Zarezerwowane zabezpieczenia puli systemu Węzeł Usuwa CriticalAddonsOnly defekt z puli węzłów użytkownika, jeśli nie został ustawiony. Usługa AKS używa defektu CriticalAddonsOnly , aby uniemożliwić zasobnikom klientów z dala od puli systemu. Ta konfiguracja zapewnia wyraźne rozdzielenie składników usługi AKS i zasobników klientów i zapobiega eksmisji zasobników klientów, które nie tolerują defektu CriticalAddonsOnly .
Upewnij się, że kontenery klastra mają skonfigurowane sondy gotowości lub aktualności Zasobnik Nie dotyczy
Klastry Kubernetes powinny używać sterownika Container Storage Interface (CSI) StorageClass StorageClass Nie dotyczy
[Wersja zapoznawcza]: Kontenery klastra Kubernetes powinny ściągać obrazy tylko wtedy, gdy istnieją wpisy tajne ściągania obrazu Zasobnik Nie dotyczy
[Wersja zapoznawcza]: Klaster Kubernetes powinien implementować dokładne budżety zakłóceń zasobników Wdrażanie, zestaw replik, stanowy zestaw Ustawia maxUnavailable w zasobie PodDisruptionBudget wartość 1.
[Wersja zapoznawcza]: Usługi klastra Kubernetes powinny używać unikatowych selektorów Usługa Nie dotyczy
[Wersja zapoznawcza]: ReadOnlyRootFilesystem w specyfikacji zasobnika ustawiono wartość true Zasobnik Ustawia readOnlyRootFilesystem specyfikację zasobnika na true wartość , jeśli nie jest ustawiona. Ta konfiguracja uniemożliwia kontenerom zapisywanie w głównym systemie plików.
[Wersja zapoznawcza]: RootfilesystemInitContainers w specyfikacji zasobnika ustawiono wartość true Zasobnik Ustawia rootFilesystemInitContainers specyfikację zasobnika na true wartość , jeśli nie jest ustawiona.
[Wersja zapoznawcza]: obrazy kontenerów klastra Kubernetes nie powinny zawierać najnowszego tagu obrazu Wdrażanie, StatefulSet, ReplicationController, ReplicaSet Nie dotyczy
[Wersja zapoznawcza]: Obrazy kontenerów klastra Kubernetes muszą zawierać punkt zaczepienia preStop Wdrażanie, StatefulSet, ReplicationController, ReplicaSet Nie dotyczy

Jeśli chcesz przesłać pomysł lub zażądać zabezpieczeń wdrożenia, otwórz problem w repozytorium GitHub usługi AKS i dodaj [deployment safeguards request] go na początku tytułu.

Włączanie zabezpieczeń wdrożenia

Uwaga

Jeśli usługa Azure Policy została włączona po raz pierwszy w celu korzystania z zabezpieczeń wdrożenia, może być konieczne odczekenie do 20 minut , zanim usługa Azure Policy zostanie wdrożona.

Użycie poziomu zabezpieczeń Enforcement wdrożenia oznacza, że decydujesz się na blokowanie i modyfikowanie wdrożeń. Przed włączeniem Enforcementusługi rozważ, jak te zasady mogą współdziałać z klastrem usługi AKS.

Włączanie zabezpieczeń wdrożenia w nowym klastrze

Włącz zabezpieczenia wdrożenia w nowym klastrze przy użyciu az aks create polecenia z flagami --safeguards-level i --safeguards-version .

Jeśli chcesz otrzymywać ostrzeżenia o niezgodności, ustaw wartość --safeguards-level Warning. Jeśli chcesz odmówić lub zmutować wszystkie niezgodne wdrożenia, ustaw go na Enforcementwartość . Aby otrzymywać ostrzeżenia, ustaw wartość --safeguards-level "Ostrzeżenie". Aby odmówić lub zmutować wszystkie wdrożenia, które nie są zgodne z zabezpieczeniami wdrożenia, ustaw wartość --safeguards-level "Wymuszanie". Aby ustawić wersję zabezpieczeń wdrożenia, użyj flagi --safeguards-version . Obecnie wersja 2.0.0 to najnowsza wersja zabezpieczeń wdrożenia.

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

Włączanie zabezpieczeń wdrożenia w istniejącym klastrze

Włącz zabezpieczenia wdrożenia w istniejącym klastrze z włączonym dodatkiem usługi Azure Policy przy użyciu az aks update polecenia z flagami --safeguards-level i --safeguards-version . Jeśli chcesz otrzymywać ostrzeżenia o niezgodności, ustaw wartość --safeguards-level Warning. Jeśli chcesz odmówić lub zmutować wszystkie niezgodne wdrożenia, ustaw go na Enforcementwartość .

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

Jeśli chcesz zaktualizować poziom zabezpieczeń wdrożenia istniejącego klastra, użyj az aks update polecenia z flagą ustawioną na --safeguards-level Warning lub Enforcement.

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

Wykluczanie przestrzeni nazw

Można również wykluczyć niektóre przestrzenie nazw z zabezpieczeń wdrożenia. Jeśli wykluczysz przestrzeń nazw, działanie w tej przestrzeni nazw nie ma wpływu na ostrzeżenia lub wymuszanie zabezpieczeń wdrożenia.

Aby na przykład wykluczyć przestrzenie ns1 nazw i ns2, użyj rozdzielanej przecinkami listy przestrzeni nazw z flagą --safeguards-excluded-ns , jak pokazano w poniższym przykładzie:

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

Aktualizowanie wersji zabezpieczeń wdrożenia

Uwaga

Wersja 2.0.0 to najnowsza wersja zabezpieczeń wdrożenia.

Zaktualizuj wersję zabezpieczeń wdrożenia przy użyciu az aks update polecenia z --safeguards-version flagą ustawioną na nową wersję. Poniższy przykład aktualizuje istniejący klaster do używania wersji 2.0.0:

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

Weryfikowanie zgodności między klastrami

Po wdrożeniu manifestu kubernetes w interfejsie wiersza polecenia lub terminalu są wyświetlane ostrzeżenia lub potencjalny komunikat odmowy, jeśli klaster nie jest zgodny z zabezpieczeniami wdrożenia, jak pokazano w poniższych przykładach:

Ostrzeżenie

$ 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

Egzekwowanie

Dzięki mutacjom ochronnym wdrożenia poziom wycisza zasoby Kubernetes, Enforcement jeśli ma to zastosowanie. Jednak zasoby kubernetes nadal muszą przekazać wszystkie zabezpieczenia w celu pomyślnego wdrożenia. Jeśli jakiekolwiek zasady ochrony nie powiedzie się, zasób zostanie odrzucony i nie zostanie wdrożony.

$ 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.

Jeśli zasoby platformy Kubernetes są zgodne z odpowiednimi zabezpieczeniami mutacji i spełniają wszystkie inne wymagania zabezpieczające, zostaną one pomyślnie wdrożone, jak pokazano w poniższym przykładzie:

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

Weryfikowanie zgodności między klastrami przy użyciu pulpitu nawigacyjnego usługi Azure Policy

Aby sprawdzić, czy zastosowano zabezpieczenia wdrożenia i sprawdzić zgodność klastra, przejdź do strony witryny Azure Portal dla klastra i wybierz pozycję Zasady, a następnie wybierz pozycję Azure Policy.

Z listy zasad i inicjatyw wybierz inicjatywę skojarzoną z zabezpieczeniami wdrożenia. Zostanie wyświetlony pulpit nawigacyjny ze stanem zgodności w klastrze usługi AKS.

Uwaga

Aby prawidłowo ocenić zgodność w klastrze usługi AKS, inicjatywa usługi Azure Policy musi być ograniczona do grupy zasobów klastra.

Wyłączanie zabezpieczeń wdrożenia

Wyłącz zabezpieczenia wdrożenia w klastrze przy użyciu az aks update polecenia i ustaw parametr na --safeguards-level Offwartość .

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

--

Często zadawane pytania

Po raz pierwszy włączono zabezpieczenia wdrożenia w usłudze Azure Policy. Dlaczego nie widzę żadnych ostrzeżeń? Dlaczego moje zasobniki nie są odrzucane?

Po pierwszym włączeniu usługi Azure Policy synchronizacja z klastrem może potrwać do 35 minut.

Właśnie przełączyłem się z Ostrzeżenie na Wymuszanie. Czy to zacznie obowiązywać natychmiast?

Podczas przełączania poziomów zabezpieczeń wdrożenia może być konieczne odczekanie do 15 minut, zanim nowy poziom zostanie zastosowany.

Czy mogę utworzyć własne mutacje?

L.p. Jeśli masz pomysł na zabezpieczenie, otwórz problem w repozytorium GitHub usługi AKS i dodaj [deployment safeguards request] go na początku tytułu.

Czy mogę wybrać i wybrać, które mutacje chcę w wymuszaniu?

L.p. Zabezpieczenia wdrożenia to wszystko lub nic. Po włączeniu opcji Ostrzeżenie lub Wymuszanie wszystkie zabezpieczenia będą aktywne.

Dlaczego mój zasób wdrażania został przyjęty, mimo że nie był on przestrzegany najlepszych rozwiązań?

Zabezpieczenia wdrażania wymuszają standardy najlepszych rozwiązań za pomocą mechanizmów kontroli usługi Azure Policy i mają zasady sprawdzające poprawność względem zasobów platformy Kubernetes. Aby ocenić i wymusić składniki klastra, usługa Azure Policy rozszerza usługę Gatekeeper. Wymuszanie strażnika działa również obecnie w fail-open modelu. Ponieważ nie ma gwarancji, że usługa Gatekeeper odpowie na nasze wywołanie sieciowe, upewnimy się, że w takim przypadku weryfikacja zostanie pominięta, aby odmowa nie blokowała wdrożeń.

Aby dowiedzieć się więcej, zobacz Walidacja obciążenia w usłudze Gatekeeper.

Następne kroki