Von Legacy-Zugriffsbereichen migrieren

Auf dieser Seite werden die Änderungen für Zugriffsbereiche von Clustern erläutert, auf denen Kubernetes Version 1.10 und höher ausgeführt wird. Diese Änderungen betreffen nur die Interaktionen Ihrer Cluster mit Cloud Storage und Compute Engine.

Was sind Zugriffsbereiche?

Zugriffsbereiche sind die Legacy-Methode zum Festlegen von Berechtigungen für Ihre Knoten sowie für Arbeitslasten, die auf Ihren Knoten ausgeführt werden, wenn die Arbeitslasten die Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) verwenden. Bei Clustern, in denen Kubernetes-Version 1.10 oder früher ausgeführt wird, wird dem Standarddienstkonto des Clusters eine Reihe standardmäßiger Zugriffsbereiche gewährt. Diesen Clustern wurden von gcloud und der Google Cloud Console die folgenden Zugriffsbereiche gewährt:

  • compute-rw gewährt vollständigen Zugriff auf alle Compute Engine API-Methoden.
  • storage-ro gewährt Lesezugriff auf alle Cloud Storage-Ressourcen, einschließlich privater Images, die in Container Registry gespeichert sind.

Änderungen an Zugriffsbereichen

Ab Kubernetes Version 1.10 gewähren gcloud und die Cloud Console neuen Clustern und Knotenpools nicht mehr standardmäßig den Zugriffsbereich compute-rw. Wenn --scopes in gcloud container create angegeben ist, fügt gcloud auch nicht mehr automatisch compute-rw oder storage-ro hinzu.

Diese Änderungen stellen sicher, dass Ihr Standarddienstkonto nur über die zum Ausführen Ihres Clusters erforderlichen Berechtigungen verfügt, wodurch die Sicherheit Ihres Projekts erhöht wird.

Sind meine Arbeitslasten betroffen?

Es bedarf keiner Aktion, wenn für Ihre Arbeitslasten kein Aufruf der APIs erforderlich ist, für die der Zugriff durch diese Bereiche gewährt wird.

Wenn Ihre Arbeitslasten jedoch eine Berechtigung für die Interaktion mit Compute Engine oder Cloud Storage erfordern, sind Ihre Arbeitslasten möglicherweise betroffen. Wir empfehlen, ein benutzerdefiniertes Dienstkonto mit den entsprechenden Cloud IAM-Rollen (Cloud Identity and Access Management) zu erstellen.

Wenn Sie die Bereiche überschreiben und Ihre Arbeitslasten eine Berechtigung zur Interaktion mit Cloud Storage erfordern (einschließlich des Abrufens privater Container-Images aus der Container Registry), muss auch der Bereich "storage-ro" einbezogen werden.

Informationen zum Replizieren des Verhaltens von Clustern vor Version 1.10 finden Sie unter Zu Legacy-Zugriffsbereichen zurückkehren.

Auswirkungen

Compute Engine und Cloud Storage geben den Fehler 403 an Anwendungen zurück, die in Clustern mit Kubernetes 1.10 ausgeführt werden, denen die erforderlichen Bereiche fehlen.

Darüber hinaus enthält die Antwort auf eine Anfrage mit unzureichenden Bereichen einen HTTP-Header mit den erforderlichen Bereichen. Beispiel:

WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=insufficient_scope, scope="https://www.googleapis.com/auth/compute.readonly"

Benutzerdefiniertes Dienstkonto für Arbeitslasten konfigurieren

Cloud IAM ist das Zugriffssteuerungssystem, mit dem Sie Nutzern und Dienstkonten in Ihrem GCP-Projekt autorisierte Rollen zuweisen. Ein Dienstkonto ist ein spezielles Google-Konto, das in Ihrem Namen Aufgaben wie die Bereitstellung von Anwendungen ausführt. Verwenden Sie Cloud IAM zum Erstellen eines Dienstkontos und dann Cloud IAM-Richtlinienbindungen zur Sicherung desselben.

Wenn Ihre Arbeitslasten Zugriff auf Compute Engine benötigen, erteilen Sie dem Dienstkonto die Rolle Compute-Engine-Administrator. Erteilen Sie die Rolle Storage-Objekt-Betrachter, wenn Ihre Arbeitslasten private Images aus der Container Registry abrufen müssen.

Dienstkonto erstellen

Führen Sie die folgenden Befehle aus, um ein benutzerdefiniertes Dienstkonto mit dem Namen kubernetes-engine-node-sa zu erstellen:

export NODE_SA_NAME=kubernetes-engine-node-sa
gcloud iam service-accounts create $NODE_SA_NAME \
  --display-name "GKE Node Service Account"
export NODE_SA_EMAIL=`gcloud iam service-accounts list --format='value(email)' \
  --filter='displayName:GKE Node Service Account'`

Minimale Rollen gewähren

Mit den folgenden Befehlen konfigurieren Sie das Dienstkonto mit den minimal erforderlichen Rollen und Berechtigungen für den GKE-Knoten. Dabei ist $PROJECT Ihre Projekt-ID:

export PROJECT=`gcloud config get-value project`
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.viewer
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/logging.logWriter

Zusätzliche Rollen zuweisen

Mit dem folgenden Befehl weisen Sie dem Dienstkonto die Rolle Compute Engine-Administrator zu:

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/compute.admin

Mit dem folgenden Befehl gewähren Sie die Rolle Storage-Objekt-Betrachter:

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/storage.objectViewer

Informationen dazu, wie Sie Dienstkonten Zugriff auf private Images gewähren, die in Container Registry gespeichert sind, finden Sie unter Cloud IAM-Berechtigungen gewähren.

Cluster oder Knotenpool mit benutzerdefiniertem Dienstkonto erstellen

Führen Sie den folgenden Befehl aus, um einen Cluster zu erstellen, der das benutzerdefinierte Dienstkonto verwendet:

gcloud container clusters create --service-account=$NODE_SA_EMAIL

So erstellen Sie einen Knotenpool in einem vorhandenen Cluster:

gcloud container node-pools create --service-account=$NODE_SA_EMAIL

Zu Legacy-Zugriffsbereichen zurückkehren

Wenn Sie die Legacy-Zugriffsbereiche in Clustern mit Kubernetes Version 1.10 und höher weiterhin verwenden möchten, müssen Sie die Bereiche manuell einfügen.

Console

So erstellen Sie einen Cluster mit der Cloud Console:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie auf Cluster erstellen.

  3. Wählen Sie unter Master-Version eine Kubernetes-Version aus.

  4. Konfigurieren Sie den Cluster wie gewünscht. Klicken Sie noch nicht auf Erstellen.

  5. Klicken Sie im Navigationsbereich unter Standardpool auf Sicherheit.

  6. Wählen Sie im Abschnitt Zugriffsbereiche die Option Zugriff für jede API festlegen aus.

  7. Wählen Sie für Compute Engine die Option Lesen/Schreiben aus. Der Speicher sollte standardmäßig Schreibgeschützt sein.

  8. Klicken Sie auf Erstellen.

gcloud

Führen Sie den folgenden Befehl aus, um einen Cluster zu erstellen:

gcloud container clusters create example-cluster --scopes compute-rw,gke-default

So erstellen Sie einen Knotenpool in einem vorhandenen Cluster:

gcloud container node-pools create example-pool --scopes compute-rw,gke-default