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 aber nicht wie ein menschlicher Nutzer anmelden.

Dienstkonten sind nützlich für die Verwaltung der Google Distributed Cloud (GDC)-Appliance-Infrastruktur, die nicht mit dem Internet verbunden ist, z. B.:

  • Interne GDC-Appliance-Dienste und -Arbeitslasten, um sicher auf die GDC-Appliance-Steuerungsebene-API zuzugreifen.
  • Kundenarbeitslasten in der GDC-Appliance, um auf GDC-Appliance-Dienste zuzugreifen und autorisierte API-Aufrufe auszuführen.
  • Externe Arbeitslasten, um sich mit der GDC-Appliance zu verbinden.
  • GDC-Appliance-Dienste oder Systemcontroller, um sicher auf Kundenressourcen zuzugreifen. 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 Console, die gdcloud CLI oder die API verwalten. In der gdcloud CLI basiert die Funktion für Dienstidentitäten auf der ProjectServiceAccount API.

Hinweis

Sie können Dienstkonten nur in einem Projekt 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.

Verwenden Sie die GDC Console, die gdcloud CLI oder die API, um Dienstidentitäten in einem Projekt zu erstellen.

Console

  1. Melden Sie sich in der GDC Console 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

So erstellen Sie eine Dienstidentität:

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

Ersetzen Sie die folgenden Werte:

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

Mit diesem Befehl wird ein ProjectServiceAccount im Projektnamespace erstellt.

API

  1. Erstellen Sie eine YAML-Datei für die benutzerdefinierte Ressource 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 Ressource ProjectServiceAccount. Der Name muss innerhalb des Projektnamespaces 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, mit welchem Schlüssel die Überprüfung erfolgen soll.
    • BASE64_ENCODED_KEY: der base64-codierte öffentliche Schlüssel im PEM-Format, mit dem die Überprüfung erfolgen soll. Der private Schlüssel, der zum Generieren dieses öffentlichen Schlüssels verwendet wird, muss das ECDSA P256 PEM-Format haben.
    • 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 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

Verwenden Sie die GDC Console oder die gdcloud CLI, um eine Liste der Dienstkonten in einem Projekt aufzurufen.

Console

  1. Melden Sie sich in der GDC Console 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

So listen Sie die Dienstkonten in einem Projekt auf:

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

Rollenbindung der Dienstidentität 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 Berechtigungen zu erhalten, die zum Zuweisen von Rollen erforderlich sind.

Verwenden Sie die GDC Console oder die gdcloud CLI, um eine Rollenbindung zuzuweisen.

Console

  1. Melden Sie sich in der GDC Console 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-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 Rollenbindung für das Projekt erstellt und benannt, um die angegebene Rolle mit dem 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 --project Flag 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

Verwenden Sie die GDC Console oder die gdcloud CLI, um Dienstkonten in einem Projekt zu löschen.

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

Console

  1. Melden Sie sich in der GDC Console an.
  2. Wählen Sie im Navigationsmenü Identität & Zugriff > Dienstidentitäten aus.
  3. Klicken Sie auf das Kästchen neben der Dienstidentität, 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, indem Sie Folgendes eingeben 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.

Console

  1. Melden Sie sich in der GDC Console 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 ein Dialogfeld bestätigt, dass Sie den Schlüssel erfolgreich erstellt haben.

gdcloud

Mit dem Befehl gdcloud werden die JSON-Datei mit den 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 Pfad zum Zertifikat der Zertifizierungsstelle , um den Authentifizierungsendpunkt zu überprüfen. Wenn Sie diesen Pfad nicht angeben, werden die System-CA-Zertifikate verwendet. Sie müssen die Zertifizierungsstelle in den System-CA-Zertifikaten installieren.

Die GDC-Appliance fügt den öffentlichen Schlüssel den ProjectServiceAccount-Schlüsseln hinzu, mit denen Sie die JSON-Webtokens (JWT) überprüfen, die mit dem privaten Schlüssel signiert wurden. Der private Schlüssel wird in die JSON-Datei mit den Standardanmeldedaten der Anwendung geschrieben.

Das folgende Beispiel zeigt die JSON-Datei mit den 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 Projektnamespace 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. Generieren Sie das Schlüsselpaar aus öffentlichem und privatem Schlüssel. In den folgenden Befehlen wird openssl als Beispiel verwendet. Dies 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-codieren Sie den öffentlichen Schlüssel und rufen Sie die Schlüssel-ID ab:

    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 für die benutzerdefinierte 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 Ressource ProjectServiceAccount. Der Name muss innerhalb des Projektnamespaces 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, mit welchem Schlüssel die Überprüfung erfolgen soll.
    • BASE64_ENCODED_KEY: der base64-codierte öffentliche Schlüssel im PEM-Format, mit dem die Überprüfung erfolgen soll. Der private Schlüssel, der zum Generieren dieses öffentlichen Schlüssels verwendet wird, muss das ECDSA P256 PEM-Format haben.
    • 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 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 der Anwendung, die den privaten Schlüssel enthält. Achten Sie darauf, dass die Variable KEY_ID in der JSON-Datei auf denselben Wert wie die Variable KEY_ID in der ProjectServiceAccount-Spezifikation festgelegt ist.

    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 Überprüfung erfolgen soll. Sie muss mit dem Wert KEY_ID übereinstimmen, der in der ProjectServiceAccount-Spezifikation verwendet wird.
    • PROJECT: der Projektnamespace 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

Listen Sie die öffentlichen Schlüssel aus einem bestimmten ProjectServiceAccount im Projekt auf:

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

Anmeldedaten löschen

Verwenden Sie die GDC Console oder die gdcloud CLI, um den öffentlichen Schlüssel zu löschen.

Console

  1. Melden Sie sich in der GDC Console 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 angegebenen ProjectServiceAccount im Projekt:

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

Dienstkonto mit einem Dienstkontoschlüssel autorisieren

Sie können den Befehl gdcloud verwenden, um ein Dienstkonto mit einem Dienstkontoschlüssel zu aktivieren:

  1. Erstellen Sie eine Dienstkontoschlüsseldatei, falls Sie noch keine haben.

  2. Führen Sie den folgenden Befehl aus, um das Dienstkonto zu aktivieren:

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

    Ersetzen Sie KEY_FILE durch den Pfad zur Dienstkonto Schlüsseldatei.

    Nachdem Sie das Dienstkonto aktiviert haben, verwendet gdcloud die Anmeldedaten des Dienstkontos für nachfolgende Befehle anstelle Ihrer Nutzeranmeldedaten.