Cloud Scheduler kann HTTP-Ziele aufrufen, die eine Authentifizierung erfordern, wenn Sie ein verknüpftes Dienstkonto mit den entsprechenden Anmeldedaten eingerichtet haben.
Dienstkonto einrichten
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, dass403
auf Endpunkte antwortet, die eine Authentifizierung erfordern, auch wenn das Dienstkonto des Jobs die entsprechende Rolle hat.
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.
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-Dienstmy-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 Generationmy-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
Wenn sich Ihr Ziel außerhalb von Google Cloud befindet, muss der empfangende Dienst das Token manuell überprüfen.
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
- Geben Sie die Frequenz wie gewohnt an.
- Geben Sie als Zieltyp HTTP an.
- Fügen Sie die URL und die HTTP-Methode wie immer hinzu.
- 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. - Geben Sie unter Dienstkonto die E-Mail-Adresse des Kundendienstkontos an.
- 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
oderevery 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
Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler API auf.
Wenn das Feld Status vorhanden und der Status Enabled (Aktiviert) ist, fahren Sie fort. Falls nicht, klicken Sie auf Aktivieren.
Rufen Sie in der Google Cloud Console die Seite Einstellungen auf.
Suchen und kopieren Sie Ihre Projektnummer.
Rufen Sie in der Google Cloud Console die Seite IAM auf.
Klicken Sie auf Zugriff erlauben. Der Bereich Zugriff erlauben wird geöffnet.
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.Suchen Sie in der Liste Rolle auswählen nach dem Cloud Scheduler-Dienst-Agent und wählen Sie ihn aus.
Klicken Sie auf Speichern.
gcloud
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
Suchen Sie Ihre Projektnummer:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.Kopieren Sie die Nummer.
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