GKE-Knotendienstkonten konfigurieren

Ihre Google Kubernetes Engine-Knoten (GKE) verwenden IAM-Dienstkonten (Identity and Access Management) für Aufgaben wie das Protokollieren und Abrufen von Container-Images für Arbeitslasten. In diesem Dokument wird beschrieben, wie Plattformadministratoren und Sicherheitsexperten Dienstkonten für bestimmte Anwendungsfälle Rollen zuweisen und benutzerdefinierte Dienstkonten erstellen können, anstatt ein Standarddienstkonto zu verwenden. Weitere Informationen finden Sie unter Knoten-Dienstkonten.

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwalten von IAM-Dienstkonten und -Rollen benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Mindestrolle für GKE zuweisen

GKE verwendet IAM-Dienstkonten, die an Ihre Knoten angehängt sind, um Systemaufgaben wie Logging und Monitoring auszuführen. Diese Knoten-Dienstkonten müssen in Ihrem Projekt mindestens die Rolle Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount) haben. Standardmäßig verwendet GKE das Compute Engine-Standarddienstkonto, das automatisch in Ihrem Projekt erstellt wird, als Knotendienstkonto.

Wenn Ihre Organisation die Einschränkung der Organisationsrichtlinie iam.automaticIamGrantsForDefaultServiceAccounts erzwingt, erhält das Compute Engine-Standarddienstkonto in Ihrem Projekt möglicherweise nicht automatisch die erforderlichen Berechtigungen für GKE.

In den folgenden Abschnitten wird beschrieben, wie Sie dem Compute Engine-Standarddienstkonto oder einem neuen benutzerdefinierten Dienstkonto, das Sie erstellen, die Rolle roles/container.defaultNodeServiceAccount zuweisen.

Compute Engine-Standarddienstkonto konfigurieren

So weisen Sie dem Compute Engine-Standarddienstkonto die Rolle roles/container.defaultNodeServiceAccount zu:

Console

  1. Rufen Sie die Seite Willkommen auf:

    Zur Begrüßungsseite

  2. Klicken Sie im Feld Projektnummer auf  In die Zwischenablage kopieren.
  3. Rufen Sie die IAM-Seite auf.

    IAM aufrufen

  4. Klicken Sie auf Zugriffsrechte erteilen.
  5. Geben Sie im Feld Neue Hauptkonten den folgenden Wert an:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Ersetzen Sie PROJECT_NUMBER durch die kopierte Projektnummer.
  6. Wählen Sie im Menü Rolle auswählen die Rolle Kubernetes Engine Default Node Service Account aus.
  7. Klicken Sie auf Speichern.

gcloud

  1. So finden Sie Ihre Google Cloud Projektnummer:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    Die Ausgabe sieht etwa so aus:

    12345678901
    
  2. Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle roles/container.defaultNodeServiceAccount zu:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    Ersetzen Sie PROJECT_NUMBER durch die Projektnummer aus dem vorherigen Schritt.

Benutzerdefiniertes Knotendienstkonto konfigurieren

So erstellen Sie ein benutzerdefiniertes Dienstkonto und weisen ihm die erforderliche Rolle für GKE zu:

Console

  1. Rufen Sie die Seite Dienstkonten auf:

    Zur Seite „Dienstkonten“

  2. Klicken Sie auf  Dienstkonto erstellen.
  3. Geben Sie einen Namen für das Dienstkonto ein. Im Feld Dienstkonto-ID wird automatisch eine eindeutige ID für das Dienstkonto auf Grundlage des Namens generiert.
  4. Klicken Sie auf Erstellen und fortfahren.
  5. Wählen Sie im Menü Rolle auswählen die Rolle Kubernetes Engine Default Node Service Account aus.
  6. Klicken Sie auf Fertig.

gcloud

  1. Erstellen Sie das Dienstkonto:
    gcloud iam service-accounts create SA_NAME

    Ersetzen SieSA_NAME durch einen eindeutigen Namen, der das Dienstkonto identifiziert.

  2. Weisen Sie dem Dienstkonto die Rolle Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount) zu:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role=roles/container.defaultNodeServiceAccount

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Projekt-ID in Google Cloud .
    • SA_NAME: Name des von Ihnen erstellten Dienstkontos.

Terraform

Erstellen Sie ein IAM-Dienstkonto und weisen Sie ihm die Rolle roles/container.defaultNodeServiceAccount für das Projekt zu:

resource "google_service_account" "default" {
  account_id   = "gke-node-service-account"
  display_name = "GKE node service account"
}

data "google_project" "project" {
}

resource "google_project_iam_member" "default" {
  project = data.google_project.project.project_id
  role    = "roles/container.defaultNodeServiceAccount"
  member  = "serviceAccount:${google_service_account.default.email}"
}

Config Connector

Hinweis: Für diesen Schritt ist Config Connector erforderlich. Folgen Sie der Installationsanleitung, um Config Connector in Ihrem Cluster zu installieren.

  1. Laden Sie zum Erstellen des Dienstkontos die folgende Ressource als service-account.yaml herunter:
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMServiceAccount
    metadata:
      name: [SA_NAME]
    spec:
      displayName: [DISPLAY_NAME]

    Ersetzen Sie Folgendes:

    • [SA_NAME] ist der Name des neuen Dienstkontos.
    • [DISPLAY_NAME]: Ein Anzeigename für das Dienstkonto.
  2. Erstellen Sie das Dienstkonto:
    kubectl apply -f service-account.yaml
  3. Wenden Sie die Rolle roles/logging.logWriter auf das Dienstkonto an:
    1. Laden Sie die folgende Ressource als Datei policy-logging.yaml herunter.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-logging
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/logging.logWriter
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ersetzen Sie Folgendes:

      • [SA_NAME] ist der Name des Dienstkontos.
      • [PROJECT_ID]: Projekt-ID in Google Cloud .
    2. Wenden Sie die Rolle auf das Dienstkonto an:
      kubectl apply -f policy-logging.yaml
  4. Wenden Sie die Rolle roles/monitoring.metricWriter auf das Dienstkonto an:
    1. Laden Sie die folgende Ressource als Datei policy-metrics-writer.yaml herunter. Ersetzen Sie [SA_NAME] und [PROJECT_ID] durch Ihre eigenen Informationen.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-metrics-writer
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/monitoring.metricWriter
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ersetzen Sie Folgendes:

      • [SA_NAME] ist der Name des Dienstkontos.
      • [PROJECT_ID]: Projekt-ID in Google Cloud .
    2. Wenden Sie die Rolle auf das Dienstkonto an:
      kubectl apply -f policy-metrics-writer.yaml
  5. Wenden Sie die Rolle roles/monitoring.viewer auf das Dienstkonto an:
    1. Laden Sie die folgende Ressource als Datei policy-monitoring.yaml herunter.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-monitoring
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/monitoring.viewer
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ersetzen Sie Folgendes:

      • [SA_NAME] ist der Name des Dienstkontos.
      • [PROJECT_ID]: Projekt-ID in Google Cloud .
    2. Wenden Sie die Rolle auf das Dienstkonto an:
      kubectl apply -f policy-monitoring.yaml
  6. Wenden Sie die Rolle roles/autoscaling.metricsWriter auf das Dienstkonto an:
    1. Laden Sie die folgende Ressource als Datei policy-autoscaling-metrics-writer.yaml herunter.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-autoscaling-metrics-writer
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/autoscaling.metricsWriter
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ersetzen Sie Folgendes:

      • [SA_NAME] ist der Name des Dienstkontos.
      • [PROJECT_ID]: Projekt-ID in Google Cloud .
    2. Wenden Sie die Rolle auf das Dienstkonto an:
      kubectl apply -f policy-autoscaling-metrics-writer.yaml

Sie können dieses Dienstkonto auch für Ressourcen in anderen Projekten verwenden. Eine Anleitung finden Sie unter Identitätswechsel für Dienstkonten über Projekte hinweg aktivieren.

Hauptkonten erlauben, benutzerdefinierte Dienstkonten anzuhängen

Sie können ein benutzerdefiniertes Dienstkonto anhängen, wenn Sie einen Cluster oder einen Knotenpool erstellen. Wenn ein Hauptkonto (z. B. ein Plattformadministrator) ein benutzerdefiniertes Dienstkonto zum Erstellen von GKE-Ressourcen verwenden soll, weisen Sie diesem Hauptkonto die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) für das benutzerdefinierte Dienstkonto zu. Wählen Sie eine der folgenden Optionen aus, um diese Rolle zuzuweisen:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf:

    Zur Seite „Dienstkonten“

    Wählen Sie in der Ressourcenauswahl das Projekt aus, das Ihr benutzerdefiniertes Dienstkonto enthält.

  2. Klicken Sie auf das Kästchen für das benutzerdefinierte Dienstkonto, das Sie für die Verwendung mit GKE-Knoten erstellt haben.

  3. Klicken Sie auf Zugriff verwalten. Der Bereich Zugriff verwalten wird geöffnet.

  4. Klicken Sie auf Hauptkonto hinzufügen. Der Bereich Zugriff gewähren wird geöffnet.

  5. Geben Sie im Feld Neue Hauptkonten das Hauptkonto an, z. B. eine Administratorgruppe.

  6. Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle Dienstkontonutzer aus.

  7. Klicken Sie auf Speichern. Der Bereich Zugriff erlauben wird geschlossen.

  8. Schließen Sie den Bereich Zugriff verwalten.

gcloud

Weisen Sie die Rolle roles/iam.serviceAccountUser zu:

gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
    --member=PRINCIPAL \
    --role=roles/iam.serviceAccountUser

Ersetzen Sie Folgendes:

  • SA_NAME: der Name des benutzerdefinierten Dienstkontos.
  • SERVICE_ACCOUNT_PROJECT_ID: die Projekt-ID, die das benutzerdefinierte Dienstkonto enthält.
  • PRINCIPAL: die Hauptkonto-ID, z. B. user:baklavainthebalkans@example.com.

Config Connector

Hinweis: Für diesen Schritt ist Config Connector erforderlich. Folgen Sie der Installationsanleitung, um Config Connector in Ihrem Cluster zu installieren.

Wenden Sie die Rolle iam.serviceAccountUser auf Ihr Dienstkonto an. Laden Sie die folgende Ressource als Datei policy-service-account-user.yaml herunter. Ersetzen Sie [SA_NAME] und [PROJECT_ID] durch Ihre eigenen Informationen.

apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicyMember
metadata:
  name: policy-service-account-user
spec:
  member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
  role: roles/iam.serviceAccountUser
  resourceRef:
    kind: Project
    name: [PROJECT_ID]
kubectl apply -f policy-service-account-user.yaml

Nachdem Sie die Rolle für das Dienstkonto gewährt haben, können diese Hauptkonten das Dienstkonto zum Erstellen von Clustern und Knotenpools verwenden. Weitere Informationen finden Sie in den folgenden Dokumenten:

Dienstkontonutzung projektübergreifend konfigurieren

Wenn sich das Dienstkonto des Knotens nicht im selben Projekt wie Ihr Cluster befindet, benötigen Dienst-Agents im Clusterprojekt zusätzliche Berechtigungen für das Dienstkonto. Weitere Informationen finden Sie unter Knoten-Dienstkonten und Projekt-Dienst-Agents.

So weisen Sie die erforderlichen Rollen Dienstkonten für Knoten zu, die sich nicht in Ihrem Clusterprojekt befinden:

  1. Wenn Sie das projektübergreifende Anhängen von Dienstkonten aktivieren möchten, aktualisieren Sie Ihre Organisationsrichtlinien.
  2. Wählen Sie eine der folgenden Optionen aus, um den Dienst-Agents in Ihrem Clusterprojekt die erforderlichen Rollen für das benutzerdefinierte Dienstkonto zuzuweisen:

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

      Zur Seite „Dienstkonten“

    2. Aktivieren Sie das Kästchen für das benutzerdefinierte Dienstkonto, das Sie für die Verwendung mit GKE-Knoten erstellt haben.

    3. Klicken Sie auf Zugriff verwalten. Der Bereich Zugriff verwalten wird geöffnet.

    4. Weisen Sie dem Compute Engine-Dienst-Agent in Ihrem Clusterprojekt die Rolle „Ersteller von Dienstkonto-Tokens“ zu:

      1. Klicken Sie im Bereich Zugriff verwalten auf  Hauptkonto hinzufügen. Der Bereich Zugriff erlauben wird geöffnet.
      2. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Compute Engine-Dienst-Agents in Ihrem Clusterprojekt an:

        service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
        

        Ersetzen Sie CLUSTER_PROJECT_NUMBER durch die Projektnummer Ihres Clusterprojekts.

      3. Wählen Sie im Menü Rolle auswählen die Rolle Ersteller von Dienstkonto-Tokens aus.

      4. Klicken Sie auf Speichern. Der Bereich Zugriff erlauben wird geschlossen.

    5. Weisen Sie dem GKE-Dienst-Agent in Ihrem Clusterprojekt die Rolle „Dienstkontonutzer“ zu:

      1. Klicken Sie im Bereich Zugriff verwalten auf  Hauptkonto hinzufügen. Der Bereich Zugriff erlauben wird geöffnet.
      2. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des GKE-Dienst-Agents in Ihrem Clusterprojekt an:

        service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
        
      3. Wählen Sie im Menü Rolle auswählen die Rolle Dienstkontonutzer aus.

      4. Klicken Sie auf Speichern. Der Bereich Zugriff erlauben wird geschlossen.

    6. Schließen Sie den Bereich Zugriff verwalten.

    gcloud

    1. Rufen Sie die Projektnummer Ihres Clusterprojekts ab:

      gcloud projects describe CLUSTER_PROJECT_ID \
          --format='value(projectNumber)'
      

      Ersetzen Sie CLUSTER_PROJECT_ID durch die Projekt-ID Ihres Clusterprojekts.

      Die Ausgabe ähnelt 123456789.

    2. Weisen Sie dem Compute Engine-Dienst-Agent in Ihrem Clusterprojekt die Rolle roles/iam.serviceAccountTokenCreator für das benutzerdefinierte Dienstkonto zu:

      gcloud iam service-accounts add-iam-policy-binding \
          SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --member=service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role=roles/iam.serviceAccountTokenCreator
      

      Ersetzen Sie Folgendes:

      • SA_NAME: der Name des benutzerdefinierten Dienstkontos.
      • SERVICE_ACCOUNT_PROJECT_ID: die Projekt-ID des Projekts, das Ihr benutzerdefiniertes Dienstkonto enthält.
      • CLUSTER_PROJECT_NUMBER: die Projektnummer Ihres Clusterprojekts.
    3. Weisen Sie dem GKE-Dienst-Agent in Ihrem Clusterprojekt die Rolle roles/iam.serviceAccountUser für das benutzerdefinierte Dienstkonto zu:

      gcloud iam service-accounts add-iam-policy-binding \
          SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --member=service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
          --role=roles/iam.serviceAccountUser
      

Image-Pulls aus privaten Repositories zulassen

Wenn Sie Images in privaten Artifact Registry-Repositories haben, müssen Sie Ihrem Knoten-Dienstkonto Zugriff auf diese Repositories gewähren. Auch wenn Sie das Compute Engine-Standarddienstkonto verwenden, müssen Sie dem Dienstkonto möglicherweise Zugriff auf Ihr Repository gewähren, wenn sich das Repository in einem anderen Projekt befindet.

Wenn Sie private Images aus der Artifact Registry abrufen möchten, weisen Sie Ihrem Knotendienstkonto die Rolle „Artifact Registry-Leser“ (roles/artifactregistry.reader) für das Repository zu.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Repositories auf.

    Zu Repositories

  2. Klicken Sie das Kästchen für Ihr Repository an.

  3. Klicken Sie auf Infofeld anzeigen. Der Bereich mit den Repository-Informationen wird geöffnet.

  4. Klicken Sie auf dem Tab Berechtigungen auf Hauptkonto hinzufügen. Der Bereich Zugriff erlauben wird geöffnet.

  5. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse Ihres Knotendienstkontos an.

  6. Klicken Sie auf Rolle auswählen, um das Dialogfeld zur Rollenauswahl zu öffnen.

  7. Wählen Sie die Rolle Artifact Registry-Leser aus.

  8. Klicken Sie auf Speichern.

gcloud

Weisen Sie dem Repository die Rolle roles/artifactregistry.reader zu:

gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAME \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --project=REPOSITORY_PROJECT_ID \
    --role=roles/artifactregistry.reader

Ersetzen Sie Folgendes:

  • REPOSITORY_NAME: der Name des Artifact Registry-Repositorys.
  • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse Ihres Knotendienstkontos.
  • REPOSITORY_PROJECT_ID: die Projekt-ID des Projekts, das Ihr Repository enthält.

Config Connector

Hinweis: Für diesen Schritt ist Config Connector erforderlich. Folgen Sie der Installationsanleitung, um Config Connector in Ihrem Cluster zu installieren.

  1. Speichern Sie das folgende Manifest als policy-artifact-registry-reader.yaml:

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: policy-artifact-registry-reader
    spec:
      member: serviceAccount:"SA_NAME"@"PROJECT_ID".iam.gserviceaccount.com
      role: roles/artifactregistry.reader
      resourceRef:
        apiVersion: artifactregistry.cnrm.cloud.google.com/v1beta1
        kind: ArtifactRegistryRepository
        name: "REPOSITORY_NAME"

    Ersetzen Sie Folgendes:

    • SA_NAME: Der Name Ihres IAM-Dienstkontos.
    • PROJECT_ID: Projekt-ID in Google Cloud .
    • REPOSITORY_NAME: der Name Ihres Artifact Registry-Repositorys
  2. Weisen Sie dem Dienstkonto die Rolle „Artifact Registry-Leser” zu:

    kubectl apply -f policy-artifact-registry-reader.yaml
    

Nächste Schritte