Authentifizierung mit HTTP-Zielen verwenden

Cloud Scheduler kann HTTP-Ziele aufrufen, für die eine Authentifizierung erforderlich ist, wenn Sie ein zugehöriges Dienstkonto mit den entsprechenden Anmeldedaten eingerichtet haben.

Dienstkonto einrichten

  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. Wichtige Hinweise:

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

    • Der Cloud Scheduler-Dienst-Agent (service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com) darf nicht für diesen Zweck verwendet werden.

    • Widerrufen Sie nicht die Rolle des Cloud Scheduler-Dienst-Agents (roles/cloudscheduler.serviceAgent) des Cloud Scheduler-Dienst-Agents in Ihrem Projekt. Dies führt zu einer Antwort von 403 auf Endpunkte, die eine Authentifizierung erfordern, auch wenn das Dienstkonto des Jobs die entsprechende Rolle hat.

  2. Wenn sich Ihr Ziel innerhalb von Google Cloud befindet, weisen Sie Ihrem Dienstkonto die erforderlichen IAM-Rollen zu. Für jeden Dienst in Google Cloud ist eine bestimmte Rolle erforderlich. Der empfangende Dienst überprüft das generierte Token automatisch. Für Cloud Run- und Cloud Functions-Funktionen der zweiten Generation müssen Sie beispielsweise die Rolle Cloud Run Invoker hinzufügen.

    Zum Bereitstellen einer Ressource mit einem vom Nutzer verwalteten Dienstkonto muss der Bereitsteller die Berechtigung iam.serviceAccounts.actAs für dieses Dienstkonto haben. Wenn Sie das Dienstkonto erstellt haben, wird Ihnen diese Berechtigung automatisch gewährt. Andernfalls muss Ihnen eine Person mit den entsprechenden Berechtigungen diese Berechtigung für das Dienstkonto erteilen.

    Best Practice: Wenn Sie im vorherigen Schritt ein Dienstkonto speziell zum Aufrufen des Dienstes erstellt haben, auf den Ihr Cloud Scheduler-Job ausgerichtet ist, sollten Sie nach dem Prinzip der geringsten Berechtigung (Best Practice für die Sicherheit) vorgehen. Binden Sie dazu das Konto und die Aufruferberechtigung an Ihren Zieldienst. Dazu können Sie die Google Cloud Console oder die gcloud CLI verwenden:

    Console

    1. Öffnen Sie die Google Cloud Console.

    Zur Console

    2. Wählen Sie Ihr Projekt aus.

    3. Rufen Sie die Seite für den Ressourcentyp auf, den Sie aufrufen. Wenn Sie beispielsweise einen Cloud Run-Dienst aufrufen, rufen Sie die Seite mit der Liste der Cloud Run-Dienste auf.

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

    5. Klicken Sie auf den Tab Berechtigungen. Wenn der Informationsbereich nicht angezeigt wird, müssen Sie möglicherweise erst auf Infofeld ansehen und dann auf Berechtigungen klicken.

    6. Klicken Sie auf Hauptkonto hinzufügen.

    7. Geben Sie unter Hauptkonten hinzufügen die E-Mail-Adresse für das von Ihnen erstellte Dienstkonto ein.

    8. Wählen Sie unter Rollen zuweisen die gewünschte Rolle aus der Drop-down-Liste aus. Folgen Sie dem Prinzip der geringsten Berechtigung und wählen Sie die Rolle aus, die nur die Berechtigungen enthält, die das Hauptkonto benötigt.

    9. Klicken Sie auf Speichern.

    gcloud

    Führen Sie den Befehl add-iam-policy-binding aus:

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

    Ersetzen Sie:

    • RESOURCE_TYPE: Der Ressourcentyp des Ziels. Beispiel: run für ein Cloud Run-Ziel.
    • RESOURCE_ID: Die Kennung des Ziels. Beispiel: der Dienstname für ein Cloud Run-Ziel.
    • PRINCIPAL: Die Kennung für Ihr Dienstkonto. Dieser hat das folgende Format: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Beispiel: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: Der Name der Rolle, die Ihr Zieldienst für den Aufruf benötigt. Beispiel: roles/run.invoker für ein Cloud Run-Ziel oder ein Cloud Functions-Ziel der zweiten Generation.

    Beispiele:

    • Cloud Run-Ziel: Mit dem folgenden Befehl wird dem Dienstkonto my-service-account@my-project.iam.gserviceaccount.com für den Cloud Run-Dienst my-service die Rolle Cloud Run Invoker zugewiesen:

      gcloud run add-iam-policy-binding my-service \
      --member=my-service-account@my-project.iam.gserviceaccount.com \
      --role=roles/run.invoker
      
    • Cloud Functions-Ziel: Mit dem folgenden Befehl wird dem Dienstkonto my-service-account@my-project.iam.gserviceaccount.com für die Cloud Functions-Funktion my-gen2-function der zweiten Generation die Rolle Cloud Run Invoker zugewiesen, die für Cloud Functions-Funktionen der zweiten Generation erforderlich ist:

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

  4. Das Cloud Scheduler-Standarddienstkonto wird automatisch eingerichtet, wenn Sie die Cloud Scheduler API aktivieren, es sei denn, Sie haben sie vor dem 19. März 2019 aktiviert. In diesem Fall müssen Sie die Rolle Cloud Scheduler Service Agent manuell hinzufügen. Auf diese Weise kann er Headertokens für Ihr Clientdienstkonto zur Authentifizierung bei Ihrem Ziel generieren.

    Wenn Sie prüfen möchten, ob das Cloud Scheduler-Standarddienstkonto in Ihrem Projekt eingerichtet ist und ihm die Rolle Cloud Scheduler Service Agent zugewiesen hat, rufen Sie den aktuellen Zugriff Ihres Projekts auf. Wenn Sie den Zugriff Ihres Projekts in der Google Cloud Console ansehen, müssen Sie das Kästchen Von Google bereitgestellte Rollenzuweisungen einbeziehen anklicken.

Planerjob mit Authentifizierung erstellen

Wenn Sie einen Job mit Authentifizierung erstellen möchten, müssen Sie der create-job-Anfrage den Tokentyp und die E-Mail-Adresse hinzufügen, die das Clientdienstkonto identifiziert:

Console

  1. Geben Sie die Frequenz wie gewohnt an.
  2. Geben Sie HTTP als Zieltyp an.
  3. Fügen Sie die URL und die HTTP-Methode wie gewohnt hinzu.
  4. Wählen Sie in der Liste Auth header den Tokentyp aus. Beachten Sie, dass im Allgemeinen OIDC (ID-Token) verwendet wird, mit Ausnahme von Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Zugriffstoken erwarten.
  5. Geben Sie bei Dienstkonto die E-Mail-Adresse des Client-Dienstkontos an.
  6. Audience ist optional und schränkt die Empfänger des OIDC-Tokens ein. In der Regel ist dies die Ziel-URL des Jobs (ohne URL-Parameter). Wenn keine Angabe erfolgt, wird standardmäßig die gesamte URL als Zielgruppe verwendet (einschließlich Anfrageparameter).

gcloud

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

Ersetzen Sie Folgendes:

  • JOB_ID: ein Name für den Job. Er darf im Projekt nur einmal vorkommen. Sie können Jobnamen in einem Projekt nicht wiederverwenden, selbst wenn Sie den zugehörigen Job löschen.
  • FREQUENCY: Das Jobintervall gibt an, wie oft der Job ausgeführt werden soll, z. B. every 3 hours oder every 10 mins. Hier kann jeder beliebige mit Crontab kompatible String angegeben werden. Die Legacy-Cron-Syntax von App Engine wird für vorhandene Jobs weiterhin unterstützt, auch wenn wir ihre Verwendung nicht mehr empfehlen.
  • URI: die vollständig qualifizierte URL des Endpunkts.
  • --oidc-service-account-email oder --oauth-service-account-email: Definiert den Tokentyp. Beachten Sie, dass OIDC im Allgemeinen verwendet wird, mit Ausnahme von Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Token erwarten.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des Client-Dienstkontos.
  • Es stehen weitere optionale Parameter zur Verfügung und werden in der gcloud-Befehlszeilenreferenz beschrieben.

Tokentypen auswählen

Für die Authentifizierung zwischen Cloud Scheduler und einem HTTP-Ziel erstellt Cloud Scheduler ein Header-Token auf der Grundlage Ihres Client-Dienstkontos, 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, mit Ausnahme von Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Token erwarten.

Cloud Scheduler-Dienstkonto manuell die Rolle „Cloud Scheduler-Dienst-Agent“ hinzufügen

Das ist nur erforderlich, wenn eine der folgenden Bedingungen zutrifft:

  • Sie haben die Cloud Scheduler API vor dem 19. März 2019 aktiviert
  • Sie haben die Rolle des Cloud Scheduler-Dienst-Agents aus Ihrem Dienstkonto entfernt.

Das Cloud Scheduler-Dienstkonto erfordert die Rolle des Cloud Scheduler-Dienst-Agents. Ohne diese Rolle schlagen Cloud Scheduler-Jobs fehl. Sie können Ihrem Cloud Scheduler-Dienstkonto die Rolle des Cloud Scheduler-Dienst-Agents über die Google Cloud Console oder die gcloud CLI hinzufügen:

Console

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

    Zur Cloud Scheduler API

    Wenn es das Feld Status gibt und der Status Enabled (Aktiviert) ist, fahren Sie fort. Ist dies nicht der Fall, klicken Sie auf Aktivieren.

  2. Rufen Sie in der Google Cloud Console die Seite Einstellungen auf.

    Einstellungen aufrufen

  3. Suchen und kopieren Sie Ihre Projektnummer.

  4. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen

  5. Klicken Sie auf Zugriff erlauben. Der Bereich Zugriff erlauben wird geöffnet.

  6. Fügen Sie im Feld Neue Hauptkonten eine E-Mail-Adresse mit folgendem Format hinzu:

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

    Ersetzen Sie PROJECT_NUMBER durch die Nummer Ihres Google Cloud-Projekts.

  7. Suchen Sie in der Liste Rolle auswählen nach Cloud Scheduler-Dienst-Agent und wählen Sie ihn aus.

  8. Klicken Sie auf Speichern.

gcloud

  1. Prüfen Sie, ob die Cloud Scheduler API für Ihr Projekt aktiviert ist:

    gcloud services list --enabled \
     --filter=cloudscheduler.googleapis.com
    
    • Wenn die folgende Ausgabe angezeigt wird, ist die API aktiviert:

      NAME: cloudscheduler.googleapis.com
      TITLE: Cloud Scheduler API
      
    • Ist dies nicht der Fall (z. B. Listed 0 items.), aktivieren Sie die API:

      gcloud services enable cloudscheduler.googleapis.com
      
  2. Suchen Sie Ihre Projektnummer:

    gcloud projects describe PROJECT_ID --format='table(projectNumber)'
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  3. Kopieren Sie die Nummer.

  4. Gewähren Sie dem Cloud Scheduler-Dienstkonto die Rolle Cloud Scheduler Service Agent:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com \
       --role roles/cloudscheduler.serviceAgent
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • PROJECT_NUMBER: die zuvor kopierte Projektnummer