Pojęcia dotyczące zabezpieczeń aplikacji i klastrów w usłudze Azure Kubernetes Service (AKS)Security concepts for applications and clusters in Azure Kubernetes Service (AKS)

Aby chronić dane klienta podczas uruchamiania obciążeń aplikacji w usłudze Azure Kubernetes Service (AKS), zabezpieczenia klastra są kluczem.To protect your customer data as you run application workloads in Azure Kubernetes Service (AKS), the security of your cluster is a key consideration. Kubernetes obejmuje składniki zabezpieczeń, takie jak zasady sieciowe i wpisy tajne.Kubernetes includes security components such as network policies and Secrets. Następnie platforma Azure dodaje do składników, takich jak sieciowe grupy zabezpieczeń i uaktualnienia do zorganizowanych klastrów.Azure then adds in components such as network security groups and orchestrated cluster upgrades. Te składniki zabezpieczeń są łączone w celu zapewnienia, że klaster AKS z najnowszymi aktualizacjami zabezpieczeń systemu operacyjnego i wersjami Kubernetes oraz bezpiecznym ruchem pod kątem i dostępem do poufnych poświadczeń.These security components are combined to keep your AKS cluster running the latest OS security updates and Kubernetes releases, and with secure pod traffic and access to sensitive credentials.

W tym artykule przedstawiono podstawowe koncepcje zabezpieczania aplikacji w programie AKS:This article introduces the core concepts that secure your applications in AKS:

Zabezpieczenia główneMaster security

W programie AKS główne składniki programu Kubernetes są częścią usługi zarządzanej zapewnianej przez firmę Microsoft.In AKS, the Kubernetes master components are part of the managed service provided by Microsoft. Każdy klaster AKS ma własny, dedykowany główny Kubernetes, który zapewnia serwer interfejsu API, harmonogram itd. Ten główny serwer jest zarządzany i konserwowany przez firmę Microsoft.Each AKS cluster has its own single-tenanted, dedicated Kubernetes master to provide the API Server, Scheduler, etc. This master is managed and maintained by Microsoft.

Domyślnie serwer interfejsu API Kubernetes używa publicznego adresu IP i w pełni kwalifikowanej nazwy domeny (FQDN).By default, the Kubernetes API server uses a public IP address and a fully qualified domain name (FQDN). Dostęp do punktu końcowego serwera interfejsu API można ograniczyć za pomocą autoryzowanych zakresów adresów IP.You can limit access to the API server endpoint using authorized IP ranges. Można również utworzyć w pełni prywatny klaster , aby ograniczyć dostęp serwera API do sieci wirtualnej.You can also create a fully private cluster to limit API server access to your virtual network.

Dostęp do serwera interfejsu API można kontrolować za pomocą Kubernetes kontroli dostępu opartej na rolach (Kubernetes RBAC) i funkcji RBAC platformy Azure.You can control access to the API server using Kubernetes role-based access control (Kubernetes RBAC) and Azure RBAC. Aby uzyskać więcej informacji, zobacz integracja z usługą Azure AD za pomocą AKS.For more information, see Azure AD integration with AKS.

Zabezpieczenia węzłaNode security

AKS węzły są maszynami wirtualnymi platformy Azure, którymi zarządzasz.AKS nodes are Azure virtual machines that you manage and maintain. Węzły systemu Linux uruchamiają zoptymalizowaną dystrybucję Ubuntu przy użyciu containerd środowiska uruchomieniowego kontenera lub Moby.Linux nodes run an optimized Ubuntu distribution using the containerd or Moby container runtime. W węzłach systemu Windows Server działa zoptymalizowane wydanie systemu Windows Server 2019, a także używany jest program containerd lub środowisko uruchomieniowe kontenera Moby.Windows Server nodes run an optimized Windows Server 2019 release and also use the containerd or Moby container runtime. Po utworzeniu lub skalowaniu klastra AKS węzły są automatycznie wdrażane z najnowszymi aktualizacjami i konfiguracjami zabezpieczeń systemu operacyjnego.When an AKS cluster is created or scaled up, the nodes are automatically deployed with the latest OS security updates and configurations.

Uwaga

Klastry AKS korzystające z pul węzłów Kubernetes w wersji 1,19 i większe użycie containerd jako środowiska uruchomieniowego kontenera.AKS clusters using Kubernetes version 1.19 node pools and greater use containerd as its container runtime. Klastry AKS korzystające z funkcji Kubernetes starszych niż v 1.19 dla pul węzłów używają Moby (nadrzędnego Docker) jako środowiska uruchomieniowego kontenera.AKS clusters using Kubernetes prior to v1.19 for node pools use Moby (upstream docker) as its container runtime.

Platforma Azure automatycznie stosuje poprawki zabezpieczeń systemu operacyjnego w węzłach z systemem Linux w porze nocnej.The Azure platform automatically applies OS security patches to Linux nodes on a nightly basis. Jeśli aktualizacja zabezpieczeń systemu operacyjnego Linux wymaga ponownego uruchomienia hosta, ponowne uruchomienie nie jest wykonywane automatycznie.If a Linux OS security update requires a host reboot, that reboot is not automatically performed. Można ręcznie ponownie uruchomić węzły systemu Linux lub często używanym podejściem jest użycie Kured, demona ponownego uruchomienia typu open source dla Kubernetes.You can manually reboot the Linux nodes, or a common approach is to use Kured, an open-source reboot daemon for Kubernetes. Kured działa jako elementu daemonset i monitoruje każdy węzeł pod kątem obecności pliku wskazujący, że wymagany jest ponowny rozruch.Kured runs as a DaemonSet and monitors each node for the presence of a file indicating that a reboot is required. Ponowne uruchomienia są zarządzane przez klaster przy użyciu tego samego procesu Cordon i opróżniania co uaktualnienie klastra.Reboots are managed across the cluster using the same cordon and drain process as a cluster upgrade.

W przypadku węzłów systemu Windows Server Windows Update nie jest automatycznie uruchamiane i stosowane są najnowsze aktualizacje.For Windows Server nodes, Windows Update does not automatically run and apply the latest updates. Zgodnie z regularnym harmonogramem Windows Update cyklu wydania i procesu weryfikacji należy przeprowadzić uaktualnienie w puli węzłów systemu Windows Server w klastrze AKS.On a regular schedule around the Windows Update release cycle and your own validation process, you should perform an upgrade on the Windows Server node pool(s) in your AKS cluster. Ten proces uaktualniania tworzy węzły z zainstalowanym najnowszym obrazem systemu Windows Server i poprawkami, a następnie usuwa starsze węzły.This upgrade process creates nodes that run the latest Windows Server image and patches, then removes the older nodes. Aby uzyskać więcej informacji na temat tego procesu, zobacz uaktualnianie puli węzłów w AKS.For more information on this process, see Upgrade a node pool in AKS.

Węzły są wdrażane w prywatnej podsieci sieci wirtualnej, bez przypisanych publicznych adresów IP.Nodes are deployed into a private virtual network subnet, with no public IP addresses assigned. W celu rozwiązywania problemów i zarządzania protokół SSH jest domyślnie włączony.For troubleshooting and management purposes, SSH is enabled by default. Ten dostęp SSH jest dostępny tylko przy użyciu wewnętrznego adresu IP.This SSH access is only available using the internal IP address.

Aby zapewnić magazyn, węzły używają usługi Azure Managed Disks.To provide storage, the nodes use Azure Managed Disks. W przypadku większości rozmiarów węzłów maszyny wirtualnej są to dyski w warstwie Premium obsługiwane przez dysków SSD o wysokiej wydajności.For most VM node sizes, these are Premium disks backed by high-performance SSDs. Dane przechowywane na dyskach zarządzanych są automatycznie szyfrowane w ramach platformy Azure.The data stored on managed disks is automatically encrypted at rest within the Azure platform. Aby zwiększyć nadmiarowość, te dyski również są bezpiecznie replikowane w centrum danych platformy Azure.To improve redundancy, these disks are also securely replicated within the Azure datacenter.

Środowiska Kubernetes, w AKS lub w innym miejscu, obecnie nie są całkowicie bezpieczne w celu zagwarantowania użycia wielu dzierżawców.Kubernetes environments, in AKS or elsewhere, currently aren't completely safe for hostile multi-tenant usage. Dodatkowe funkcje zabezpieczeń, takie jak zasady zabezpieczeń, lub bardziej precyzyjne Kubernetes kontroli dostępu opartej na rolach (Kubernetes RBAC) dla węzłów, utrudniają luki w zabezpieczeniach.Additional security features like Pod Security Policies, or more fine-grained Kubernetes role-based access control (Kubernetes RBAC) for nodes, make exploits more difficult. Jednak w celu zapewnienia prawdziwych zabezpieczeń przy uruchamianiu nieprzechodnich obciążeń z wieloma dzierżawcami funkcja hypervisor jest jedynym poziomem zabezpieczeń, który należy zaufać.However, for true security when running hostile multi-tenant workloads, a hypervisor is the only level of security that you should trust. Domena zabezpieczeń dla Kubernetes jest cały klaster, a nie pojedynczy węzeł.The security domain for Kubernetes becomes the entire cluster, not an individual node. W przypadku tych typów nieszkodliwych obciążeń z wieloma dzierżawcami należy używać klastrów fizycznie izolowanych.For these types of hostile multi-tenant workloads, you should use physically isolated clusters. Aby uzyskać więcej informacji na temat sposobów izolowania obciążeń, zobacz najlepsze rozwiązania dotyczące izolacji klastra w AKS.For more information on ways to isolate workloads, see Best practices for cluster isolation in AKS.

Izolacja obliczeniowaCompute isolation

Niektóre obciążenia mogą wymagać wysokiego stopnia odizolowania od innych obciążeń klientów ze względu na zgodność lub wymagania prawne.Certain workloads may require a high degree of isolation from other customer workloads due to compliance or regulatory requirements. W przypadku tych obciążeń platforma Azure udostępnia izolowane maszyny wirtualne, które mogą być używane jako węzły agentów w klastrze AKS.For these workloads, Azure provides isolated virtual machines, which can be used as the agent nodes in an AKS cluster. Te izolowane maszyny wirtualne są izolowane do określonego typu sprzętu i przeznaczone dla jednego klienta.These isolated virtual machines are isolated to a specific hardware type and dedicated to a single customer.

Aby użyć tych odizolowanych maszyn wirtualnych z klastrem AKS, wybierz jedną z odizolowanych maszyn wirtualnych, które są wymienione w tym miejscu jako rozmiar węzła podczas tworzenia klastra AKS lub dodania puli węzłów.To use these isolated virtual machines with an AKS cluster, select one of the isolated virtual machines sizes listed here as the Node size when creating an AKS cluster or adding a node pool.

Uaktualnienia klastraCluster upgrades

W celu zapewnienia bezpieczeństwa i zgodności lub korzystania z najnowszych funkcji platforma Azure oferuje narzędzia do organizowania uaktualnienia klastra AKS i składników programu.For security and compliance, or to use the latest features, Azure provides tools to orchestrate the upgrade of an AKS cluster and components. Ta aranżacja uaktualniania obejmuje zarówno składnik główny Kubernetes, jak i składniki agentów.This upgrade orchestration includes both the Kubernetes master and agent components. Można wyświetlić listę dostępnych wersji Kubernetes dla klastra AKS.You can view a list of available Kubernetes versions for your AKS cluster. Aby rozpocząć proces uaktualniania, należy określić jedną z tych dostępnych wersji.To start the upgrade process, you specify one of these available versions. Następnie platforma Azure bezpiecznie cordons i opróżnia każdy węzeł AKS i przeprowadza uaktualnienie.Azure then safely cordons and drains each AKS node and performs the upgrade.

Cordon i opróżnianieCordon and drain

W trakcie procesu uaktualniania węzły AKS są indywidualnie odizolowywane z klastra, więc nie zaplanowano nowych zasobników.During the upgrade process, AKS nodes are individually cordoned from the cluster so new pods aren't scheduled on them. Węzły są następnie opróżniane i uaktualniane w następujący sposób:The nodes are then drained and upgraded as follows:

  • Nowy węzeł jest wdrażany w puli węzłów.A new node is deployed into the node pool. Ten węzeł uruchamia najnowszą wersję obrazu systemu operacyjnego i poprawki.This node runs the latest OS image and patches.
  • Jeden z istniejących węzłów jest identyfikowany do uaktualnienia.One of the existing nodes is identified for upgrade. W tym węźle są bezpiecznie kończone i zaplanowani w innych węzłach w puli węzłów.Pods on this node are gracefully terminated and scheduled on the other nodes in the node pool.
  • Ten istniejący węzeł zostanie usunięty z klastra AKS.This existing node is deleted from the AKS cluster.
  • Następny węzeł w klastrze jest odizolowywane i opróżniany przy użyciu tego samego procesu, dopóki wszystkie węzły zostaną pomyślnie zastąpione w ramach procesu uaktualniania.The next node in the cluster is cordoned and drained using the same process until all nodes are successfully replaced as part of the upgrade process.

Aby uzyskać więcej informacji, zobacz Uaktualnianie klastra AKS.For more information, see Upgrade an AKS cluster.

Bezpieczeństwo sieciNetwork security

W przypadku połączeń i zabezpieczeń z sieciami lokalnymi można wdrożyć klaster AKS w istniejących podsieciach sieci wirtualnej platformy Azure.For connectivity and security with on-premises networks, you can deploy your AKS cluster into existing Azure virtual network subnets. Te sieci wirtualne mogą mieć połączenie sieci VPN typu lokacja-lokacja lub usługi Express Route z siecią lokalną.These virtual networks may have an Azure Site-to-Site VPN or Express Route connection back to your on-premises network. Kontrolery transferu danych przychodzących Kubernetes można definiować za pomocą prywatnych, wewnętrznych adresów IP, dzięki czemu usługi są dostępne tylko za pośrednictwem tego wewnętrznego połączenia sieciowego.Kubernetes ingress controllers can be defined with private, internal IP addresses so services are only accessible over this internal network connection.

Sieciowe grupy zabezpieczeń platformy AzureAzure network security groups

Aby odfiltrować przepływ ruchu w sieciach wirtualnych, na platformie Azure są stosowane reguły sieciowej grupy zabezpieczeń.To filter the flow of traffic in virtual networks, Azure uses network security group rules. Te reguły definiują źródłowe i docelowe zakresy adresów IP, porty i protokoły, które są dozwolone lub odrzucane przez dostęp do zasobów.These rules define the source and destination IP ranges, ports, and protocols that are allowed or denied access to resources. Tworzone są reguły domyślne, które zezwalają na ruch TLS do serwera interfejsu API Kubernetes.Default rules are created to allow TLS traffic to the Kubernetes API server. Podczas tworzenia usług przy użyciu modułów równoważenia obciążenia, mapowania portów lub tras transferu danych przychodzących program AKS automatycznie modyfikuje sieciowe grupy zabezpieczeń, aby ruch był odpowiednio przepływ.As you create services with load balancers, port mappings, or ingress routes, AKS automatically modifies the network security group for traffic to flow appropriately.

W przypadkach, gdy udostępniasz własną podsieć dla klastra AKS i chcesz zmodyfikować przepływ ruchu, nie należy modyfikować sieciowej grupy zabezpieczeń na poziomie podsieci zarządzanej przez AKS.In cases where you provide your own subnet for your AKS cluster and you wish to modify the flow of traffic, do not modify the subnet-level network security group managed by AKS. Można utworzyć dodatkowe sieciowe grupy zabezpieczeń na poziomie podsieci w celu zmodyfikowania przepływu ruchu, o ile nie zakłócają one ruchu potrzebnego do zarządzania klastrem, takich jak dostęp do usługi równoważenia obciążenia, komunikacja z płaszczyzną kontroli i ruch wychodzący .You may create additional subnet-level network security groups to modify the flow of traffic as long as they do not interfere with traffic needed for managing the cluster, such as load balancer access, communication with the control plane, and egress.

Zasady sieci KubernetesKubernetes network policy

Aby ograniczyć ruch sieciowy między zasobnikami w klastrze, AKS oferuje obsługę zasad sieciowych Kubernetes.To limit network traffic between pods in your cluster, AKS offers support for Kubernetes network policies. Przy użyciu zasad sieciowych można wybrać opcję zezwalania lub odrzucania określonych ścieżek sieciowych w klastrze na podstawie obszarów nazw i selektorów etykiet.With network policies, you can choose to allow or deny specific network paths within the cluster based on namespaces and label selectors.

Wpisy tajne usługi KubernetesKubernetes Secrets

Wpis tajny Kubernetes jest używany do dodawania poufnych danych do zasobników, takich jak poświadczenia dostępu lub klucze.A Kubernetes Secret is used to inject sensitive data into pods, such as access credentials or keys. Najpierw utwórz wpis tajny przy użyciu interfejsu API Kubernetes.You first create a Secret using the Kubernetes API. Podczas definiowania użytkownika lub wdrożenia można żądać określonego klucza tajnego.When you define your pod or deployment, a specific Secret can be requested. Wpisy tajne są dostarczane tylko do węzłów, które mają zaplanowaną w tym, że wymagają, a wpis tajny jest przechowywany w tmpfs, a nie zapisywany na dysku.Secrets are only provided to nodes that have a scheduled pod that requires it, and the Secret is stored in tmpfs, not written to disk. Po usunięciu ostatniego elementu na węźle, który wymaga wpisu tajnego, wpis tajny jest usuwany z tmpfs węzła.When the last pod on a node that requires a Secret is deleted, the Secret is deleted from the node's tmpfs. Wpisy tajne są przechowywane w danym obszarze nazw i można do nich uzyskiwać dostęp tylko w obrębie tego samego obszaru nazw.Secrets are stored within a given namespace and can only be accessed by pods within the same namespace.

Użycie wpisów tajnych zmniejsza poufne informacje, które są zdefiniowane w manifeście "YAML" lub "Service".The use of Secrets reduces the sensitive information that is defined in the pod or service YAML manifest. Zamiast tego należy zażądać wpisu tajnego przechowywanego na serwerze interfejsu API Kubernetes jako część manifestu YAML.Instead, you request the Secret stored in Kubernetes API Server as part of your YAML manifest. Takie podejście zapewnia tylko szczególny dostęp do klucza tajnego.This approach only provides the specific pod access to the Secret. Uwaga: pliki manifestu RAW Secret zawierają dane tajne w formacie base64 (szczegółowe informacje znajdują się w oficjalnej dokumentacji ).Please note: the raw secret manifest files contains the secret data in base64 format (see the official documentation for more details). W związku z tym ten plik powinien być traktowany jako informacje poufne i nigdy nie został przekazany do kontroli źródła.Therefore, this file should be treated as sensitive information, and never committed to source control.

Wpisy tajne Kubernetes są przechowywane w etcd, rozproszonym magazynie klucza i wartości.Kubernetes secrets are stored in etcd, a distributed key-value store. Magazyn Etcd jest w pełni zarządzany przez AKS, a dane są szyfrowane w ramach platformy Azure.Etcd store is fully managed by AKS and data is encrypted at rest within the Azure platform.

Następne krokiNext steps

Aby rozpocząć Zabezpieczanie klastrów AKS, zobacz Uaktualnianie klastra AKS.To get started with securing your AKS clusters, see Upgrade an AKS cluster.

W przypadku skojarzonych najlepszych rozwiązań należy zapoznać się z najlepszymi rozwiązaniami dotyczącymi zabezpieczeń i uaktualnień klastra w AKS i najlepszych rozwiązaniach dotyczących zabezpieczeń pod kątem bezpieczeństwa w AKS.For associated best practices, see Best practices for cluster security and upgrades in AKS and Best practices for pod security in AKS.

Aby uzyskać dodatkowe informacje na temat podstawowych pojęć związanych z Kubernetes i AKS, zobacz następujące artykuły:For additional information on core Kubernetes and AKS concepts, see the following articles: