Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas tworzenia i uruchamiania aplikacji w usłudze Azure Kubernetes Service (AKS) bezpieczeństwo zasobników jest kluczowym czynnikiem. Aplikacje powinny być zaprojektowane z myślą o zasadzie najmniejszej liczby wymaganych uprawnień. Zabezpieczanie prywatnych danych jest najważniejsze dla klientów. Nie chcesz, aby poświadczenia, takie jak parametry połączenia bazy danych, klucze, tajne dane czy certyfikaty były ujawniane światu zewnętrznemu, gdzie osoba atakująca mogłaby wykorzystać te tajne dane do złośliwych celów. Nie dodawaj ich do kodu ani osadzaj ich na obrazach kontenerów. Takie podejście wiązałoby się z ryzykiem narażenia na ujawnienie i ograniczeniem zdolności do rotacji tych poświadczeń, ponieważ obrazy kontenerów będą musiały zostać ponownie skompilowane.
Ten artykuł dotyczący najlepszych rozwiązań koncentruje się na sposobie zabezpieczania zasobników w usłudze AKS. Uczysz się, jak:
- Używanie kontekstu zabezpieczeń zasobnika w celu ograniczenia dostępu do procesów i usług lub eskalacji uprawnień
- Uwierzytelnianie przy użyciu innych zasobów platformy Azure przy użyciu Tożsamość obciążeń Microsoft Entra
- Żądanie i pobranie poświadczeń z magazynu cyfrowego, takiego jak usługa Azure Key Vault
Możesz również zapoznać się z najlepszymi rozwiązaniami dotyczącymi zabezpieczeń klastra i zarządzania obrazami kontenerów.
Zabezpiecz dostęp zasobnika do zasobów
Wskazówki dotyczące najlepszych praktyk - Aby uruchomić jako inny użytkownik lub grupa oraz aby ograniczyć dostęp do podstawowych procesów i usług węzła, zdefiniuj ustawienia kontekstu zabezpieczeń zasobnika. Przypisz najmniejszą wymaganą liczbę uprawnień.
Aby aplikacje działały poprawnie, zasobniki powinny być uruchamiane jako zdefiniowany użytkownik lub grupa, a nie jako root. Definicja securityContext
dla zasobnika lub kontenera pozwala na określenie ustawień, takich jak runAsUser lub fsGroup, aby przyjąć odpowiednie uprawnienia. Przypisz tylko wymagane uprawnienia użytkownika lub grupy i nie używaj kontekstu zabezpieczeń jako środka, aby objąć dodatkowe uprawnienia. Ustawienia runAsUser, privilege escalation i inne ustawienia funkcji systemu Linux są dostępne tylko w węzłach i zasobnikach systemu Linux.
Kiedy uruchamiasz jako użytkownik niebędący roota, kontenery nie mogą się wiązać z uprzywilejowanymi portami poniżej 1024. W tym scenariuszu usługi Kubernetes Services mogą służyć do ukrywania faktu, że aplikacja działa na określonym porcie.
Kontekst zabezpieczeń zasobnika może również definiować dodatkowe możliwości lub uprawnienia dostępu do procesów i usług. Można ustawić następujące typowe definicje kontekstu zabezpieczeń:
- allowPrivilegeEscalation określa, czy zasobnik może przyjąć uprawnienia root. Zaprojektuj aplikacje, aby to ustawienie zawsze było ustawione na wartość false.
- Funkcje Linux umożliwiają podowi dostęp do podstawowych procesów węzłów. Zadbaj o przypisywanie tych możliwości. Przypisz najmniejszą wymaganą liczbę uprawnień. Aby uzyskać więcej informacji, zobacz Możliwości systemu Linux.
- 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. Ponownie przypisz najmniejszą wymaganą liczbę uprawnień. Aby uzyskać więcej informacji, zobacz opcje SELinux na platformie Kubernetes
Poniższy przykładowy manifest YAML ustawia ustawienia kontekstu zabezpieczeń w celu zdefiniowania:
- Pod działa jako użytkownik 1000 i grupa 2000
- Nie można eskalować uprawnień do użycia
root
- Umożliwia zdolnościom systemu Linux dostęp do interfejsów sieciowych i zegara czasu rzeczywistego hosta (sprzętowego)
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"]
Skontaktuj się z operatorem klastra, aby określić potrzebne ustawienia kontekstu zabezpieczeń. Spróbuj zaprojektować swoje aplikacje tak, aby zminimalizować dodatkowe uprawnienia oraz dostęp, jaki wymaga pod. Istnieją dodatkowe funkcje zabezpieczeń, które umożliwiają ograniczenie dostępu przy użyciu programu AppArmor i seccomp (bezpiecznego przetwarzania), które mogą być implementowane przez operatory klastra. Aby uzyskać więcej informacji, zobacz Bezpieczny dostęp kontenera do zasobów.
Ograniczanie ujawnienia poświadczeń
Wskazówki dotyczące najlepszych rozwiązań — nie należy definiować poświadczeń w kodzie aplikacji. Użyj zarządzanych tożsamości dla zasobów Microsoft Azure, aby umożliwić Twojemu podowi żądanie dostępu do innych zasobów. Magazyn cyfrowy, taki jak usługa Azure Key Vault, powinien być również używany do przechowywania i pobierania kluczy cyfrowych i poświadczeń. Tożsamości zarządzane przez zasobniki są przeznaczone tylko do użytku z zasobnikami systemu Linux i obrazami kontenerów.
Aby ograniczyć ryzyko ujawnienia poświadczeń w kodzie aplikacji, unikaj używania stałych lub udostępnionych poświadczeń. Poświadczenia lub klucze nie powinny być uwzględniane bezpośrednio w kodzie. Jeśli te poświadczenia zostaną ujawnione, aplikacja musi zostać zaktualizowana i wdrożona ponownie. Lepszym podejściem jest nadanie zasobnikom ich własnej tożsamości i metod uwierzytelniania lub automatyczne pobieranie poświadczeń z cyfrowego sejfu.
Użyj Tożsamości obciążenia Microsoft Entra
Tożsamość obciążenia to tożsamość używana przez aplikację działającą na podzie, która może uwierzytelniać się w innych usługach Azure, które ją obsługują, takich jak Magazynowanie lub SQL. Integruje się z możliwościami natywnymi dla platformy Kubernetes w celu federacji z zewnętrznymi dostawcami tożsamości. W tym modelu zabezpieczeń klaster usługi AKS działa jako wystawca tokenu, identyfikator Entra firmy Microsoft używa programu OpenID Connect do odnajdywania publicznych kluczy podpisywania i weryfikowania autentyczności tokenu konta usługi przed wymianą go dla tokenu Firmy Microsoft Entra. Obciążenie robocze może wymienić token konta usługi rzutowany na jego wolumin na token Microsoft Entra za pomocą biblioteki klienta Azure Identity przy użyciu zestawu Azure SDK lub biblioteki Microsoft Authentication Library (MSAL).
Aby uzyskać więcej informacji na temat tożsamości obciążeń, zobacz Konfigurowanie klastra AKS do używania identyfikatora obciążeń Microsoft Entra z aplikacjami
Używanie usługi Azure Key Vault ze sterownikiem CSI dla przechowywania tajnych danych
Użycie Microsoft Entra Workload ID umożliwia uwierzytelnianie przeciwko obsługiwanym usługom platformy Azure. W przypadku własnych usług lub aplikacji bez tożsamości zarządzanych dla zasobów platformy Azure nadal można uwierzytelnić się przy użyciu poświadczeń lub kluczy. Sejf cyfrowy może służyć do przechowywania tej sekretnej zawartości.
Gdy aplikacje potrzebują poświadczeń, komunikują się z magazynem cyfrowym, pobierają najnowsze tajne dane, a następnie łączą się z wymaganą usługą. Usługa Azure Key Vault może być tym cyfrowym sejfem. Uproszczony przepływ pracy pobierania poświadczeń z usługi Azure Key Vault za pomocą zarządzanych tożsamości podów przedstawiono na poniższym diagramie:
Usługa Key Vault przechowuje i regularnie wymienia wpisy tajne, takie jak poświadczenia, klucze konta magazynu lub certyfikaty. Usługę Azure Key Vault można zintegrować z klastrem usługi AKS przy użyciu dostawcy usługi Azure Key Vault dla sterownika CSI dla magazynu tajemnic. Sterownik CSI magazynu wpisów tajnych umożliwia klastrowi usługi AKS natywne pobieranie zawartości wpisu tajnego z usługi Key Vault i bezpieczne dostarczanie ich tylko do zasobnika żądającego. Pracuj z operatorem klastra, aby wdrożyć sterownik CSI systemu przechowywania tajemnic na węzłach roboczych usługi AKS. Możesz użyć Identyfikator obciążeń Microsoft Entra, aby zażądać dostępu do usługi Key Vault i pobrać wymaganą zawartość tajemnicy za pośrednictwem sterownika CSI sklepu tajemnic.
Następne kroki
W tym artykule opisano, jak zabezpieczyć zasobniki. Aby zaimplementować niektóre z tych obszarów, zobacz następujące artykuły:
Azure Kubernetes Service