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

  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.

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

    • Widerrufen Sie nicht die Rolle „Cloud Scheduler-Dienst-Agent“ (roles/cloudscheduler.serviceAgent) für den Cloud Scheduler-Dienst-Agent in Ihrem Projekt. 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 Cloud befindet, erteilen Sie Ihrem Dienstkonto die erforderlichen IAM-Rollen. Jeder Dienst innerhalb von Google Cloud benötigt eine bestimmte Rolle. Der empfangende Dienst überprüft das generierte Token automatisch. Für Cloud Run und Cloud Run Functions der 2. Generation müssen Sie beispielsweise die Rolle Cloud Run Invoker hinzufügen.

    Hinweis: Damit eine Ressource mit einem vom Nutzer verwalteten Dienstkonto bereitgestellt werden kann, muss der Bereitsteller die Berechtigung iam.serviceAccounts.actAs für dieses Dienstkonto haben. Wenn Sie das Dienstkonto erstellt haben, wird Ihnen automatisch diese Berechtigung gewährt. Falls nicht, muss Ihnen jemand mit den entsprechenden Berechtigungen die 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 das Prinzip der geringsten Berechtigung (Best Practice für die Sicherheit) befolgen, indem Sie das Konto und die Berechtigung des Aufrufers an den Zieldienst binden. Sie können dazu die Google Cloud Console oder die gcloud CLI verwenden:

    Console

    1. Öffnen Sie die Google Cloud Console.

    Console aufrufen

    2. Wählen Sie Ihr Projekt aus.

    3. Rufen Sie die Seite für den aufgerufenen Ressourcentyp auf. 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 sichtbar ist, müssen Sie möglicherweise 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 des von Ihnen erstellten Dienstkontos ein.

    8. Wählen Sie unter Rollen zuweisen eine Rolle aus der Drop-down-Liste aus. Beachten Sie das 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 für das Ziel. Beispiel: Der Dienstname für ein Cloud Run-Ziel.
    • PRINCIPAL: Die Kennung für Ihr Dienstkonto. Sie hat folgendes Format: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Beispiel: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: Der Name der Rolle, die für die Aufrufung Ihres Zieldienstes erforderlich ist. Beispiel: roles/run.invoker für ein Cloud Run- oder Cloud Run 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=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
       --role=roles/run.invoker
      
    • Cloud Run Functions-Ziel:Mit dem folgenden Befehl wird dem Dienstkonto my-service-account@my-project.iam.gserviceaccount.com für die Cloud Run Functions-Funktion my-gen2-function der 2. Generation die Rolle Cloud Run Invoker zugewiesen, die für Cloud Run Functions der 2. Generation 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 Cloud befindet, muss der empfangende Dienst das Token manuell prüfen.

  4. Das Standard-Cloud Scheduler-Dienstkonto 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 können Header-Token für Ihr Client-Dienstkonto generiert werden, damit dieses bei Ihrem Ziel authentifiziert werden kann.

    Sie können prüfen, ob das Cloud Scheduler-Standarddienstkonto in Ihrem Projekt eingerichtet ist und die Rolle Cloud Scheduler Service Agent hat. Sehen Sie sich dazu den aktuellen Zugriff Ihres Projekts an. Wenn Sie den Zugriff Ihres Projekts in der Google Cloud Console aufrufen, müssen Sie das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen aktivieren.

Scheduler-Job mit Authentifizierung erstellen

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

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 OIDC (ID-Token) im Allgemeinen verwendet wird, außer für Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Zugriffstoken erwarten.
  5. Geben Sie für Service account die E-Mail-Adresse des Client-Dienstkontos an.
  6. Zielgruppe ist optional und schränkt die Empfänger des OIDC-Tokens ein. In der Regel ist das die Ziel-URL des Jobs (ohne URL-Parameter). Falls nichts angegeben wurde, wird standardmäßig die gesamte URL (einschließlich Anfrageparameter) als Zielgruppe verwendet.

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 muss im Projekt eindeutig sein. Sie können Jobnamen in einem Projekt nicht wiederverwenden, auch wenn Sie den zugehörigen Job gelöscht haben.
  • 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 alte Cron-Syntax von App Engine wird zwar nicht mehr empfohlen, wird aber für vorhandene Jobs weiterhin unterstützt.
  • 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, außer für Google APIs, die auf *.googleapis.com gehostet werden: Diese APIs erwarten ein OAuth-Token.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des Kundenservicekontos.
  • Weitere optionale Parameter sind verfügbar 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 basierend auf Ihrem Client-Dienstkonto, das durch seine E-Mail identifiziert wird, und sendet es über HTTPS an das Ziel. Sie können entweder ein ID-Token (OIDC) oder ein OAuth-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.

Cloud Scheduler-Dienstkonten die Rolle „Cloud Scheduler-Dienst-Agent“ manuell 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 „Cloud Scheduler-Dienst-Agent“ aus Ihrem Dienstkonto entfernt.

Das Cloud Scheduler-Dienstkonto benötigt die Rolle „Cloud Scheduler-Dienst-Agent“. Ohne diese Rolle schlagen Cloud Scheduler-Jobs fehl. Sie können der Rolle „Cloud Scheduler-Dienst-Agent“ über die Google Cloud Console oder die gcloud CLI ein Cloud Scheduler-Dienstkonto hinzufügen:

Console

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

    Cloud Scheduler API

    Wenn es ein Feld Status gibt und der Status Aktiviert lautet, fahren Sie fort. Falls nicht, klicken Sie auf Aktivieren.

  2. Öffnen Sie in der Google Cloud Console die Seite Einstellungen.

    Einstellungen aufrufen

  3. Suchen Sie Ihre Projektnummer und kopieren Sie sie.

  4. Öffnen Sie in der Google Cloud Console die Seite IAM.

    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 im folgenden Format hinzu:

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

    Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer.

  7. Suchen Sie in der Liste Rolle auswählen nach Cloud Scheduler Service Agent und wählen Sie sie 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 das nicht der Fall (z. B. wird Listed 0 items. angezeigt), 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. Weisen Sie dem Cloud Scheduler-Dienstkonto die Rolle Cloud Scheduler Service Agent zu:

    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