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

Ein Dienstkonto wird in der Regel von einer Anwendung oder Compute-Arbeitslast verwendet und 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 Dienstkonto 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 Ressourcen zugreifen kann. Google Cloud

  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. 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-Dienst-Agent (service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Er kann nicht für diesen Zweck verwendet werden.

    • Heben Sie die Rolle „Cloud Scheduler-Dienst-Agent“ (roles/cloudscheduler.serviceAgent) für den Cloud Scheduler-Dienst-Agent in Ihrem Projekt nicht auf. 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, weisen Sie Ihrem Dienstkonto die erforderlichen IAM-Rollen zu. Jeder Dienst in Google Cloud erfordert eine bestimmte Rolle und der empfangende Dienst überprüft automatisch das generierte Token. Für Cloud Run und Cloud Run Functions der zweiten Generation müssen Sie beispielsweise die Cloud Run Invoker Rolle zuweisen.

    Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das Dienstkonto zuzuweisen, um die Berechtigung zu erhalten, die Sie zum Anhängen eines Dienstkontos an eine Ressourcebenötigen. 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 diese Berechtigung automatisch gewährt.

    Wenn Sie im vorherigen Schritt speziell ein Dienstkonto erstellt haben, um den Dienst aufzurufen, auf den Ihr Cloud Scheduler-Job ausgerichtet ist, können Sie dem Prinzip der geringsten Berechtigung folgen, indem Sie das Konto und seine Aufruferberechtigung an Ihren Zieldienst binden:

    Console

    1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud Projekt aus.

      Zur Projektauswahl

    2. Rufen Sie die Seite für den Ressourcentyp auf, den Sie aufrufen. Wenn Sie beispielsweise einen Cloud Run-Dienst aufrufen, rufen Sie die Seite auf, auf der die Cloud Run-Dienste aufgeführt sind.

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

    4. Klicken Sie auf den Berechtigungen Tab.

      Wenn der Informationsbereich nicht sichtbar ist, klicken Sie möglicherweise auf Infofeld ansehen > Berechtigungen.

    5. Klicken Sie auf Hauptkonto hinzufügen.

    6. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des von Ihnen erstellten Dienstkontos ein.

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

      Folgen Sie dem Prinzip der geringsten Berechtigung, indem Sie die Rolle auswählen, 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 Ihres Ziels. Beispiel: run für ein Cloud Run-Ziel.
    • RESOURCE_ID: die ID Ihres Ziels. Beispiel: der Dienstname für ein Cloud Run-Ziel.
    • PRINCIPAL: die ID 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 Ihr Zieldienst für den Aufruf benötigt. 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 im Cloud Run-Dienst my-service die IAM-Rolle „Cloud Run-Aufrufer“ (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 in der Cloud Run-Funktion my-gen2-function die IAM-Rolle „Cloud Run-Aufrufer“ (roles/run.invoker) zu, die für Cloud Run Functions der zweiten 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
      

    Ein Beispiel für die Verwendung von Terraform zum Erstellen eines Dienstkontos mit der Berechtigung zum Aufrufen eines Cloud Run-Dienstes finden Sie unter Dienstkonto für Cloud Scheduler erstellen.

  3. Wenn sich Ihr Ziel außerhalb von Google Cloudbefindet, muss der empfangende Dienst das Token manuell prüfen .

  4. Der Standard-Dienst-Agent für Cloud Scheduler 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“ zuweisen. 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 ID-Token (OIDC) oder ein OAuth-Token (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, die das Client-Dienstkonto identifiziert:

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 Namen für den Job ein, der im Projekt eindeutig ist. 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 optionale 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 Name für den Job, der im Projekt eindeutig ist. 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.

Rolle „Cloud Scheduler-Dienst-Agent“ zuweisen

Einige Google Cloud Dienste benötigen Zugriff auf Ihre Ressourcen, damit sie Aufgaben für Sie ausführen können. Um diesem Bedarf gerecht zu werden, Google Cloud erstellt und verwaltet Dienstkonten, die als Dienst-Agents bezeichnet werden und denen automatisch Rollen zugewiesen werden, 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 zutrifft:

  • Sie haben die Cloud Scheduler API vor dem 19. März 2019 aktiviert.
  • Sie haben die Rolle „Cloud Scheduler-Dienst-Agent“ für den 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, indem Sie den aktuellen Zugriff auf Ihr Projekt ansehen. Beachten Sie, dass Sie, wenn Sie die Google Cloud Console verwenden, um den Zugriff auf Ihr Projekt anzusehen, das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen auswählen müssen.

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

Nächste Schritte

Informationen zur programmatischen Authentifizierung bei Cloud Scheduler.