
FrĂŒher oder spĂ€ter stellt sich bei der Verwendung eines jeden Systems die Frage nach der Sicherheit: GewĂ€hrleistung der Authentifizierung, Trennung von Rechten, Audit und anderen Aufgaben. FĂŒr Kubernetes gibt es bereits , die es ermöglichen, die Standards sogar in sehr anspruchsvollen Umgebungen einzuhalten⊠Dieses Material befasst sich mit den grundlegenden Aspekten der Sicherheit, die im Rahmen der integrierten Mechanismen von K8s umgesetzt sind. Es ist in erster Linie fĂŒr diejenigen nĂŒtzlich, die mit Kubernetes beginnen â als Ausgangspunkt fĂŒr die Erarbeitung sicherheitsrelevanter Fragen.
Authentifizierung
In Kubernetes gibt es zwei Arten von Benutzern:
- Service Accounts â Konten, die ĂŒber die Kubernetes API verwaltet werden;
- Users â ânormaleâ Benutzer, die von externen, unabhĂ€ngigen Diensten verwaltet werden.
Der Hauptunterschied zwischen diesen Typen besteht darin, dass es fĂŒr Service Accounts spezielle Objekte in der Kubernetes API gibt (sie heiĂen genau so â ServiceAccounts), die an einen Namensraum und ein Set von Authentifizierungsdaten gebunden sind, die im Cluster in Objekten vom Typ Secrets gespeichert sind. Solche Benutzer (Service Accounts) sind hauptsĂ€chlich fĂŒr die Verwaltung der Zugriffsrechte fĂŒr Prozesse, die im Kubernetes-Cluster laufen, bestimmt.
RegulĂ€re Users haben keine EintrĂ€ge in der Kubernetes API: Ihre Verwaltung muss ĂŒber externe Mechanismen erfolgen. Sie sind fĂŒr Menschen oder Prozesse gedacht, die auĂerhalb des Clusters leben.
Jede Anfrage an die API ist entweder an ein Service Account, an einen User oder anonym.
Die Authentifizierungsdaten eines Benutzers umfassen:
- Benutzername â Benutzername (unterscheidet zwischen GroĂ- und Kleinschreibung!);
- UID â ein maschinenlesbarer Identifikationsstring, der "konsistenter und einzigartiger ist als der Benutzername";
- Gruppen â eine Liste von Gruppen, zu denen der Benutzer gehört;
- Extra â zusĂ€tzliche Felder, die von dem Autorisierungsmechanismus verwendet werden können.
Kubernetes kann eine Vielzahl von Authentifizierungsmechanismen nutzen: X509-Zertifikate, Bearer-Tokens, authentifizierende Proxys, HTTP Basic Auth. Mit diesen Mechanismen lassen sich zahlreiche Autorisierungsschemata realisieren: von einer statischen Datei mit Passwörtern bis hin zu OpenID OAuth2.
DarĂŒber hinaus ist die gleichzeitige Nutzung mehrerer Autorisierungsschemata zulĂ€ssig. StandardmĂ€Ăig werden im Cluster verwendet:
- Service Account-Tokens â fĂŒr Service Accounts;
- X509 â fĂŒr Users.
Die Frage zur Verwaltung von ServiceAccounts geht ĂŒber den Rahmen dieses Artikels hinaus. Ich empfehle Interessierten, die offiziellen Dokumentationsseite zu konsultieren, um mehr ĂŒber dieses Thema zu erfahren. . Wir werden die Funktionsweise von X.509-Zertifikaten nĂ€her untersuchen.
Zertifikate fĂŒr Benutzer (X.509)
Die klassische Vorgehensweise bei der Arbeit mit Zertifikaten beinhaltet:
- Generierung eines SchlĂŒssels:
mkdir -p ~/mynewuser/.certs/ openssl genrsa -out ~/mynewuser.key 2048 - Generierung einer Zertifikatsanforderung:
openssl req -new -key ~/mynewuser.key -out ~/mynewuser.csr -subj "/CN=mynewuser/O=company" - Verarbeitung der Zertifikatsanforderung mit den CA-SchlĂŒsseln des Kubernetes-Clusters, um ein Benutzerzertifikat zu erhalten (zum Erhalt des Zertifikats muss ein Konto verwendet werden, das Zugriff auf den SchlĂŒssel der Zertifizierungsstelle des Kubernetes-Clusters hat, der sich standardmĂ€Ăig in
/etc/kubernetes/pki/ca.key):openssl x509 -req -in ~/mynewuser.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out ~/mynewuser.crt -days 500 - Erstellung einer Konfigurationsdatei:
- Beschreibung des Clusters (geben Sie die Adresse und den Speicherort der CA-Zertifikatsdatei der jeweiligen Clusterinstallation an):
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.100.200:6443 - oder â als nichtempfohlene Variante â es kann der Root-Zertifikat nicht angegeben werden (in diesem Fall wird kubectl die Genauigkeit des API-Servers des Clusters nicht ĂŒberprĂŒfen):
kubectl config set-cluster kubernetes --insecure-skip-tls-verify=true --server=https://192.168.100.200:6443 - HinzufĂŒgen eines Benutzers zur Konfigurationsdatei:
kubectl config set-credentials mynewuser --client-certificate=.certs/mynewuser.crt --client-key=.certs/mynewuser.key - HinzufĂŒgen eines Kontexts:
kubectl config set-context mynewuser-context --cluster=kubernetes --namespace=target-namespace --user=mynewuser - Festlegung des Standardkontexts:
kubectl config use-context mynewuser-context
- Beschreibung des Clusters (geben Sie die Adresse und den Speicherort der CA-Zertifikatsdatei der jeweiligen Clusterinstallation an):
Nach den oben beschriebenen VorgÀngen wird die Konfigurationsdatei folgende Form haben: .kube/config apiVersion: v1 clusters: - cluster: certificate-authority: /etc/kubernetes/pki/ca.crt server: https://192.168.100.200:6443 name: kubernetes contexts: - context: cluster: kubernetes namespace: target-namespace user: mynewuser name: mynewuser-context current-context: mynewuser-context kind: Config preferences: {} users: - name: mynewuser user: client-certificate: /home/mynewuser/.certs/mynewuser.crt client-key: /home/mynewuser/.certs/mynewuser.key
Um den Transfer der Konfiguration zwischen Konten und Servern zu erleichtern, ist es sinnvoll, die Werte der folgenden SchlĂŒssel zu bearbeiten:certificate-authority
-
client-certificate -
client-key -
Zu diesem Zweck können die angegebenen Dateien mit base64 kodiert und in die Konfiguration eingetragen werden, indem Sie dem SchlĂŒsselname das Suffix
-data hinzufĂŒgen, d.h. erhaltencertificate-authority-data usw. Zertifikate mit kubeadm
Mit der Version
Kubernetes 1.15 Die Arbeit mit Zertifikaten ist dank der Alpha-Version ihrer UnterstĂŒtzung in . Zum Beispiel könnte die Generierung einer Konfigurationsdatei mit BenutzerschlĂŒsseln jetzt so aussehen:
kubeadm alpha kubeconfig user --client-name=mynewuser --apiserver-advertise-address 192.168.100.200 NB: Erforderliche Werbung Adresse kann in der Konfiguration des API-Servers eingesehen werden, die standardmĂ€Ăig unter /etc/kubernetes/manifests/kube-apiserver.yaml.
Der resultierende Konfig wird in stdout ausgegeben. Er muss in ~/.kube/config dem Benutzerkonto oder in der Datei, die in der Umgebungsvariable KUBECONFIG.
Tiefer graben
FĂŒr diejenigen, die sich eingehender mit den beschriebenen Fragen beschĂ€ftigen möchten:
- zur Arbeit mit Zertifikaten in der offiziellen Kubernetes-Dokumentation;
- , in dem das Thema der Zertifikate aus praktischer Sicht behandelt wird.
- zur Authentifizierung in Kubernetes.
Autorisierung
Das autorisierte Konto hat standardmĂ€Ăig keine Berechtigungen fĂŒr Aktionen im Cluster. Um Berechtigungen in Kubernetes zu erteilen, wurde ein Autorisierungsmechanismus implementiert.
Bis zur Version 1.6 wurde in Kubernetes ein Autorisierungstyp namens ABAC (Attributbasierte Zugriffskontrolle) verwendet. Details dazu finden Sie in . Momentan wird dieser Ansatz als veraltet (legacy) angesehen, jedoch können Sie ihn immer noch zusammen mit anderen Autorisierungstypen verwenden.
Der aktuelle (und flexiblere) Ansatz zur Aufteilung von Zugriffsrechten im Cluster heiĂt RBAC (). Er wurde mit der Version stabil erklĂ€rt. RBAC implementiert ein Berechtigungsmodell, in dem alles, was nicht ausdrĂŒcklich erlaubt ist, verboten ist.
Um RBAC zu aktivieren, mĂŒssen Sie den Kubernetes API-Server mit dem Parameter --authorization-mode=RBACstarten. Die Parameter werden im Manifest des API-Servers festgelegt, das standardmĂ€Ăig unter dem Pfad /etc/kubernetes/manifests/kube-apiserver.yamlin der Sektion command. Ăbrigens ist RBAC standardmĂ€Ăig bereits aktiviert, daher mĂŒssen Sie sich wahrscheinlich keine Sorgen darĂŒber machen: Sie können sich ĂŒber den Wert authorization-mode (in der bereits erwĂ€hnten kube-apiserver.yaml). Ăbrigens können unter seinen Werten auch andere Autorisierungstypen auftauchen (node, webhook, always allow), aber die Betrachtung dieser lassen wir im Rahmen des Materials zurĂŒck.
Ăbrigens haben wir bereits veröffentlicht mit einem recht detaillierten Bericht ĂŒber die Prinzipien und Merkmale der Arbeit mit RBAC, daher beschrĂ€nke ich mich im Folgenden auf eine kurze AufzĂ€hlung der Grundlagen und Beispiele.
FĂŒr die Verwaltung des Zugriffs in Kubernetes ĂŒber RBAC werden die folgenden API-EntitĂ€ten verwendet:
-
RolleundClusterrolleâ Rollen, die zur Beschreibung von Zugriffsrechten dienen: -
Rolleerlaubt es, Rechte innerhalb eines Namensraums zu beschreiben; -
Clusterrolleâ im Rahmen eines Clusters, einschlieĂlich cluster-spezifischer Objekte wie Knoten, non-resources URLs (d.h. nicht mit Kubernetes-Ressourcen verbunden â beispielsweise,/version,/logs,/api*); -
RoleBindingundClusterRoleBindingâ dient zur BindungRolleundClusterrollean einen Benutzer, eine Benutzergruppe oder ein ServiceAccount.
Die EntitĂ€ten Role und RoleBinding sind namespacespezifisch, d.h. sie mĂŒssen innerhalb eines Namensraums liegen. RoleBinding kann jedoch auf ClusterRole verweisen, was es ermöglicht, eine Menge Standardberechtigungen zu erstellen und den Zugriff damit zu verwalten.
Rollen beschreiben Rechte mithilfe von Regel-Sets, die Folgendes enthalten:
- API-Gruppen â siehe zu apiGroups und Ausgabe
kubectl api-resources; - Ressourcen (resources:
Pod,Namespace,deploymentusw.); - Verben (verbs:
set,updateusw.). - Ressourcennamen (
resourceNames) â fĂŒr den Fall, dass Zugriff auf eine bestimmte Ressource gewĂ€hrt werden soll, und nicht auf alle Ressourcen dieses Typs.
Eine detailliertere Analyse der Autorisierung in Kubernetes finden Sie auf der Seite . Stattdessen (oder besser gesagt â zusĂ€tzlich dazu) gebe ich Beispiele, die ihre Funktionsweise veranschaulichen.
Beispiele fĂŒr RBAC-EntitĂ€ten
Einfach Rolle, die es ermöglicht, eine Liste von Pods und ihren Status im Namespace zu erhalten und sie zu ĂŒberwachen target-namespace:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: target-namespace
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"] Beispiel Clusterrolle, was es ermöglicht, eine Liste von Pods und ihren Status im gesamten Cluster zu erhalten und sie zu ĂŒberwachen:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# die Sektion "namespace" fehlt, da ClusterRole den gesamten Cluster nutzt
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"] Beispiel RoleBinding, was es dem Benutzer ermöglicht, mynewuser âPodsâ im Namespace zu âlesenâ my-namespace:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: target-namespace
subjects:
- kind: User
name: mynewuser # Benutzername ist von der GroĂ- und Kleinschreibung abhĂ€ngig!
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role # hier muss âRoleâ oder âClusterRoleâ stehen
name: pod-reader # Name der Role, die im selben Namespace liegt,
# oder Name der ClusterRole, deren Nutzung
# wir dem Benutzer erlauben möchten
apiGroup: rbac.authorization.k8s.ioEreignisprĂŒfung
Die Architektur von Kubernetes kann schematisch wie folgt dargestellt werden:

Die zentrale Komponente von Kubernetes, die fĂŒr die Bearbeitung von Anfragen zustĂ€ndig ist â api-server. Alle Operationen am Cluster erfolgen ĂŒber ihn. Mehr ĂŒber diese internen Mechanismen findet man in dem Artikel â».
Das Auditing-System ist eine interessante Funktion in Kubernetes, die standardmĂ€Ăig deaktiviert ist. Es ermöglicht das Protokollieren aller Anfragen an die Kubernetes-API. Wie man sich leicht denken kann, werden ĂŒber diese API alle Aktionen zur Ăberwachung und Ănderung des Zustands des Clusters durchgefĂŒhrt. Eine gute Beschreibung ihrer Möglichkeiten findet man (wie immer) in K8s. Im Folgenden werde ich versuchen, das Thema einfacher zu erklĂ€ren.
Also, Um das Auditing zu aktivieren,mĂŒssen wir dem Container im API-Server drei erforderliche Parameter ĂŒbergeben, die weiter unten erlĂ€utert werden:
-
--audit-policy-file=/etc/kubernetes/policies/audit-policy.yaml -
--audit-log-path=/var/log/kube-audit/audit.log -
--audit-log-format=json
Neben diesen drei notwendigen Parametern gibt es viele zusĂ€tzliche Einstellungen, die sich auf das Auditing beziehen: von der Protokollrotation bis hin zu Beschreibungen fĂŒr Webhooks. Beispiel fĂŒr Protokollrotationsparameter:
-
--audit-log-maxbackup=10 -
--audit-log-maxsize=100 -
--audit-log-maxage=7
Aber wir wollen nicht nĂ€her darauf eingehen â alle Details können in der .
Wie bereits erwĂ€hnt, werden alle Parameter im Manifest mit der Konfiguration des API-Servers festgelegt (standardmĂ€Ăig /etc/kubernetes/manifests/kube-apiserver.yaml), im Abschnitt command. Kommen wir zurĂŒck zu den drei erforderlichen Parametern und betrachten wir diese genauer:
-
audit-policy-fileâ der Pfad zur YAML-Datei mit der Beschreibung der Audit-Policy. Auf den Inhalt werden wir spĂ€ter zurĂŒckkommen, aber zunĂ€chst sei darauf hingewiesen, dass die Datei fĂŒr den Prozess des API-Servers lesbar sein muss. Daher muss sie in den Container gemountet werden, wofĂŒr folgender Code in die entsprechenden Abschnitte der Konfiguration eingefĂŒgt werden kann:volumeMounts: - mountPath: /etc/kubernetes/policies name: policies readOnly: true volumes: - hostPath: path: /etc/kubernetes/policies type: DirectoryOrCreate name: policies -
audit-log-pathâ der Pfad zur Protokolldatei. Der Pfad muss auch fĂŒr den Prozess des API-Servers verfĂŒgbar sein, daher beschreiben wir Ă€hnlich das Mounting:volumeMounts: - mountPath: /var/log/kube-audit name: logs readOnly: false volumes: - hostPath: path: /var/log/kube-audit type: DirectoryOrCreate name: logs -
audit-log-formatâ das Format des Audit-Logs. StandardmĂ€Ăig ist diesjson, aber es ist auch ein veraltetes Textformat verfĂŒgbar (legacy).
Audit-Policy
Jetzt zu der erwÀhnten Datei mit der Beschreibung der Protokollierungsrichtlinien. Der erste Begriff der Audit-Policy ist das level, Protokollierungsniveau. Es gibt folgende Möglichkeiten:
-
Noneâ nicht protokollieren; -
Metadataâ Metadaten der Anfrage protokollieren: Benutzer, Anfragetime, Zielressource (Pod, Namespace usw.), Aktionstyp (Verb) usw.; -
Requestâ Metadaten und den Inhalt der Anfrage protokollieren; -
RequestResponseâ Metadaten, Anfrageinhalt und Antwortinhalt protokollieren.
Die letzten beiden Ebenen (Request und RequestResponse) protokollieren keine Anfragen, die sich nicht an Ressourcen gewandt haben (Zugriffe auf sogenannte Non-Resource-URLs).
Alle Anfragen durchlaufen auch mehrere Phasen:
-
RequestReceivedâ Die Phase, in der die Anfrage vom Handler empfangen wird und noch nicht an die nĂ€chste Stage weitergegeben wurde; -
ResponseStartedâ Die Antwort-Header wurden gesendet, aber bevor der Antwortinhalt gesendet wird. Wird fĂŒr lang laufende Anfragen erzeugt (z.B.beobachten); -
ResponseCompleteâ Der Antwortinhalt wurde gesendet, es werden keine weiteren Informationen gesendet; -
Panicâ Ereignisse werden generiert, wenn eine Ausnahme auftritt.
Um bestimmte Phasen auszuschlieĂen, kann man omitStages.
In der Richtlinien-Datei können wir mehrere Abschnitte mit unterschiedlichen Protokollierungsebenen beschreiben. Es wird die erste passende Regel angewendet, die in der Beschreibung der Richtlinie gefunden wird.
Der Kubelet-Daemon ĂŒberwacht Ănderungen am Manifest mit der api-server-Konfiguration und startet den Container mit api-server neu, wenn solche entdeckt werden. Es gibt jedoch eine wichtige Einzelheit: Ănderungen in der Richtlinie werden dabei ignoriert. Nach Ănderungen an der Richtlinien-Datei muss der api-server manuell neu gestartet werden. Da der api-server als gestartet wird, wird der Befehl kubectl delete nicht zu einem Neustart fĂŒhren. Man muss manuell docker stop auf den Kube-Mastern durchfĂŒhren, auf denen die Audit-Richtlinie geĂ€ndert wurde:
docker stop $(docker ps | grep k8s_kube-apiserver | awk '{print $1}')Beim Aktivieren des Audits ist es wichtig zu beachten, dass die Last auf dem kube-apiserver steigt. Insbesondere steigt der Speicherverbrauch zur Speicherung des Anfragekontextes. Das Protokollieren beginnt erst nach dem Senden des Antwort-Headers. Auch die Last hÀngt von der Konfiguration der Auditrichtlinie ab.
Beispiele fĂŒr Richtlinien
Lassen Sie uns die Struktur der Richtlinien-Dateien anhand von Beispielen betrachten.
Hier ist eine einfache Datei, um alles auf der Ebene zu protokollieren policy, Metadata:
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata In der Richtlinie kann eine Liste von Benutzern (Users und ServiceAccounts) und Benutzergruppen angegeben werden. Zum Beispiel werden wir in dieser Weise systemeigene Benutzer ignorieren, aber alles andere auf der Ebene protokollieren. Request:
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: None
userGroups:
- "system:serviceaccounts"
- "system:nodes"
users:
- "system:anonymous"
- "system:apiserver"
- "system:kube-controller-manager"
- "system:kube-scheduler"
- level: RequestEs gibt auch die Möglichkeit, Ziel:
- NamensrÀume (
namespaces); - Verben (verbs:
get,update,deleteund andere); - Ressourcen (resources, nÀmlich:
Pod,configmapsusw.) und Ressourcengruppen (apiGroups).
Bitte beachten Sie! Ressourcen und Ressourcengruppen (API-Gruppen, d.h. apiGroups) sowie deren Versionen, die im Cluster installiert sind, können mit den folgenden Befehlen abgerufen werden:
kubectl api-resources
kubectl api-versionsDie folgende Audit-Policy dient als Demonstration bewÀhrter Praktiken in der :
apiVersion: audit.k8s.io/v1beta1
kind: Policy
# Nicht das Stadium RequestReceived protokollieren
omitStages:
- "RequestReceived"
rules:
# Nicht protokollieren von Ereignissen, die als unwesentlich und ungefÀhrlich gelten:
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # dies ist die API-Gruppe mit leerem Namen, zu der gehören
# die Basismittel von Kubernetes, die âcoreâ genannt werden
resources: ["endpoints", "services"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["configmaps"]
- level: None
users: ["kubelet"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
users:
- system:kube-controller-manager
- system:kube-scheduler
- system:serviceaccount:kube-system:endpoint-controller
verbs: ["get", "update"]
namespaces: ["kube-system"]
resources:
- group: "" # core
resources: ["endpoints"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["namespaces"]
# Nicht protokollieren von Zugriffen auf read-only URLs:
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# Nicht protokollieren von Meldungen, die sich auf Ressourcen vom Typ âEreignisseâ beziehen:
- level: None
resources:
- group: "" # core
resources: ["events"]
# Ressourcen vom Typ Secret, ConfigMap und TokenReview können geheime Daten enthalten,
# daher protokollieren wir nur die Metadaten der zugehörigen Anfragen
- level: Metadata
resources:
- group: "" # core
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
# Aktionen wie get, list und watch können ressourcenintensiv sein; wir protokollieren sie nicht
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# Standardprotokollierungsniveau fĂŒr Standard-API-Ressourcen
- level: RequestResponse
resources:
- group: "" # core
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# Standardprotokollierungsniveau fĂŒr alle anderen Anfragen
- level: MetadataEin weiteres gutes Beispiel fĂŒr eine Audit-Policy ist .
Um auf Ereignisse im Audit schnell zu reagieren, besteht die Möglichkeit einen Webhook zu beschreiben. Dieses Thema wird behandelt in , ich lasse es auĂerhalb dieses Artikels.
Ergebnisse
Der Artikel bietet einen Ăberblick ĂŒber die Mechanismen der grundlegenden Sicherheitsanforderungen in Kubernetes-Clustern, die es ermöglichen, personalisierte Benutzerkonten zu erstellen, ihre Berechtigungen zu trennen und ihre Handlungen zu protokollieren. Ich hoffe, es ist hilfreich fĂŒr diejenigen, die mit solchen Fragen in der Theorie oder bereits in der Praxis konfrontiert wurden. Ich empfehle auch, sich die Liste anderer Materialien zum Thema Sicherheit in Kubernetes anzusehen, die in âP.S.â aufgefĂŒhrt ist â möglicherweise findet sich darunter das, was Sie fĂŒr Ihre aktuellen Probleme benötigen.
P.S.
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «»;
- «».
Quelle: habr.com
