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 der Infrastruktur von Google Distributed Cloud (GDC) Air-Gap-Appliances, z. B.:

  • Interne GDC-Air-Gap-Appliance-Dienste und ‑Arbeitslasten für den sicheren Zugriff auf die API der GDC-Air-Gap-Appliance-Steuerungsebene.
  • Kundenarbeitslasten in der GDC-Appliance mit Air Gap, um auf GDC-Appliance-Dienste mit Air Gap zuzugreifen und autorisierte API-Aufrufe (Application Programming Interface) auszuführen.
  • Externe Arbeitslasten, die mit der GDC-Appliance mit Air Gap verbunden werden sollen.
  • GDC-Air-Gap-Appliance-Dienste oder Systemcontroller für den sicheren Zugriff auf Kundenressourcen. Dienstkonten können beispielsweise Authentifizierungs- und Autorisierungsworkflows verwalten, bei denen die Dienstcontroller, die im Bare-Metal-Kubernetes-Cluster ausgeführt werden, von Kunden verwaltete Arbeitslasten ausführen müssen.

Sie können Konten über die GDC-Konsole, die gdcloud CLI oder die API verwalten. In der gcloud CLI basiert die Funktion für Dienstidentitäten auf der ProjectServiceAccount API.

Hinweise

Sie können Dienstkonten nur innerhalb eines Projekts erstellen. Weitere Informationen 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 Dienstidentitäten in einem Projekt können Sie die GDC-Konsole, 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: Test service identity
  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 Projekt-Namespace erstellt.

API

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

    apiVersion: resourcemanager.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 ProjectServiceAccount-Ressource auf den Management API-Server an:

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

    Ersetzen Sie die Variable MANAGEMENT_API_SERVER_KUBECONFIG durch den Pfad zur kubeconfig-Datei für den Management 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 zu verknüpfen:

gdcloud iam service-accounts add-iam-policy-binding \
    --project=PROJECT \
    --role=ROLE \
    --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 ist, z. B. Role oder ProjectRole, und name der Name der vordefinierten Rolle. Wenn Sie beispielsweise die Rolle „Projektbetrachter“ zuweisen möchten, legen Sie die Rolle auf Role/project-viewer fest.
  • 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-Konsole 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

Verwenden Sie die GDC Console, die gdcloud CLI oder die API, um Schlüsselpaare in einem Projekt zu erstellen und hinzuzufügen.

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.

Die GDC-Appliance im Air-Gap fügt den öffentlichen Schlüssel den ProjectServiceAccount-Schlüsseln hinzu, mit denen Sie die JSON-Webtokens (JWTs) prüfen, 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.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 ProjectServiceAccount-Ressource auf den Management API-Server an:

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

    Ersetzen Sie die Variable MANAGEMENT_API_SERVER_KUBECONFIG durch den Pfad zur kubeconfig-Datei für den Management 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.