In diesem Dokument wird erläutert, wie Sie das Dienstkonto eines Batchjobs angeben. Dies wirkt sich auf die Ressourcen und Anwendungen aus, auf die die VMs eines Jobs zugreifen können. Wenn Sie kein benutzerdefiniertes Dienstkonto angeben, verwenden Jobs standardmäßig das Compute Engine-Standarddienstkonto, das standardmäßig automatisch an alle VMs in einem Projekt angehängt wird. Daher bietet die Verwendung eines benutzerdefinierten Dienstkontos mehr Kontrolle bei der Verwaltung der Berechtigungen eines Jobs und ist eine empfohlene Best Practice zur Einschränkung von Berechtigungen.
Weitere Informationen zum Dienstkonto eines Jobs
Hinweis
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Artikel Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzererfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Steuern des Zugriffs für Jobs mit benutzerdefinierten Dienstkonten benötigen:
-
So erstellen Sie einen Job:
- Batch Job Editor (
roles/batch.jobsEditor) für das Projekt - Dienstkontonutzer (
roles/iam.serviceAccountUser) für das Dienstkonto des Jobs. Standardmäßig ist dies das Compute Engine-Standarddienstkonto.
- Batch Job Editor (
-
So rufen Sie Dienstkonten auf:
Dienstkonten aufrufen (
roles/iam.serviceAccountViewer) für das Projekt
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
So erstellen Sie einen Job:
-
Geben Sie das Dienstkonto an, das Sie für diesen Job verwenden möchten. Achten Sie darauf, dass dieses Dienstkonto alle erforderlichen Berechtigungen zum Ausführen des Jobs hat.
Weitere Informationen zum Aufrufen von Dienstkonten und den erforderlichen Berechtigungen für das Dienstkonto eines Jobs.
Job mit einem benutzerdefinierten Dienstkonto erstellen
Wählen Sie eine der folgenden Methoden aus, um einen Job mit einem benutzerdefinierten Dienstkonto zu erstellen:
- Geben Sie das benutzerdefinierte Dienstkonto in der Definition des Jobs an, wie in diesem Abschnitt gezeigt.
- Verwenden Sie eine Compute Engine-Instanzvorlage und geben Sie das benutzerdefinierte Dienstkonto sowohl in der Instanzvorlage als auch in der Definition des Jobs an.
In diesem Abschnitt finden Sie ein Beispiel für das Erstellen eines Jobs, der ein benutzerdefiniertes Dienstkonto verwendet. Sie können einen Job mit einem benutzerdefinierten Dienstkonto mit der gcloud CLI, der Batch API, Java, Node.js oder Python erstellen.
gcloud
Wenn Sie einen Job mit einem benutzerdefinierten Dienstkonto mit der
gcloud CLI erstellen möchten, verwenden Sie den Befehl gcloud batch jobs submit
und geben Sie das benutzerdefinierte Dienstkonto in der Konfigurationsdatei des Jobs an.
So erstellen Sie beispielsweise einen Skriptjob, der ein benutzerdefiniertes Dienstkonto verwendet:
Erstellen Sie im aktuellen Verzeichnis eine JSON-Datei mit dem Namen
hello-world-service-account.jsonund dem folgenden Inhalt:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello World! This is task $BATCH_TASK_INDEX." } } ] } } ], "allocationPolicy": { "serviceAccount": { "email": "SERVICE_ACCOUNT_EMAIL" } } }Dabei ist
SERVICE_ACCOUNT_EMAILdie E-Mail-Adresse Ihres Dienstkontos. Wenn dasserviceAccountFeld nicht angegeben ist, wird der Wert auf das Compute Engine-Standarddienstkontofestgelegt.Führen Sie dazu diesen Befehl aus:
gcloud batch jobs submit example-service-account-job \ --location us-central1 \ --config hello-world-service-account.json
API
Wenn Sie einen Job mit einem benutzerdefinierten Dienstkonto mit der
Batch API erstellen möchten, verwenden Sie die
jobs.create Methode
und geben Sie das benutzerdefinierte Dienstkonto im allocationPolicy Feld an.
Wenn Sie beispielsweise einen Skriptjob erstellen möchten, der ein benutzerdefiniertes Dienstkonto verwendet, stellen Sie die folgende Anfrage:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-service-account-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
}
}
],
"allocationPolicy": {
"serviceAccount": {
"email": "SERVICE_ACCOUNT_EMAIL"
}
}
}
Ersetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID Ihres Projekts.SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse Ihres Dienstkontos. Wenn dasserviceAccountFeld nicht angegeben ist, wird der Wert auf das Compute Engine-Standarddienstkontofestgelegt.
Java
Node.js
Python
Nächste Schritte
- Wenn Sie Probleme beim Erstellen oder Ausführen eines Jobs haben, lesen Sie den Abschnitt Fehlerbehebung.
- Jobs und Aufgaben ansehen.
- Weitere Informationen zu Optionen für die Joberstellung.