Kubernetes Service Accounts verwalten

Sie können eingeschränkten Zugriff auf Ihre Cluster mithilfe von Kubernetes Service Accounts und dem Kubernetes RBAC Feature umsetzen.

Dafür müssen Sie:

  • Einen Kubernetes Service Account anlegen
  • Eine Rolle mit beschränktem Zugriff definieren
  • Dem Kubernetes Service Account diese Rolle zuordnen

Die Authentifizierung in Kubernetes Clustern, die mit GKS erzeugt werden, geschieht über sogenannte Bearer Token. Wenn Sie einen neuen Kubernetes Service Account anlegen, wird ein solches Token oder Secret im jeweiligen Namespace hinterlegt. Dieses Secret wird gelöscht, wenn der Kubernetes Service Account gelöscht wird.

Anlegen eines Kubernetes Service Accounts

Um einen Kubernetes Service Account anzulegen, benutzen Sie das folgende Kommando. Ersetzen Sie dabei my-serviceaccount mit dem Namen, den Sie dem Kubernetes Service Account geben wollen.

kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-serviceaccount
  namespace: my-namespace
EOF

Dadurch wird im Cluster automatisch ein neues Access Token angelegt. Dieses Token trägt einen Namen my-serviceaccount-token-#### wobei die ‘#’ zufällige alphanumerische Zeichen sind.

Um die Token in einem Namespace zu sehen, verwenden Sie das folgende Kommando:

kubectl get secrets --namespace=my-namespace

Sie können sich dann das eigentliche Token mit dem folgenden Kommando ausgeben lassen (vergessen Sie nicht, ‘$SECRETNAME’ durch den Namen zu ersetzen, der für Ihren Kubernetes Service Account gilt):

kubectl get secret $SECRETNAME -o jsonpath='{.data.token}' --namespace=my-namespace

Das angezeigte Token können Sie zusammen mit dem Namen des Serviceaccounts an Dritte übermitteln, um ihnen den Zugriff zu dem Cluster zu ermöglichen.

Jetzt haben Sie einen Kubernetes Service Account, der sich an Ihrem Cluster authentifizieren kann, aber er hat noch keine Rechte. Im nächsten Schritt definieren Sie eine Rolle und weisen diese Rolle dem Kubernetes Service Account zu, damit er die entsprechenden Rechte erhält.

Definition einer Rolle mit ihren Rechten

Grundsätzlich gibt es zwei Wege, einem Kubernetes Service Account Rechte zuzuweisen: Cluster-weite Rollen oder Rollen, die auf einen jeweiligen Namespace beschränkt sind. Da die Cluster-weiten Rollen Zugriff auf alle Namespaces geben, empfehlen wir, diese nur zu verwenden, wenn es absolut notwendig ist. Unsere Beispiele definieren Rollen, die auf einen jeweiligen Namespace beschränkt sind.

Alle Rechte einer Rolle werden explizit freigegeben – das gilt sowohl für persönliche Zugänge als auch für Kubernetes Service Accounts. Wenn ein Account über mehrere Rollen verfügt, bekommt er die kombinierten Rechte aller Rollen.

Um eine Rolle zu definieren, mit der ein Account die Informationen über Pods im Namespace my-namespace auslesen kann, verwenden Sie den folgenden Befehl:

kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-namespace
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
EOF

Jetzt wollen Sie dem zuvor angelegten Kubernetes Service Account diese Rolle zuweisen. Für dieses role binding verwenden Sie das folgende Kommando:

kubectl create rolebinding read-pods \
  --role=pod-reader \
  --serviceaccount=my-namespace:my-serviceaccount \
  --namespace=my-namespace

Um alle Ressourcen aufzulisten, rufen Sie das folgende Kommando auf:

kubectl api-resources

Für die meisten Ressourcen sind folgende Verben definiert:

  • get
  • list
  • watch
  • create
  • edit
  • update
  • delete
  • exec

Weiterführende Themen

In der offiziellen Kubernetes-Dokumentation wird das Thema ausführlich behandelt:

Zusammenfassung

In diesem Abschnitt haben Sie gelernt, wie Sie über die Kommandozeile:

  • Kubernetes Service Accounts anlegen
  • Das automatisch generierte Bearer Token für einen Kubernetes Service Accounts auslesen
  • Eine Rolle mithilfe des Kubernetes RBAC Features definieren
  • Mithilfe eines role bindings solche Rollen einem Kubernetes Service Account zuordnen können