Authentifizierung mit HTTP-Zielen verwenden

Cloud Scheduler kann HTTP-Ziele aufrufen, die eine Authentifizierung erfordern, wenn Sie ein verknüpftes Dienstkonto eingerichtet haben, über die entsprechenden Anmeldedaten verfügt.

Dienstkonto einrichten

  1. Wenn Sie noch kein Dienstkonto haben, das Sie für Cloud Scheduler-Jobs mit HTTP-Zielen, Erstellen Sie ein neues Dienstkonto. Wichtige Hinweise:

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

    • Cloud Scheduler-Dienst-Agent nicht verwenden (service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Sie kann zu diesem Zweck nicht verwendet werden.

    • Rolle des Cloud Scheduler-Dienst-Agents nicht widerrufen (roles/cloudscheduler.serviceAgent) aus Cloud Scheduler Dienst-Agent in Ihrem Projekt. Das Ergebnis ist 403 Antworten auf Endpunkte, die eine Authentifizierung erfordern, auch wenn der Dienst Ihres Jobs die entsprechende Rolle hat.

  2. Wenn sich Ihr Ziel in Google Cloud befindet, gewähren Sie die erforderlichen IAM-Rollen für Ihren Dienst Konto. Jeder Dienst in Google Cloud benötigt eine bestimmte Rolle, und der empfangende Dienst verifiziert automatisch das generierte Token. Für für Cloud Run und die zweite Generation Cloud Functions-Funktionen verwenden möchten, müssen Sie die Rolle Cloud Run Invoker hinzufügen.

    Zum Bereitstellen einer Ressource mit einem vom Nutzer verwalteten Dienstkonto muss der Bereitsteller muss hierfür die Berechtigung iam.serviceAccounts.actAs haben Dienstkonto. Wenn Sie das Dienstkonto erstellt haben, hat diese Berechtigung automatisch. Falls nicht, sollte eine Person, die das richtige Berechtigungen müssen Ihnen diese Berechtigung für das Dienstkonto gewähren.

    Best Practice:Wenn Sie im vorherigen Schritt ein Dienstkonto erstellt haben zum Aufrufen des Dienstes, den Ihr Cloud Scheduler-Job sollten Sie sich nach dem Prinzip der geringsten Berechtigung (beste Übung) durch Binden des Kontos und seiner Aufruferberechtigung an Ihr Ziel . Verwenden Sie dazu die Google Cloud Console oder das gcloud CLI:

    Console

    1. Öffnen Sie die Google Cloud Console.

    Los mit der Console

    2. Wählen Sie Ihr Projekt aus.

    3. Rufen Sie die Seite für den Ressourcentyp auf, den Sie aufrufen. Für Wenn Sie beispielsweise einen Cloud Run-Dienst aufrufen, rufen Sie die Seite auf, Listet 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. Falls der Informationsbereich nicht angezeigt wird, müssen Sie ggf. auf Infofeld anzeigen 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 den Dienst ein des von Ihnen erstellten Kontos.

    8. Wählen Sie unter Rollen zuweisen die gewünschte Rolle aus der Drop-down-Liste aus. Folgen Sie dem Prinzip der geringsten Berechtigung, indem Sie die Rolle auswählen, die Folgendes beinhaltet: nur die Berechtigungen erstellen, 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. Für Beispiel: der Dienstname für ein Cloud Run-Ziel.
    • PRINCIPAL: Die Kennung für Ihr Dienstkonto. Sie hat folgende Form: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS Beispiel: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: Der Name der Rolle, die das Ziel hat. den Dienst für den Aufruf benötigt. Beispiel: roles/run.invoker für ein Cloud Functions-Ziel von Cloud Run oder der zweiten Generation

    Beispiele:

    • Cloud Run-Ziel: Der folgende Befehl gewährt die Rolle Cloud Run Invoker für das Dienstkonto my-service-account@my-project.iam.gserviceaccount.com für den Cloud Run-Dienst my-service:

      gcloud run add-iam-policy-binding my-service \
       --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
       --role=roles/run.invoker
      
    • Cloud Functions-Ziel: Der folgende Befehl gewährt die Rolle Cloud Run Invoker für die zweite Generation erforderlich Cloud Functions-Funktionen für das Dienstkonto my-service-account@my-project.iam.gserviceaccount.com für die zweite zur Generierung der Cloud Functions-Funktion my-gen2-function:

      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 überprüfen Sie das Token manuell.

  4. Das Cloud Scheduler-Standarddienstkonto wird automatisch festgelegt wenn Sie die Cloud Scheduler API aktivieren, es sei denn, Sie haben sie zuvor aktiviert 19. März 2019. In diesem Fall müssen Sie Fügen Sie die Rolle Cloud Scheduler Service Agent manuell hinzu. Das bedeutet, Er kann Header-Tokens im Namen Ihres Client-Dienstkontos generieren. bei deinem Ziel zu authentifizieren.

    Sie können prüfen, ob das Cloud Scheduler-Standarddienstkonto in Ihrem Projekt eingerichtet haben und dass es die Cloud Scheduler Service Agent Rolle, die ihm von den aktuellen Zugriff Ihres Projekts ansehen. Wenn Sie den Zugriff Ihres Projekts in der Google Cloud Console ansehen, Klicken Sie das Kästchen Von Google bereitgestellte Rollenzuweisungen einbeziehen an.

Planerjob mit Authentifizierung erstellen

Wenn Sie einen Job erstellen möchten, der eine Authentifizierung verwendet, müssen Sie den Tokentyp hinzufügen und die E-Mail-Adresse, die das Client-Dienstkonto in Ihrem create-job-Anfrage:

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) wird im Allgemeinen verwendet, außer für Google APIs, die auf *.googleapis.com, 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 die Ziel-URL des Jobs (ohne URL-Parameter). Falls nicht angegeben ist, 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. Das muss einzigartig sind. Beachten Sie, dass Sie Jobnamen in einem Projekt nicht wiederverwenden können auch wenn Sie den zugehörigen Job löschen.
  • FREQUENCY: Das Jobintervall gibt an, wie oft der ausgeführt werden soll, z. B. every 3 hours oder every 10 mins. Hier kann jeder beliebige mit Crontab kompatible String angegeben werden. Wir empfehlen zwar die Verwendung der alten Cron-Syntax von App Engine wird weiterhin für vorhandene Jobs unterstützt.)
  • URI: die vollständig qualifizierte URL des Endpunkts.
  • --oidc-service-account-email oder --oauth-service-account-email: definiert den Tokentyp. OIDC wird im Allgemeinen verwendet, mit Ausnahme von Auf *.googleapis.com gehostete Google APIs, da diese APIs ein OAuth erwarten Token.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse von Client-Dienstkonto.
  • Weitere optionale Parameter sind verfügbar und werden in der gcloud-Befehlszeilenreferenz.

Tokentypen auswählen

So authentifizieren Sie sich zwischen Cloud Scheduler und einem HTTP-Ziel: Cloud Scheduler erstellt ein Header-Token basierend auf Ihrem Clientdienst -Konto, das durch seine E-Mail-Adresse identifiziert wird, und sendet es über HTTPS an das Ziel. Sie können entweder ein ID-Token (OIDC-Token) verwenden oder ein OAuth-Token (Zugriffstoken). OIDC wird im Allgemeinen verwendet, mit Ausnahme von Google APIs gehostet auf *.googleapis.com, 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 Dienst entfernt Konto

Das Cloud Scheduler-Dienstkonto benötigt die Rolle "Cloud Scheduler-Dienst-Agent". Ohne diese Rolle Cloud Scheduler-Jobs schlagen fehl. Sie können den Cloud Scheduler-Dienst-Agent-Rolle für Cloud Scheduler Dienstkonto von der Google Cloud Console aus gcloud CLI:

Console

  1. Wechseln Sie in der Google Cloud Console zur Cloud Scheduler API.

    Zur Cloud Scheduler API

    Wenn es das Feld Status gibt und der Status Enabled (Aktiviert) ist, können Sie fortfahren. Ist dies nicht der Fall, klicken Sie auf Aktivieren.

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

    Einstellungen aufrufen

  3. Suchen und kopieren Sie Ihre Projektnummer.

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

    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 Ihren Google Cloud-Projektnummer.

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

  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 Projektnummer, die Sie Zuvor kopiert