Authentifizierung mit HTTP-Zielen verwenden

Cloud Scheduler kann HTTP-Ziele aufrufen, die eine Authentifizierung erfordern, wenn Sie ein verknüpftes 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.

    • Verwenden Sie nicht das Cloud Scheduler-Standarddienstkonto service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com. Dieses von Google verwaltete Dienstkonto, auch Dienst-Agent genannt, kann für diesen Zweck nicht verwendet werden.

    • Entfernen Sie das Cloud Scheduler-Standarddienstkonto oder die Rolle Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent) nicht aus Ihrem Projekt. Dies führt dazu, dass 403 auf Endpunkte antwortet, die eine Authentifizierung erfordern, auch wenn das Dienstkonto des Jobs die entsprechende Rolle hat.

  2. Wenn sich Ihr Ziel in Google Cloud befindet, weisen Sie Ihrem Dienstkonto die erforderlichen IAM-Rollen zu. Für jeden Dienst in Google Cloud ist eine bestimmte Rolle erforderlich und 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, erhalten Sie diese Berechtigung automatisch. Ist dies nicht der Fall, muss Ihnen ein Nutzer mit den entsprechenden Berechtigungen für das Dienstkonto diese Berechtigung 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) anwenden. Dazu binden Sie das Konto und seine Aufruferberechtigung an Ihren Zieldienst. Sie können dazu 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. Gehen Sie zur Seite für den Ressourcentyp, den Sie aufrufen. Wenn Sie beispielsweise einen Cloud Run-Dienst aufrufen, rufen Sie die Seite auf, auf der Cloud Run-Dienste aufgelistet sind.

    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 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 erstellte Dienstkonto ein.

    8. Wählen Sie unter Rollen zuweisen aus der Drop-down-Liste eine zu gewährende Rolle 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 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 ID für Ihr Dienstkonto. Es 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: Der folgende Befehl gewährt dem Dienstkonto my-service-account@my-project.iam.gserviceaccount.com für die Cloud Functions-Funktion der zweiten Generation my-gen2-function die Rolle Cloud Run Invoker, die für die 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 überprüfen.

  4. Das standardmäßige 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 kann es im Namen Ihres Client-Dienstkontos Header-Tokens generieren, um sich bei Ihrem Ziel zu authentifizieren.

    Sie können prüfen, ob das Cloud Scheduler-Standarddienstkonto in Ihrem Projekt eingerichtet ist und ihm die Rolle Cloud Scheduler Service Agent zugewiesen wurde. Rufen Sie dazu 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 einschließen anklicken.

Planerjob mit Authentifizierung erstellen

Zum Erstellen eines Jobs mit Authentifizierung müssen Sie den Tokentyp und die E-Mail-Adresse, die das Clientdienstkonto identifiziert, in Ihre create-job-Anfrage aufnehmen:

Console

  1. Geben Sie die Frequenz wie gewohnt an.
  2. Geben Sie als Zieltyp HTTP an.
  3. Fügen Sie die URL und die HTTP-Methode wie immer 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 unter Dienstkonto die E-Mail-Adresse des Kundendienstkontos an.
  6. Zielgruppe ist optional und begrenzt die Empfänger des OIDC-Tokens. In der Regel ist dies die Ziel-URL des Jobs (ohne URL-Parameter). Falls 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 muss im Projekt eindeutig sein. Sie können einen Jobnamen in einem Projekt auch dann nicht wiederverwenden, 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 alte Cron-Syntax von App Engine wird für vorhandene Jobs weiterhin unterstützt, obwohl wir die Verwendung nicht mehr empfehlen.
  • URI: die voll qualifizierte URL des Endpunkts.
  • --oidc-service-account-email oder --oauth-service-account-email: definiert den Tokentyp. OIDC wird im Allgemeinen verwendet, außer für Google APIs, die auf *.googleapis.com gehostet werden, da diese APIs ein OAuth-Token erwarten.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des Clientdienstkontos.
  • Weitere optionale Parameter sind verfügbar und werden in der gcloud-Befehlszeilenreferenz beschrieben.

Tokentypen auswählen

Zur Authentifizierung zwischen Cloud Scheduler und einem HTTP-Ziel erstellt Cloud Scheduler ein Header-Token auf der Grundlage Ihres Clientdienstkontos, das durch seine E-Mail-Adresse identifiziert wird, und sendet es mithilfe von 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.

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

Dies 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 Service Agent“. Ohne diese Rolle schlagen Cloud Scheduler-Jobs fehl. Sie können Ihrem Cloud Scheduler-Dienstkonto die Rolle „Cloud Scheduler-Dienst-Agent“ über die Google Cloud Console oder über 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 das Feld Status vorhanden und der Status Enabled (Aktiviert) ist, fahren Sie fort. Falls nicht, 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 im folgenden Format hinzu:

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

    Ersetzen Sie PROJECT_NUMBER durch die Google Cloud-Projektnummer.

  7. Suchen Sie in der Liste Rolle auswählen nach dem 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, aktivieren Sie die API, z. B. wenn Listed 0 items. angezeigt wird:

      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