Najlepsze rozwiązania dotyczące zabezpieczeń na platformie Azure Kubernetes Service (AKS)Best practices for pod security in Azure Kubernetes Service (AKS)

Podczas opracowywania i uruchamiania aplikacji w usłudze Azure Kubernetes Service (AKS), bezpieczeństwo Twojego zasobnika jest kluczowym zagadnieniem.As you develop and run applications in Azure Kubernetes Service (AKS), the security of your pods is a key consideration. Aplikacje powinny być przeznaczone dla zasad minimalnej liczby wymaganych uprawnień.Your applications should be designed for the principle of least number of privileges required. Bezpieczeństwo prywatnych danych jest na początku przeznaczone dla klientów.Keeping private data secure is top of mind for customers. Nie chcesz, aby poświadczenia, takie jak parametry połączenia bazy danych, klucze lub wpisy tajne oraz certyfikaty ujawnione na świecie zewnętrznym, w którym osoba atakująca może wykorzystać te klucze tajne do złośliwych celów.You don't want credentials like database connection strings, keys, or secrets and certificates exposed to the outside world where an attacker could take advantage of those secrets for malicious purposes. Nie dodawaj ich do kodu ani nie osadzaj ich w obrazach kontenera.Don't add them to your code or embed them in your container images. Takie podejście spowoduje utworzenie ryzyka związanego z narażeniem i ograniczenie możliwości przełączenia tych poświadczeń, ponieważ należy ponownie skompilować obrazy kontenerów.This approach would create a risk for exposure and limit the ability to rotate those credentials as the container images will need to be rebuilt.

Ten artykuł dotyczący najlepszych rozwiązań koncentruje się na sposobach zabezpieczania zespołów w AKS.This best practices article focuses on how to secure pods in AKS. Omawiane kwestie:You learn how to:

  • Użyj kontekstu zabezpieczeń pod, aby ograniczyć dostęp do procesów i usług lub eskalacji uprawnieńUse pod security context to limit access to processes and services or privilege escalation
  • Uwierzytelnianie za pomocą innych zasobów platformy Azure przy użyciu tożsamości zarządzanychAuthenticate with other Azure resources using pod managed identities
  • Żądaj i pobieraj poświadczenia z magazynu cyfrowego, takiego jak Azure Key VaultRequest and retrieve credentials from a digital vault such as Azure Key Vault

Można także zapoznać się z najlepszymi rozwiązaniami dotyczącymi zabezpieczeń klastra i zarządzania obrazami kontenerów.You can also read the best practices for cluster security and for container image management.

Bezpieczny dostęp pod dostępem do zasobówSecure pod access to resources

Wskazówki dotyczące najlepszych rozwiązań — do uruchamiania jako inny użytkownik lub Grupa i ograniczania dostępu do podstawowych procesów i usług węzła, definiowania ustawień kontekstu zabezpieczeń.Best practice guidance - To run as a different user or group and limit access to the underlying node processes and services, define pod security context settings. Przypisz wymaganą minimalną liczbę uprawnień.Assign the least number of privileges required.

Aby aplikacje działały prawidłowo, należy uruchomić jako zdefiniowany użytkownika lub grupę, a nie jako element główny.For your applications to run correctly, pods should run as a defined user or group and not as root. securityContextDla elementu pod lub kontenera można zdefiniować ustawienia, takie jak RunAsUser lub fsGroup , aby założyć odpowiednie uprawnienia.The securityContext for a pod or container lets you define settings such as runAsUser or fsGroup to assume the appropriate permissions. Należy przypisać tylko wymagane uprawnienia użytkownika lub grupy, a nie użyć kontekstu zabezpieczeń jako środka do założenia dodatkowych uprawnień.Only assign the required user or group permissions, and don't use the security context as a means to assume additional permissions. Ustawienia runAsUser, eskalacji uprawnień i inne funkcje systemu Linux są dostępne tylko w węzłach i w systemach Linux.The runAsUser, privilege escalation, and other Linux capabilities settings are only available on Linux nodes and pods.

Jeśli użytkownik nie jest użytkownikiem głównym, kontenery nie mogą być powiązane z portami uprzywilejowanymi w obszarze 1024.When you run as a non-root user, containers cannot bind to the privileged ports under 1024. W tym scenariuszu usługi Kubernetes Services mogą służyć do uzyskania informacji o tym, że aplikacja działa na określonym porcie.In this scenario, Kubernetes Services can be used to disguise the fact that an app is running on a particular port.

Kontekst zabezpieczeń pod może również definiować dodatkowe możliwości lub uprawnienia do uzyskiwania dostępu do procesów i usług.A pod security context can also define additional capabilities or permissions for accessing processes and services. Można ustawić następujące typowe definicje kontekstu zabezpieczeń:The following common security context definitions can be set:

  • allowPrivilegeEscalation określa, czy pod warunkiem, że może przyjmować uprawnienia root .allowPrivilegeEscalation defines if the pod can assume root privileges. Zaprojektuj swoje aplikacje, aby to ustawienie było zawsze ustawione na wartość false.Design your applications so this setting is always set to false.
  • Możliwości systemu Linux pozwalają na dostęp do węzła podstawowego węzłów.Linux capabilities let the pod access underlying node processes. Weź pod uwagę możliwość przypisywania tych funkcji.Take care with assigning these capabilities. Przypisz wymaganą minimalną liczbę uprawnień.Assign the least number of privileges needed. Aby uzyskać więcej informacji, zobacz możliwości systemu Linux.For more information, see Linux capabilities.
  • Etykiety SELinux to moduł zabezpieczeń jądra systemu Linux, który umożliwia definiowanie zasad dostępu dla usług, procesów i dostępu do systemu plików.SELinux labels is a Linux kernel security module that lets you define access policies for services, processes, and filesystem access. Należy ponownie przypisać najmniejszą liczbę wymaganych uprawnień.Again, assign the least number of privileges needed. Aby uzyskać więcej informacji, zobacz Opcje SELinux w KubernetesFor more information, see SELinux options in Kubernetes

W poniższym przykładzie manifestu YAML ustawia ustawienia kontekstu zabezpieczeń, aby zdefiniować:The following example pod YAML manifest sets security context settings to define:

  • Pod uruchomieniem jako identyfikator użytkownika 1000 i częścią grupy o identyfikatorze 2000Pod runs as user ID 1000 and part of group ID 2000
  • Nie można eskalować uprawnień do użycia rootCan't escalate privileges to use root
  • Umożliwia funkcjom systemu Linux dostęp do interfejsów sieciowych i zegara czasu rzeczywistego hosta (sprzętu)Allows Linux capabilities to access network interfaces and the host's real-time (hardware) clock
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    fsGroup: 2000
  containers:
    - name: security-context-demo
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      securityContext:
        runAsUser: 1000
        allowPrivilegeEscalation: false
        capabilities:
          add: ["NET_ADMIN", "SYS_TIME"]

Aby określić, jakie ustawienia kontekstu zabezpieczeń są potrzebne, Pracuj z operatorem klastra.Work with your cluster operator to determine what security context settings you need. Spróbuj zaprojektować aplikacje w celu zminimalizowania dodatkowych uprawnień i uzyskania dostępu do programu.Try to design your applications to minimize additional permissions and access the pod requires. Dostępne są dodatkowe funkcje zabezpieczeń umożliwiające ograniczenie dostępu przy użyciu AppArmor i seccomp (Zabezpieczanie obliczeń), które mogą być implementowane przez operatorów klastra.There are additional security features to limit access using AppArmor and seccomp (secure computing) that can be implemented by cluster operators. Aby uzyskać więcej informacji, zobacz bezpieczny dostęp do kontenera do zasobów.For more information, see Secure container access to resources.

Ogranicz ekspozycję poświadczeńLimit credential exposure

Wskazówki dotyczące najlepszych rozwiązań — nie Definiuj poświadczeń w kodzie aplikacji.Best practice guidance - Don't define credentials in your application code. Użyj zarządzanych tożsamości dla zasobów platformy Azure, aby umożliwić usłudze na żądanie dostępu do innych zasobów.Use managed identities for Azure resources to let your pod request access to other resources. Magazyn cyfrowy, taki jak Azure Key Vault, powinien również służyć do przechowywania i pobierania kluczy cyfrowych i poświadczeń.A digital vault, such as Azure Key Vault, should also be used to store and retrieve digital keys and credentials. Tożsamości zarządzane pod są przeznaczone wyłącznie dla systemów Linux i obrazów kontenerów.Pod managed identities is intended for use with Linux pods and container images only.

Aby ograniczyć ryzyko ujawnienia poświadczeń w kodzie aplikacji, należy unikać stosowania poświadczeń stałych lub udostępnionych.To limit the risk of credentials being exposed in your application code, avoid the use of fixed or shared credentials. Poświadczeń lub kluczy nie należy uwzględniać bezpośrednio w kodzie.Credentials or keys shouldn't be included directly in your code. Jeśli te poświadczenia są ujawniane, aplikacja musi zostać zaktualizowana i wdrożona ponownie.If these credentials are exposed, the application needs to be updated and redeployed. Lepszym rozwiązaniem jest nadanie podstawom tożsamości i sposobu samodzielnego uwierzytelniania lub automatycznego pobierania poświadczeń z magazynu cyfrowego.A better approach is to give pods their own identity and way to authenticate themselves, or automatically retrieve credentials from a digital vault.

Korzystanie z projektów nadrzędnych obliczeń kontenerów platformy AzureUse Azure Container Compute Upstream projects

Ważne

Skojarzone projekty open source AKS nie są obsługiwane przez pomoc techniczną platformy Azure.Associated AKS open source projects are not supported by Azure technical support. Są one udostępniane użytkownikom do samodzielnego instalowania w klastrach i zbierania opinii z naszej społeczności.They are provided for users to self-install into clusters and gather feedback from our community.

Następujące skojarzone projekty typu open source AKS umożliwiają automatyczne uwierzytelnianie z magazynów lub zażądanie poświadczeń oraz kluczy z magazynu cyfrowego.The following associated AKS open source projects let you automatically authenticate pods or request credentials and keys from a digital vault. Te projekty są obsługiwane przez zespół nadrzędny usługi obliczeniowej Azure Container i są częścią szerszej listy projektów dostępnych do użycia.These projects are maintained by the Azure Container Compute Upstream team and are part of a broader list of projects available for use.

Użyj tożsamości zarządzanychUse pod managed identities

Zarządzana tożsamość zasobów platformy Azure pozwala na uwierzytelnianie pod względem usług platformy Azure, które go obsługują, takich jak Storage czy SQL.A managed identity for Azure resources lets a pod authenticate itself against Azure services that support it, such as Storage or SQL. W obszarze jest przypisana tożsamość platformy Azure, która umożliwia im uwierzytelnianie Azure Active Directory i odbieranie cyfrowego tokenu.The pod is assigned an Azure Identity that lets them authenticate to Azure Active Directory and receive a digital token. Ten token cyfrowy może być przedstawiony innym usługom platformy Azure, które sprawdzają, czy jest on autoryzowany do uzyskiwania dostępu do usługi i wykonując wymagane akcje.This digital token can be presented to other Azure services that check if the pod is authorized to access the service and perform the required actions. Takie podejście oznacza, że dla parametrów połączenia bazy danych nie są wymagane żadne wpisy tajne.This approach means that no secrets are required for database connection strings, for example. Uproszczony przepływ pracy dotyczący tożsamości zarządzanej pod, jest przedstawiony na poniższym diagramie:The simplified workflow for pod managed identity is shown in the following diagram:

Uproszczony przepływ pracy dla tożsamości zarządzanej pod na platformie Azure

Przy użyciu tożsamości zarządzanej kod aplikacji nie musi zawierać poświadczeń, aby uzyskać dostęp do usługi, takiej jak usługa Azure Storage.With a managed identity, your application code doesn't need to include credentials to access a service, such as Azure Storage. Każdy z nich jest uwierzytelniany przy użyciu własnej tożsamości, dzięki czemu można przeprowadzać inspekcję i przeglądanie dostępu.As each pod authenticates with its own identity, so you can audit and review access. Jeśli aplikacja łączy się z innymi usługami platformy Azure, Użyj tożsamości zarządzanych, aby ograniczyć ponowne użycie poświadczeń i ryzyko narażenia.If your application connects with other Azure services, use managed identities to limit credential reuse and risk of exposure.

Aby uzyskać więcej informacji o tożsamościach pod, zobacz Konfigurowanie klastra AKS do użycia z tożsamościami zarządzanymi i aplikacjami .For more information about pod identities, see Configure an AKS cluster to use pod managed identities and with your applications

Użyj Azure Key Vault ze sterownikiem CSI magazynu kluczy tajnychUse Azure Key Vault with Secrets Store CSI Driver

Korzystanie z projektu tożsamości pod Identity umożliwia uwierzytelnianie w celu obsługi usług platformy Azure.Using the pod identity project enables authentication against supporting Azure services. W przypadku własnych usług lub aplikacji bez tożsamości zarządzanych dla zasobów platformy Azure można nadal uwierzytelniać się przy użyciu poświadczeń lub kluczy.For your own services or applications without managed identities for Azure resources, you can still authenticate using credentials or keys. Magazyn cyfrowy może służyć do przechowywania zawartości tego klucza tajnego.A digital vault can be used to store these secret contents.

Gdy aplikacje potrzebują poświadczeń, komunikują się z magazynem cyfrowym, pobierają najnowszą zawartość, a następnie nawiązują połączenie z wymaganą usługą.When applications need a credential, they communicate with the digital vault, retrieve the latest secret contents, and then connect to the required service. Azure Key Vault może to być ten magazyn cyfrowy.Azure Key Vault can be this digital vault. Uproszczony przepływ pracy służący do pobierania poświadczeń z Azure Key Vault przy użyciu tożsamości zarządzanych pod na poniższym diagramie:The simplified workflow for retrieving a credential from Azure Key Vault using pod managed identities is shown in the following diagram:

Uproszczony przepływ pracy służący do pobierania poświadczeń z Key Vault przy użyciu tożsamości zarządzanej pod

Dzięki Key Vault można przechowywać i regularnie przekazywać wpisy tajne, takie jak poświadczenia, klucze konta magazynu lub certyfikaty.With Key Vault, you store and regularly rotate secrets such as credentials, storage account keys, or certificates. Azure Key Vault można zintegrować z klastrem AKS przy użyciu dostawcy Azure Key Vault dla sterownika CSI magazynuSecret.You can integrate Azure Key Vault with an AKS cluster using the Azure Key Vault provider for the Secrets Store CSI Driver. Sterownik CSI magazynu wpisów tajnych umożliwia klastrowi AKS natywne pobieranie zawartości wpisu tajnego z Key Vault i bezpieczne dostarczanie ich tylko do żądania pod.The Secrets Store CSI driver enables the AKS cluster to natively retrieve secret contents from Key Vault and securely provide them only to the requesting pod. Pracuj z operatorem klastra, aby wdrożyć sterownik CSI magazynu kluczy tajnych na węzłach procesu roboczego AKS.Work with your cluster operator to deploy the Secrets Store CSI Driver onto AKS worker nodes. Możesz użyć tożsamości zarządzanej pod, aby zażądać dostępu do Key Vault i pobrać zawartość klucza tajnego wymaganą przez sterownik CSI magazynu wpisów tajnych.You can use a pod managed identity to request access to Key Vault and retrieve the secret contents needed through the Secrets Store CSI Driver.

Azure Key Vault za pomocą sterownika CSI magazynu kluczy tajnych można używać w przypadku węzłów systemu Linux i Kubernetes, które wymagają wersji 1,16 lub nowszej.Azure Key Vault with Secrets Store CSI Driver can be used for Linux nodes and pods which require a Kubernetes version of 1.16 or greater. W przypadku węzłów systemu Windows i Kubernetes jest wymagana wersja 1,18 lub nowsza.For Windows nodes and pods a Kubernetes version of 1.18 or greater is required.

Następne krokiNext steps

Ten artykuł koncentruje się na sposobach zabezpieczania swoich zasobników.This article focused on how to secure your pods. Aby zaimplementować niektóre z tych obszarów, zobacz następujące artykuły:To implement some of these areas, see the following articles: