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
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 der Cloud Scheduler-Job erstellt wird.
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. Dies führt zu403
-Antworten an Endpunkte, die eine Authentifizierung erfordern, auch wenn das Dienstkonto des Jobs die entsprechende Rolle hat.
Wenn Ihr Ziel in Google Cloud liegt, erteilen Sie Ihrem Dienstkonto die erforderlichen IAM-Rollen. Jeder Dienst in Google Cloud benötigt eine bestimmte Rolle, und der empfangende Dienst verifiziert automatisch das generierte Token. Für Cloud Run und Cloud Run-Funktionen der 2. Generation müssen Sie beispielsweise die Rolle
Cloud Run Invoker
hinzufügen.Hinweis: Damit eine Ressource mit einem vom Nutzer verwalteten Dienstkonto bereitgestellt werden kann, muss der Bereitsteller die Berechtigung
iam.serviceAccounts.actAs
für dieses Dienstkonto haben. Wenn Sie das Dienstkonto erstellt haben, wird Ihnen automatisch diese Berechtigung gewährt. 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 Service. 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. 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. 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.
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 für das Ziel. Beispiel: Der Dienstname für ein Cloud Run-Ziel.PRINCIPAL
: Die Kennung für Ihr Dienstkonto. 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-Funktionsziel 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-Dienstmy-service
:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
Cloud Run-Funktionsziel:Mit dem folgenden Befehl wird die Rolle Cloud Run Invoker für die zweite Generation erforderlich Cloud Run-Funktionen für das Dienstkonto
my-service-account@my-project.iam.gserviceaccount.com
für die zweite Funktionmy-gen2-function
zum Generieren von Cloud Run-Funktionen:gcloud functions add-iam-policy-binding my-gen2-function \ --member=serviceAccount: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 prüfen.
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. Auf diese Weise können Header-Token für Ihr Client-Dienstkonto generiert werden, damit dieses bei Ihrem Ziel authentifiziert werden kann.Sie können prüfen, ob das Cloud Scheduler-Standarddienstkonto in Ihrem Projekt eingerichtet ist und die Rolle
Cloud Scheduler Service Agent
hat. 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.
Scheduler-Job mit Authentifizierung erstellen
Wenn Sie einen Job erstellen möchten, der eine Authentifizierung verwendet, müssen Sie Ihrer create-job
-Anfrage den Tokentyp und die E-Mail-Adresse hinzufügen, mit der das Kundendienstkonto identifiziert wird:
Console
- Geben Sie die Frequenz wie gewohnt an.
- Geben Sie HTTP als Zieltyp an.
- Fügen Sie die URL und die HTTP-Methode wie gewohnt 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 bei Dienstkonto die E-Mail-Adresse des Client-Dienstkontos an.
- 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. Sie können Jobnamen in einem Projekt nicht wiederverwenden, auch wenn Sie den zugehörigen Job gelöscht haben.FREQUENCY
: Das Jobintervall gibt an, wie oft der 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 zwar nicht mehr empfohlen, wird aber für vorhandene Jobs weiterhin unterstützt.URI
: die vollständig qualifizierte URL des Endpunkts.--oidc-service-account-email
oder--oauth-service-account-email
: definiert den Tokentyp. Beachten Sie, dass OIDC im Allgemeinen verwendet wird, außer für Google APIs, die auf*.googleapis.com
gehostet werden: Diese APIs erwarten ein OAuth-Token.CLIENT_SERVICE_ACCOUNT_EMAIL
: die E-Mail-Adresse von Client-Dienstkonto.- Weitere optionale Parameter sind verfügbar und werden in der gcloud-Befehlszeilenreferenz beschrieben.
Tokentypen auswählen
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-Token) verwenden
oder ein OAuth-Token (Zugriffstoken). OIDC wird im Allgemeinen verwendet, außer für Google APIs, die auf *.googleapis.com
gehostet werden, da diese APIs ein OAuth-Token erwarten.
Cloud Scheduler-Dienstkonten die Rolle „Cloud Scheduler-Dienst-Agent“ manuell 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 „Cloud Scheduler-Dienst-Agent“ aus Ihrem Dienstkonto entfernt.
Das Cloud Scheduler-Dienstkonto benötigt die Rolle "Cloud Scheduler-Dienst-Agent". Ohne diese Rolle schlagen Cloud Scheduler-Jobs fehl. Sie können den Cloud Scheduler-Dienst-Agent-Rolle für Cloud Scheduler Dienstkonto von der Google Cloud Console aus gcloud CLI:
Console
Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler API auf.
Wenn es ein Feld Status gibt und der Status Aktiviert lautet, fahren Sie fort. Falls nicht, klicken Sie auf Aktivieren.
Rufen Sie in der Google Cloud Console die Seite Einstellungen auf.
Suchen Sie Ihre Projektnummer und kopieren Sie sie.
Rufen Sie in der Google Cloud Console die IAM auf. Seite.
Klicken Sie auf Zugriff erlauben. Der Bereich Zugriff erlauben wird geöffnet.
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.Suchen Sie in der Liste Rolle auswählen nach Cloud Scheduler und wählen Sie ihn aus. Dienst-Agent.
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 (z. B.
Listed 0 items.
), aktivieren Sie die API: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.
Weisen Sie dem Cloud Scheduler-Dienstkonto die Rolle
Cloud Scheduler Service Agent
zu: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