Authentifizierung mit HTTP-Zielen verwenden

Cloud Scheduler kann HTTP-Ziele aufrufen, die eine Authentifizierung erfordern, wenn Sie ein zugeordnetes Dienstkonto mit den entsprechenden Anmeldeinformationen eingerichtet haben.

Dienstkonto einrichten

Ein Dienstkonto wird in der Regel von einer Anwendung oder Computing-Arbeitslast verwendet und durch seine E-Mail-Adresse identifiziert, die für das Konto eindeutig ist.

Anwendungen können Dienstkonten für autorisierte API-Aufrufe verwenden, indem sie sich als Dienstkonto selbst authentifizieren und auf alle Ressourcen zugreifen, auf die das Dienstkonto Zugriff hat.

Die gängigste Methode, um einer Anwendung die Authentifizierung als Dienstkonto zu ermöglichen, besteht darin, ein Dienstkonto an die Ressource anzuhängen, auf der die Anwendung ausgeführt wird. Anschließend können Sie dem Dienstkonto IAM-Rollen (Identity and Access Management) zuweisen, damit das Dienstkonto auf Google Cloud -Ressourcen zugreifen kann.

  1. Wenn Sie noch kein Dienstkonto haben, das Sie für Cloud Scheduler-Jobs mit HTTP-Zielen verwenden möchten, erstellen Sie ein neues Dienstkonto. Bitte beachten Sie dabei Folgendes:

    • Das Dienstkonto muss zu dem Projekt gehören, in dem der Cloud Scheduler-Job erstellt wird.

    • Verwenden Sie nicht den Cloud Scheduler-Dienst-Agenten (service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Er kann nicht für diesen Zweck verwendet werden.

    • Entziehen Sie dem Cloud Scheduler-Dienst-Agent in Ihrem Projekt nicht die Rolle „Cloud Scheduler-Dienst-Agent“ (roles/cloudscheduler.serviceAgent). Dies führt zu 403-Antworten an Endpunkte, die eine Authentifizierung erfordern, auch wenn das Dienstkonto des Jobs die entsprechende Rolle hat.

  2. Wenn sich Ihr Ziel in Google Cloudbefindet, weisen Sie Ihrem Dienstkonto die erforderlichen IAM-Rollen zu. Jeder Dienst in Google Cloud erfordert eine bestimmte Rolle und der empfangende Dienst überprüft automatisch das generierte Token. Für Cloud Run und Cloud Run Functions der zweiten Generation müssen Sie beispielsweise die Rolle Cloud Run Invoker zuweisen.

    Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) für das Dienstkonto zuzuweisen, um die Berechtigung zu erhalten, die Sie zum Verknüpfen eines Dienstkontos mit einer Ressource benötigen. Diese vordefinierte Rolle enthält die Berechtigung iam.serviceAccounts.actAs, die zum Anhängen eines Dienstkontos an eine Ressource erforderlich ist. Wenn Sie das Dienstkonto erstellt haben, wird Ihnen diese Berechtigung automatisch gewährt.

    Wenn Sie im vorherigen Schritt speziell ein Dienstkonto zum Aufrufen des Dienstes erstellt haben, auf den Ihr Cloud Scheduler-Job ausgerichtet ist, können Sie dem Prinzip der minimalen Berechtigung folgen, indem Sie das Konto und seine Aufruferberechtigung an Ihren Zieldienst binden:

    Console

    1. Wählen Sie in der Google Cloud -Console auf der Seite für die Projektauswahl einGoogle Cloud -Projekt aus.

      Zur Projektauswahl

    2. Rufen Sie die Seite für den Ressourcentyp auf, den Sie aufrufen. Wenn Sie beispielsweise einen Cloud Run-Dienst aufrufen, rufen Sie die Seite auf, auf der Cloud Run-Dienste aufgeführt sind.

    3. Klicken Sie auf das Kästchen links neben dem Dienst, den Sie aufrufen möchten. (Klicken Sie nicht auf den Dienst selbst.)

    4. Klicken Sie auf den Tab Berechtigungen.

      Wenn der Informationsbereich nicht sichtbar ist, müssen Sie möglicherweise auf Infofeld ansehen > Berechtigungen klicken.

    5. Klicken Sie auf Hauptkonto hinzufügen.

    6. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse für das Dienstkonto ein, das Sie erstellt haben.

    7. Wählen Sie in der Liste Rolle auswählen eine Rolle aus, die Sie zuweisen möchten.

      Wählen Sie die Rolle aus, die nur die Berechtigungen enthält, die das Hauptkonto benötigt, um dem Prinzip der geringsten Berechtigung zu folgen.

    8. Klicken Sie auf Speichern.

    gcloud

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL \
        --role=ROLE
    

    Ersetzen Sie Folgendes:

    • RESOURCE_TYPE: Der Ressourcentyp Ihres Ziels. Beispiel: run für ein Cloud Run-Ziel.
    • RESOURCE_ID: Die Kennung für Ihr Ziel. Beispiel: Der Dienstname für ein Cloud Run-Ziel.
    • PRINCIPAL: die Kennung für Ihr Dienstkonto. Sie hat die folgende Form: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Beispiel: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: Der Name der Rolle, die für den Aufruf des Zieldienstes erforderlich ist. Beispiel: roles/run.invoker für ein Cloud Run- oder Cloud Run-Funktionsziel der zweiten Generation.
    • Weitere optionale Parameter werden in der gcloud-Befehlszeilenreferenz beschrieben.

    Beispiele:

    • Weisen Sie dem Dienstkonto my-service-account@my-project.iam.gserviceaccount.comroles/run.invoker die IAM-Rolle Cloud Run Invoker (roles/run.invoker) für den Cloud Run-Dienst my-service zu:

      gcloud run add-iam-policy-binding my-service \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker
      
    • Weisen Sie dem Dienstkonto my-service-account@my-project.iam.gserviceaccount.comroles/run.invoker die IAM-Rolle Cloud Run Invoker (roles/run.invoker) zu, die für Cloud Run-Funktionen der 2. Generation für die Cloud Run-Funktion my-gen2-function erforderlich ist:

      gcloud functions add-iam-policy-binding my-gen2-function \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker \
          --gen2
      
  3. Wenn sich Ihr Ziel außerhalb von Google Cloudbefindet, muss der empfangende Dienst das Token manuell prüfen.

  4. Der standardmäßige Cloud Scheduler-Dienst-Agent wird automatisch eingerichtet, wenn Sie die Cloud Scheduler API aktivieren, sofern Sie sie nicht vor dem 19. März 2019 aktiviert haben. In diesem Fall müssen Sie die Rolle „Cloud Scheduler-Dienst-Agent“ zuweisen. Auf diese Weise können Header-Tokens für Ihr Dienstkonto generiert werden, damit dieses bei Ihrem Ziel authentifiziert werden kann.

Cloud Scheduler-Job mit Authentifizierung erstellen

Für die Authentifizierung zwischen Cloud Scheduler und einem HTTP-Ziel erstellt Cloud Scheduler ein Header-Token basierend auf Ihrem Client-Dienstkonto, das durch seine E-Mail-Adresse identifiziert wird, und sendet es über HTTPS an das Ziel. Sie können entweder ein ID-Token (OIDC) oder ein OAuth-Token (Zugriffstoken) verwenden. OIDC wird im Allgemeinen verwendet, außer für Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Token erwarten.

Wenn Sie einen Cloud Scheduler-Job erstellen möchten, der die Authentifizierung verwendet, müssen Sie beim Erstellen des Jobs den Tokentyp und die E-Mail-Adresse hinzufügen, die das Client-Dienstkonto identifiziert:

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Scheduler“ auf.

    Zu Cloud Scheduler

  2. Klicken Sie auf  Job erstellen.

  3. Geben Sie im Feld Name einen Namen für den Job ein, der für das Projekt eindeutig ist. Sie können Jobnamen in einem Projekt nicht wiederverwenden, auch wenn Sie den zugehörigen Job gelöscht haben.

  4. Wählen Sie in der Liste Region eine Region für den Job aus.

  5. Geben Sie eine Häufigkeit und eine Zeitzone für Ihren Job an. Der hier angegebene String kann ein beliebiger Unix-Cron-kompatibler String sein.

  6. Klicken Sie auf Weiter.

  7. Wählen Sie in der Liste Zieltyp die Option HTTP aus.

  8. Geben Sie eine URL und eine HTTP-Methode an.

  9. Wählen Sie in der Liste Auth header den Tokentyp aus. Ein OIDC-Token wird im Allgemeinen verwendet, außer für Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Token erwarten.

  10. Wählen Sie in der Liste Dienstkonto die E-Mail-Adresse Ihres Dienstkontos aus.

  11. Optional können Sie eine Zielgruppe angeben, die die Empfänger des OIDC-Tokens einschränkt. In der Regel ist das die Ziel-URL des Jobs ohne URL-Parameter. Falls nichts angegeben wurde, wird die gesamte URL einschließlich der Anfrageparameter als Zielgruppe verwendet.

  12. Konfigurieren Sie optionale Einstellungen.

  13. Klicken Sie auf Erstellen.

gcloud

gcloud scheduler jobs create http JOB_ID \
    --schedule="FREQUENCY" \
    --uri=URI \
    --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL

Ersetzen Sie Folgendes:

  • JOB_ID: Ein Name für den Job, der für das Projekt eindeutig ist. Sie können Jobnamen in einem Projekt nicht wiederverwenden, auch wenn Sie den zugehörigen Job gelöscht haben.
  • FREQUENCY: Das Intervall oder die Häufigkeit, mit der der Job ausgeführt werden soll, z. B. every 3 hours oder every 10 mins. Der hier angegebene String kann ein beliebiger Unix-Cron-kompatibler String sein.
  • URI: die vollständig qualifizierte URL des Endpunkts.
  • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse Ihres Dienstkontos. Ein OIDC-Token wird im Allgemeinen verwendet, außer für Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Token erwarten. Verwenden Sie stattdessen das Flag --oauth-service-account-email, um einen OAuth-Tokentyp zu definieren.
  • Weitere optionale Parameter werden in der gcloud-Befehlszeilenreferenz beschrieben.

Rolle „Cloud Scheduler-Dienst-Agent“ zuweisen

Einige Google Cloud Dienste benötigen Zugriff auf Ihre Ressourcen, damit sie Aufgaben für Sie ausführen können. Um diesem Bedarf gerecht zu werden, erstellt und verwaltet Google Cloud Dienstkonten, die als Dienst-Agents bezeichnet werden. Diese werden automatisch erstellt und ihnen werden automatisch Rollen zugewiesen, wenn Sie Google Cloud-Dienste aktivieren und verwenden.

Der Cloud Scheduler-Dienst-Agent benötigt die Rolle Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent). Ohne diese Rolle schlagen Cloud Scheduler-Jobs fehl. Sie können Ihrem Cloud Scheduler-Dienst-Agent, der eine E-Mail-Adresse im folgenden Format hat, die Rolle manuell zuweisen:

service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com

Sie müssen die Rolle nur manuell zuweisen, wenn eine der folgenden Bedingungen erfüllt ist:

  • Sie haben die Cloud Scheduler API vor dem 19. März 2019 aktiviert.
  • Sie haben die Rolle „Cloud Scheduler Service Agent“ aus dem Dienst-Agent entfernt.

Sie können prüfen, ob der Cloud Scheduler-Dienst-Agent in Ihrem Projekt eingerichtet ist und ihm die Rolle „Cloud Scheduler Service Agent“ zugewiesen wurde, indem Sie den aktuellen Zugriff Ihres Projekts ansehen. Wenn Sie den Zugriff auf Ihr Projekt in der Google Cloud Console ansehen, müssen Sie das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen anklicken.

Informationen zum Zuweisen einer Rolle für Ihren Dienst-Agent finden Sie unter Rollen erstellen und zuweisen.

Nächste Schritte

Informationen zur programmatischen Authentifizierung bei Cloud Scheduler