Mit Dienstkonten authentifizieren

Dienstkonten sind die Konten, die von Arbeitslasten oder Diensten verwendet werden, um Ressourcen programmatisch zu nutzen und sicher auf Microservices zuzugreifen. Sie sind eine spezielle Art von Identität, die von einer Anwendung oder Arbeitslast und nicht von einer Person verwendet wird. Ähnlich wie bei einem Nutzerkonto können Dienstkonten Berechtigungen und Rollen zugewiesen werden. Sie können sich jedoch nicht wie ein menschlicher Nutzer anmelden.

Dienstkonten sind nützlich für die Verwaltung von Google Distributed Cloud (GDC)-Infrastruktur ohne Internetverbindung, z. B.:

  • Interne Distributed Cloud-Dienste und ‑Arbeitslasten, um sicher auf die Distributed Cloud-Steuerungsebene-API (Application Programming Interface) zuzugreifen. Beispielsweise interagieren Datenbankdienste mit den Kubernetes APIs, um Datenbanken zu erstellen und zu löschen.
  • Kundenarbeitslasten in Distributed Cloud, um auf Distributed Cloud-Dienste zuzugreifen und autorisierte API-Aufrufe (Application Programming Interface) auszuführen. Dienstkonten können beispielsweise einen Kunden verwalten, der ein Vertex AI Workbench-Notebook verwendet, um Audiodateien mit der Speech-to-Text API zu transkribieren.
  • Externe Arbeitslasten, die mit Distributed Cloud verbunden werden sollen. Dienstkonten können beispielsweise eine Anwendung außerhalb von Distributed Cloud verwalten, die Dokumente digitalisiert, aber die OCR API verwenden möchte, um die aktuelle OCR-Engine zu ersetzen.
  • Distributed Cloud-Dienste oder Systemcontroller für den sicheren Zugriff auf Kundenressourcen oder Nutzercluster. Dienstkonten können beispielsweise Authentifizierungs- und Autorisierungsworkflows verwalten, bei denen die Dienstcontroller, die in Administratorclustern ausgeführt werden, Arbeitslasten in den von Kunden verwalteten Nutzerclustern ausführen müssen.

Sie können Konten über die GDC-Konsole, die gdcloud CLI oder die API verwalten. In der gcloud CLI basiert das Feature für Dienstkontoidentitäten auf der globalen ProjectServiceAccount API. Da Dienstkonten global konfiguriert sind, funktionieren sie in allen Zonen in Ihrem gdcloud-Universum.

Hinweise

Sie können Dienstkonten nur innerhalb eines Projekts erstellen. Weitere Informationen zum Erstellen eines Projekts finden Sie unter Projekt erstellen.

Dienstidentität erstellen

Bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Rolle „Projekt-IAM-Administrator“ (project-iam-admin) zuzuweisen, um die Berechtigungen zu erhalten, die zum Erstellen von Dienstkonten erforderlich sind.

Nutzer mit Zugriff auf Dienstkonten können auf alle Dienstkonten in einem Projekt zugreifen.

Zum Erstellen von Dienstkonten in einem Projekt können Sie die GDC Console, die gdcloud CLI oder die API verwenden.

Konsole

  1. Melden Sie sich in der GDC-Konsole an.
  2. Wählen Sie im Navigationsmenü Identität & Zugriff > Dienstidentitäten aus.
  3. Klicken Sie auf Dienstidentität erstellen. Die Seite Details zur Dienstidentität wird geöffnet.
  4. Geben Sie im Feld Name der Dienstidentität einen Namen für die Dienstidentität ein. Beispiel: testserviceidentity
  5. Klicken Sie auf Erstellen.

gdcloud

Dienstidentität erstellen:

gdcloud iam service-accounts create NAME \
    --project=PROJECT

Ersetzen Sie die folgenden Werte:

  • NAME: der Name des ProjectServiceAccount. Der Name muss innerhalb des Projektnamespace eindeutig sein.
  • PROJECT: Das Projekt, in dem die Dienstidentität erstellt werden soll. Wenn gdcloud init bereits festgelegt ist, lassen Sie das Flag --project weg.

Mit diesem Befehl wird ein ProjectServiceAccount im Projektnamespace auf dem Management API-Server erstellt.

API

  1. Erstellen Sie eine YAML-Datei für die benutzerdefinierte Ressource vom Typ ProjectServiceAccount, z. B. my-project-sa.yaml:

    apiVersion: resourcemanager.global.gdc.goog/v1
    kind: ProjectServiceAccount
    metadata:
      name: NAME
      namespace: PROJECT
    spec:
      keys:
      - algorithm: ALGORITHM
      id: KEY_ID
      key: BASE64_ENCODED_KEY
      validAfter: "START_TIME"
      validBefore: "EXPIRATION_TIME"
    

    Ersetzen Sie die folgenden Variablen:

    • NAME: der Name der ProjectServiceAccount-Ressource. Der Name muss innerhalb des Projekt-Namespace eindeutig sein.
    • PROJECT: Das Projekt, in dem die Dienstidentität erstellt werden soll.
    • ALGORITHM: Der Algorithmus des Schlüssels. Es werden nur ES256-Schlüssel unterstützt.
    • KEY_ID: die eindeutige Kennung des Schlüssels. Die ID wird verwendet, um zu bestimmen, welcher Schlüssel für die Überprüfung verwendet werden soll.
    • BASE64_ENCODED_KEY: Der Base64-codierte öffentliche Schlüssel im PEM-Format, der für die Überprüfung verwendet wird. Der private Schlüssel, der zum Generieren dieses öffentlichen Schlüssels verwendet wird, muss im ECDSA P256-PEM-Format vorliegen.
    • START_TIME: Die Startzeit, ab der der Schlüssel gültig ist, z. B. 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: die Ablaufzeit für den Schlüssel, z. B. 2026-02-07T00:59:34Z.
  2. Wenden Sie die benutzerdefinierte Ressource ProjectServiceAccount auf den globalen API-Server an:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Ersetzen Sie die Variable GLOBAL_API_SERVER_KUBECONFIG durch den Pfad zur kubeconfig-Datei für den globalen API-Server.

Dienstidentitäten ansehen

Wenn Sie eine Liste der Dienstkonten in einem Projekt aufrufen möchten, verwenden Sie die GDC Console oder die gdcloud CLI.

Konsole

  1. Melden Sie sich in der GDC-Konsole an.
  2. Wählen Sie ein Projekt aus.
  3. Klicken Sie im Navigationsmenü auf Identität & Zugriff > Dienstidentitäten, um die Liste der Dienstkonten für das Projekt aufzurufen.

gdcloud

Dienstkonten in einem Projekt auflisten:

gdcloud iam service-accounts list \
    --project=PROJECT

Der Dienstidentität eine Rollenbindung zuweisen

Zum Zuweisen einer Rollenbindung benötigen Sie die entsprechenden Berechtigungen. Bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Rolle „Projekt-IAM-Administrator“ (project-iam-admin) zuzuweisen, um die erforderlichen Berechtigungen zum Zuweisen von Rollen zu erhalten.

Sie können entweder die GDC Console oder die gdcloud CLI verwenden, um eine Rollenbindung zuzuweisen.

Konsole

  1. Melden Sie sich in der GDC-Konsole an.
  2. Wählen Sie ein Projekt aus.
  3. Wählen Sie im Navigationsmenü Identität & Zugriff > Zugriff aus.
  4. Klicken Sie in der Liste Mitglied auf Mitglied hinzufügen. Die Seite Nutzer und Rollen wird angezeigt.
  5. Wählen Sie in der Liste Mitgliedstyp die Option Dienstidentität aus.
  6. Wählen Sie in der Liste Dienstidentität die Dienstidentität aus, der Sie eine Rollenbindung zuweisen möchten.
  7. Wählen Sie in der Liste Rolle die Rolle aus, die Sie der Dienstidentität zuweisen möchten, z. B. Backup Creator (Backup-Ersteller).
  8. Optional: Wenn Sie eine weitere Rolle hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen. Wählen Sie die zusätzliche Rolle aus.
  9. Klicken Sie auf Hinzufügen.

gdcloud

Mit diesem Befehl wird die Projektrollenbindung erstellt und benannt, um die angegebene Rolle mit ProjectServiceAccount auf dem Management API-Server zu binden:

gdcloud iam service-accounts add-iam-policy-binding \
    --project=PROJECT \
    --role=ROLE \
    --role-namespace=ROLE_NAMESPACE \
    --iam-account=NAME

Ersetzen Sie die folgenden Werte:

  • PROJECT: das Projekt, in dem die Rollenbindung erstellt werden soll. Wenn gdcloud init bereits festgelegt ist, können Sie das Flag --project weglassen.
  • ROLE: Die vordefinierte Rolle, die dem ProjectServiceAccount zugewiesen werden soll. Geben Sie Rollen im Format Role/name an, wobei Role der Kubernetes-Typ IAMRole und name der Name der vordefinierten Rolle ist. Wenn Sie beispielsweise die Rolle „Projektbetrachter“ zuweisen möchten, legen Sie die Rolle auf IAMRole/project-viewer fest.
  • ROLE_NAMESPACE: der Namespace der Rolle, die an das Dienstkonto gebunden werden soll. Dies gilt nur, wenn Ihr Universum mehrere Zonen hat.
  • NAME: Der Name der zu verwendenden Dienstidentität.

Dienstidentität löschen

Wenn Sie Dienstkonten in einem Projekt löschen möchten, verwenden Sie die GDC Console oder die gdcloud CLI.

Nachdem Sie eine Dienstidentität gelöscht haben, haben Anwendungen über diese Dienstidentität keinen Zugriff mehr auf Projektressourcen.

Konsole

  1. Melden Sie sich in der GDC-Konsole an.
  2. Wählen Sie im Navigationsmenü Identität & Zugriff > Dienstidentitäten aus.
  3. Klicken Sie das Kästchen neben der Dienstidentität an, die Sie löschen möchten.
  4. Klicken Sie auf Löschen.
  5. Das Bestätigungsdialogfeld wird angezeigt. Geben Sie im Feld Bestätigen Sie das Löschen durch folgende Eingabe den Wert remove ein.
  6. Klicken Sie auf Löschen.

gdcloud

Führen Sie den folgenden Befehl aus, um eine Dienstidentität zu löschen:

gdcloud iam service-accounts delete NAME \
    --project=PROJECT

Schlüsselpaare erstellen und hinzufügen

Wenn Sie Schlüsselpaare in einem Projekt erstellen und hinzufügen möchten, verwenden Sie die GDC Console, die gdcloud CLI oder die API.

Konsole

  1. Melden Sie sich in der GDC-Konsole an.
  2. Wählen Sie im Navigationsmenü Identität & Zugriff > Dienstidentitäten aus.
  3. Klicken Sie auf den Namen der Dienstidentität, die Sie dem Schlüssel hinzufügen möchten.
  4. Klicken Sie auf Neuen Schlüssel erstellen.
  5. Der neue Schlüssel wird in der Liste Schlüssel angezeigt und in einem Dialogfeld wird bestätigt, dass Sie den Schlüssel erfolgreich erstellt haben.

gdcloud

Mit dem Befehl gdcloud werden die JSON-Datei für die Standardanmeldedaten der Anwendung sowie die öffentlichen und privaten Schlüsselpaare erstellt:

gdcloud iam service-accounts keys create APPLICATION_DEFAULT_CREDENTIALS_FILENAME \
    --project=PROJECT \
    --iam-account=NAME \
    --ca-cert-path=CA_CERTIFICATE_PATH

Ersetzen Sie die folgenden Werte:

  • APPLICATION_DEFAULT_CREDENTIALS_FILENAME: der Name der JSON-Datei.
  • PROJECT : Wählt das Projekt aus, für das der Schlüssel erstellt werden soll. Wenn gdcloud init bereits festgelegt ist, können Sie das Flag --project weglassen.
  • NAME: Der Name der Dienstidentität, für die der Schlüssel hinzugefügt werden soll.
  • CA_CERTIFICATE_PATH (optional): Der Zertifikatspfad der Zertifizierungsstelle (Certificate Authority, CA) zum Überprüfen des Authentifizierungsendpunkts. Wenn Sie diesen Pfad nicht angeben, werden die CA-Zertifikate des Systems verwendet. Sie müssen die CA in den System-CA-Zertifikaten installieren.

Distributed Cloud fügt den öffentlichen Schlüssel den ProjectServiceAccount-Schlüsseln hinzu, die Sie zum Überprüfen der JSON-Webtokens (JWTs) verwenden, die mit dem privaten Schlüssel signiert werden. Der private Schlüssel wird in die JSON-Datei mit den Standardanmeldedaten der Anwendung geschrieben.

Das folgende Beispiel zeigt die JSON-Datei für die Standardanmeldedaten der Anwendung:

{
"type": "gdch_service_account",
"format_version": "1",
"project": "project_name",
"private_key_id": "abcdef1234567890",
"private_key": "-----BEGIN PRIVATE KEY-----\nETC\n-----END PRIVATE KEY-----\n",
"name": "service_identity_name",
"ca_cert_path": "service_identity_name",
"token_uri": "https://service-identity.<Domain>/authenticate"
}

In diesem Beispiel werden die folgenden Werte verwendet:

  • project: der Projekt-Namespace in der Organisation.
  • private_key_id: die dem Schlüssel zugewiesene ID.
  • private_key: Der private ECDSA P256-Schlüssel im PEM-Format, der von der CLI generiert wird.
  • name: der Name der Dienstidentität.
  • token_uri: die Adresse des Authentifizierungsendpunkts.

API

  1. Erstellen Sie das Schlüsselpaar aus öffentlichem und privatem Schlüssel. In den folgenden Befehlen wird openssl als Beispiel verwendet. Das ist ein gängiges Tool für diesen Zweck.

    openssl ecparam -name prime256v1 -genkey -noout -out "key.pem"
    openssl ec -in "key.pem" -pubout > "pub.pem"
    
  2. Base64-Codierung des öffentlichen Schlüssels und Abrufen der zugehörigen Schlüssel-ID:

    KEY_ID=$(openssl pkey -in key.pem -pubout -outform der | openssl dgst -sha256 | sed 's/^.* //')
    BASE64_ENCODED_KEY=$(cat pub.pem | base64)
    
  3. Erstellen oder aktualisieren Sie die YAML-Datei der benutzerdefinierten Ressource ProjectServiceAccount, einschließlich der generierten Schlüsselinformationen aus dem vorherigen Schritt:

    apiVersion: resourcemanager.global.gdc.goog/v1
    kind: ProjectServiceAccount
    metadata:
      name: NAME
      namespace: PROJECT
    spec:
      keys:
      - algorithm: ALGORITHM
      id: KEY_ID
      key: BASE64_ENCODED_KEY
      validAfter: "START_TIME"
      validBefore: "EXPIRATION_TIME"
    

    Ersetzen Sie die folgenden Variablen:

    • NAME: der Name der ProjectServiceAccount-Ressource. Der Name muss innerhalb des Projekt-Namespace eindeutig sein.
    • PROJECT: das Projekt, in dem Sie den Schlüssel erstellen.
    • ALGORITHM: Der Algorithmus des Schlüssels. Es werden nur ES256-Schlüssel unterstützt.
    • KEY_ID: die eindeutige Kennung des Schlüssels. Die ID wird verwendet, um zu bestimmen, welcher Schlüssel für die Überprüfung verwendet werden soll.
    • BASE64_ENCODED_KEY: Der Base64-codierte öffentliche Schlüssel im PEM-Format, der für die Überprüfung verwendet wird. Der private Schlüssel, der zum Generieren dieses öffentlichen Schlüssels verwendet wird, muss im ECDSA P256-PEM-Format vorliegen.
    • START_TIME: Die Startzeit, ab der der Schlüssel gültig ist, z. B. 2025-02-07T00:59:34Z.
    • EXPIRATION_TIME: die Ablaufzeit für den Schlüssel, z. B. 2026-02-07T00:59:34Z.
  4. Wenden Sie die benutzerdefinierte Ressource ProjectServiceAccount auf den globalen API-Server an:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    Ersetzen Sie die Variable GLOBAL_API_SERVER_KUBECONFIG durch den Pfad zur kubeconfig-Datei für den globalen API-Server.

  5. Erstellen Sie die JSON-Datei mit den Standardanmeldedaten für die Anwendung, die den privaten Schlüssel enthält. Achten Sie darauf, dass die Variable KEY_ID in der JSON-Datei auf denselben Wert gesetzt ist wie die Variable KEY_ID, die Sie in der ProjectServiceAccount-Spezifikation verwendet haben.

    cat <<EOF > "key_file.json"
    {
      "format_version": "1",
      "name": "NAME",
      "private_key": "$(tr '\n' '\t' < "key.pem" | sed 's/\t/\\n/g')",
      "private_key_id": "KEY_ID",
      "project": "PROJECT",
      "token_uri": "AUTH_URL",
      "type": "gdch_service_account"
    }
    EOF
    

    Ersetzen Sie die folgenden Variablen:

    • NAME: der Name der Dienstidentität.
    • KEY_ID: die eindeutige Kennung des Schlüssels. Die ID wird verwendet, um zu bestimmen, mit welchem Schlüssel die Signatur überprüft werden soll. Sie muss mit dem KEY_ID-Wert übereinstimmen, der in der ProjectServiceAccount-Spezifikation verwendet wird.
    • PROJECT: Der Projekt-Namespace in der Organisation.
    • AUTH_URL: die Adresse des Authentifizierungsendpunkts.
  6. Fügen Sie dem Projekt das Schlüsselpaar hinzu, indem Sie das Dienstkonto aktivieren:

    gdcloud auth activate-service-account –-key-file=key_file.json
    

Anmeldedaten für Dienstkonten auflisten

Öffentliche Schlüssel aus einem bestimmten ProjectServiceAccount im Projekt auflisten:

gdcloud iam service-accounts keys list \
    --project=PROJECT \
    --iam-account=NAME

Anmeldedaten löschen

Verwenden Sie zum Löschen des öffentlichen Schlüssels die GDC Console oder die gdcloud CLI.

Konsole

  1. Melden Sie sich in der GDC-Konsole an.
  2. Wählen Sie im Navigationsmenü Identität & Zugriff > Dienstidentitäten aus.
  3. Klicken Sie auf den Namen der Dienstidentität, die den Schlüssel enthält, den Sie löschen möchten.
  4. Klicken Sie auf Löschen.
  5. Klicken Sie im Bestätigungsdialogfeld auf Löschen.

gdcloud

Entfernen Sie den öffentlichen Schlüssel mit der Schlüssel-ID aus dem entsprechenden ProjectServiceAccount im Projekt:

gdcloud iam service-accounts keys delete KEY_ID \
    --project=PROJECT \
    --iam-account=NAME

Dienstkonto mit einem Dienstkontoschlüssel autorisieren

Mit dem Befehl gdcloud können Sie ein Dienstkonto mit einem Dienstkontoschlüssel aktivieren:

  1. Erstellen Sie eine Schlüsseldatei für das Dienstkonto, falls Sie noch keine haben.

  2. Aktivieren Sie das Dienstkonto mit dem folgenden Befehl:

    gdcloud auth activate-service-account --key-file=KEY_FILE
    

    Ersetzen Sie KEY_FILE durch den Pfad zur Schlüsseldatei des Dienstkontos.

    Nach der Aktivierung des Dienstkontos verwendet gdcloud für nachfolgende Befehle die Anmeldedaten des Dienstkontos anstelle Ihrer Nutzeranmeldedaten.