Authentifizierung mit HTTP-Zielen verwenden

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

Dienstkonto einrichten

Ein Dienstkonto wird in der Regel von einer Anwendung oder Computing-Arbeitslast verwendet und wird 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 das 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 es 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. 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-Dienstagenten (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, gewähren Sie Ihrem Dienstkonto die erforderlichen IAM-Rollen. 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 Run Functions der zweiten Generation müssen Sie beispielsweise die Rolle Cloud Run Invoker gewähren.

    Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) für das Dienstkonto zuzuweisen, um die Berechtigung zu erhalten, einem Dienstkonto eine Ressource zuzuweisen. 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 automatisch diese Berechtigung gewährt.

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

    Console

    1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus.

      Zur Projektauswahl

    2. 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.

    3. Klicken Sie das Kästchen links neben dem Dienst an, 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 von Ihnen erstellte Dienstkonto ein.

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

      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.

    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 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 Ihres Dienstkontos. 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.
    • Weitere optionale Parameter werden in der gcloud-Befehlszeilenreferenz beschrieben.

    Beispiele:

    • Weisen Sie dem Dienstkonto my-service-account@my-project.iam.gserviceaccount.com für den Cloud Run-Dienst my-service die IAM-Rolle Cloud Run Invoker (roles/run.invoker) 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.com für die Cloud Run-Funktion my-gen2-function die IAM-Rolle Cloud Run-Aufrufer (roles/run.invoker) zu, die von Cloud Run-Funktionen der 2. Generation benötigt wird:

      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, es sei denn, Sie haben sie vor dem 19. März 2019 aktiviert. In diesem Fall müssen Sie die Rolle „Cloud Scheduler-Dienst-Agent“ gewähren. Auf diese Weise können Header-Token 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 identifiziert wird, und sendet es über HTTPS an das Ziel. Sie können entweder ein OIDC-ID-Token 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.

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

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 eindeutigen Namen für den Job ein. 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 den 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 alle optionalen 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 eindeutiger Name für den Job im Projekt. 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.

Cloud Scheduler-Dienst-Agent-Rolle gewähren

Einige Google Cloud Dienste benötigen Zugriff auf Ihre Ressourcen, damit sie Aufgaben für Sie ausführen können. Um diese Anforderung zu erfüllen, erstellt und verwaltet Google Cloud Dienstkonten, die als Dienst-Agents bezeichnet werden. Diese Konten werden automatisch erstellt und erhalten Rollen, wenn Sie Google Cloud-Dienste aktivieren und verwenden.

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

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-Dienst-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-Dienst-Agent“ zugewiesen wurde. 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.

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

Nächste Schritte

Informationen zur programmatischen Authentifizierung bei Cloud Scheduler