Rollenbasierte Zugriffssteuerung (RBAC, Role-based Access Control) einrichten

Die Authentifizierung wird häufig mit der rollenbasierten Zugriffssteuerung von Kubernetes (Role-based Access Control, RBAC) kombiniert, um für authentifizierte Nutzer und Dienstkonten eine detailliertere Zugriffssteuerung zu ermöglichen. Es wird empfohlen, RBAC-Richtlinien zu erstellen, die Gruppennamen anstelle von Nutzerkennungen verwenden. Wenn Sie die RBAC-Richtlinien explizit mit Gruppen verknüpfen, können Sie Nutzerzugriffsberechtigungen vollständig mit Ihrem Identitätsanbieter verwalten. Dann muss der Cluster nicht jedes Mal aktualisiert werden, wenn sich die Nutzerberechtigungen ändern. Beachten Sie, dass Sie zur Konfiguration der Zugriffssteuerung auf der Grundlage der Mitgliedschaft in Sicherheitsgruppen mit OIDC sicherstellen müssen, dass GKE Identity Service so eingerichtet ist, dass der Erhalt von Gruppenmitgliedschaftsinformationen von Ihrem Identitätsanbieter unterstützt wird.

Beispiel

Wenn Sie bestimmten authentifizierten Nutzern Zugriff auf die Pods des Clusters gewähren möchten, erstellen Sie eine ClusterRole, die Zugriff auf diese Ressourcen gewährt. Hier ein Beispiel:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  # The resource type for which access is granted
  resources: ["pods"]
  # The permissions granted by the ClusterRole
  verbs: ["get", "watch", "list"]

Anschließend erstellen Sie eine entsprechende ClusterRoleBinding, um den jeweiligen Nutzern die Berechtigungen in der ClusterRole zu gewähren; in diesem Fall Mitgliedern der Sicherheitsgruppe us-east1-cluster-admins und dem Nutzer mit der ID u98523-4509823:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-pods-admins
subjects:
  # Grants anyone in the "us-east1-cluster-admins" group
  # read access to Pods in any namespace within this cluster.
- kind: Group
  name: gid-us-east1-cluster-admins # Name is case-sensitive
  apiGroup: rbac.authorization.k8s.io
  # Grants this specific user read access to Pods in any
  # namespace within this cluster
- kind: User
  name: uid-u98523-4509823
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Im folgenden Beispiel gewährt diese ClusterRoleBinding der entsprechenden Gruppe mit der ID 12345678-BBBb-cCCCC-0000-123456789012 Berechtigungen in der ClusterRole. Diese Einstellung ist nur für Azure AD-Anbieter relevant und ist für Google Distributed Cloud-Cluster verfügbar.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pod-reader-binding
subjects:
  # Retrieves group information for the group ID mentioned
- kind: Group
  name: 12345678-BBBb-cCCCC-0000-123456789012
  apiGroup: rbac.authorization.k8s.io

Weitere Informationen zur Verwendung von RBAC finden Sie unter Rollenbasierte Zugriffssteuerung konfigurieren und RBAC-Autorisierung verwenden.

RBAC-Rolle für den Google Cloud Console-Zugriff erstellen

Nutzer, die über OIDC-Anbietern authentifiziert wurden, können sich über die Google Cloud Console und die Befehlszeile bei Clustern anmelden.

Authentifizierte Nutzer, die in der Google Cloud Console auf die Ressourcen eines Clusters zugreifen möchten, benötigen dafür die entsprechenden Kubernetes-Berechtigungen. Wenn Sie diesen Nutzern keine umfassenderen Berechtigungen gewähren möchten, z. B. die eines Clusteradministrators, können Sie eine benutzerdefinierte RBAC-Rolle erstellen, die die Mindestberechtigungen zum Aufrufen der Knoten, nichtflüchtigen Volumes, Pods und Speicherklassen des Clusters enthält. Um diese Berechtigungen zu definieren, erstellen Sie im Cluster eine ClusterRole-RBAC-Ressource, cloud-console-reader.

cloud-console-reader gewährt den Nutzern der Ressource die Berechtigungen get, list und watch für die Knoten, nichtflüchtigen Volumes, Pods und Speicherklassen des Clusters, die das Aufrufen von Details zu diesen Ressourcen ermöglichen.

kubectl

Führen Sie den folgenden Befehl aus, um die ClusterRole-cloud-console-reader zu erstellen und auf den Cluster anzuwenden:

cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cloud-console-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml

Sie können diesen ClusterRole dann Nutzern zuweisen, wenn Sie Ihre Berechtigungsrichtlinien einrichten, wie im vorherigen Abschnitt beschrieben. Beachten Sie, dass Nutzer auch IAM-Berechtigungen benötigen, um Cluster in der Google Cloud Console aufzurufen.