In diesem Dokument wird beschrieben, wie Sie vertrauliche Daten, die Sie für einen Batchjob angeben möchten, mit Secret Manager-Secrets schützen.
Secret Manager-Secrets schützen vertrauliche Daten durch Verschlüsselung. In einem Batchjob können Sie ein oder mehrere vorhandene Secrets angeben, um die darin enthaltenen vertraulichen Daten sicher zu übergeben. Diese Daten können Sie für Folgendes verwenden:
Benutzerdefinierte Umgebungsvariablen die vertrauliche Daten enthalten sicher definieren.
Die Anmeldedaten für eine Docker-Registry sicher angeben, damit die ausführbaren Dateien eines Jobs auf die privaten Container-Images zugreifen können.
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.
- Erstellen Sie ein Secret oder suchen Sie ein Secret für die vertraulichen Daten, die Sie sicher für einen Job angeben möchten.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:
- 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 Standarddienstkonto für Compute Engine.
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.
- Batch Job Editor (
-
Damit das Dienstkonto des Jobs die erforderlichen Berechtigungen für den Zugriff auf Secrets hat, bitten Sie Ihren Administrator, dem Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) IAM-Rolle für das Secret zuzuweisen.
Vertrauliche Daten sicher an benutzerdefinierte Umgebungsvariablen übergeben
Wenn Sie vertrauliche Daten aus Secret Manager-Secrets sicher an benutzerdefinierte
Umgebungsvariablen übergeben möchten, müssen Sie jede Umgebungsvariable im
Unterfeld für Secret-Variablen (secretVariables) für eine Umgebung definieren
und für jeden Wert ein Secret angeben.
Wenn Sie ein Secret in einem Job angeben, müssen Sie es als Pfad
zu einer Secret-Version formatieren:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.
Sie können einen Job erstellen, der Secret-Variablen definiert, indem Sie die gcloud CLI, die Batch API, Java, Node.js oder Python verwenden.
Im folgenden Beispiel wird erläutert, wie Sie einen Job erstellen, der
eine Secret-Variable für die
Umgebung aller ausführbaren Dateien definiert und verwendet (environment Unterfeld von taskSpec).
gcloud
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben sind, und fügen Sie das Unterfeld
secretVariablesfür eine oder mehrere Umgebungen hinzu.Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, der eine Secret-Variable in der Umgebung für alle ausführbaren Dateien verwendet, erstellen Sie eine JSON-Datei mit folgendem Inhalt:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo This is the secret: ${SECRET_VARIABLE_NAME}" } } ], "environment": { "secretVariables": { "{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION" } } } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }Ersetzen Sie Folgendes:
SECRET_VARIABLE_NAME: der Name der Secret-Variablen. Gemäß Konvention werden Umgebungsvariablennamen großgeschrieben.Wenn Sie sicher auf die vertraulichen Daten aus dem Secret Manager-Secret der Variablen zugreifen möchten, geben Sie diesen Variablennamen in den ausführbaren Dateien dieses Jobs an. Die Secret-Variable ist für alle ausführbaren Dateien in derselben Umgebung zugänglich, in der Sie die Secret-Variable definieren.
PROJECT_ID: die Projekt-ID Ihres Projekts.SECRET_NAME: der Name eines vorhandenen Secret Manager-Secrets.VERSION: die Version des angegebenen Secrets, das die Daten enthält, die Sie an den Job übergeben möchten. Dies kann die Versionsnummer oderlatestsein.
Verwenden Sie den
gcloud batch jobs submitBefehl, um den Job zu erstellen und auszuführen:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEErsetzen Sie Folgendes:
JOB_NAME: der Name des Jobs.LOCATION: der Standort des Jobs.JSON_CONFIGURATION_FILE: der Pfad zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Stellen Sie eine POST Anfrage an die
jobs.create Methode
in der das secretVariables Unterfeld für eine oder mehrere Umgebungen angegeben ist.
Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, der eine Secret-Variable in der Umgebung für alle ausführbaren Dateien verwendet, stellen Sie die folgende Anfrage:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo This is the secret: ${SECRET_VARIABLE_NAME}"
}
}
],
"environment": {
"secretVariables": {
"{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION"
}
}
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Ersetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID Ihres Projekts.LOCATION: der Standort des Jobs.JOB_NAME: der Name des Jobs.SECRET_VARIABLE_NAME: der Name der Secret-Variablen. Gemäß Konvention werden Umgebungsvariablennamen großgeschrieben.Wenn Sie sicher auf die vertraulichen Daten aus dem Secret Manager-Secret der Variablen zugreifen möchten, geben Sie diesen Variablennamen in den ausführbaren Dateien dieses Jobs an. Die Secret-Variable ist für alle ausführbaren Dateien in derselben Umgebung zugänglich, in der Sie die Secret-Variable definieren.
SECRET_NAME: der Name eines vorhandenen Secret Manager-Secrets.VERSION: die Version des angegebenen Secrets, das die Daten enthält, die Sie an den Job übergeben möchten. Dies kann die Versionsnummer oderlatestsein.
Java
Node.js
Python
Sicher auf Container-Images zugreifen, für die Anmeldedaten für die Docker-Registry erforderlich sind
Wenn ein Container-Image aus einer privaten Docker-Registry verwendet werden soll, muss eine ausführbare Datei Anmeldedaten angeben, mit denen sie auf diese Docker-Registry zugreifen kann.
Insbesondere für jede ausführbare Container-Datei, bei der das Feld für den
Image-URI (imageUri)
auf ein Image aus einer privaten Docker-Registry festgelegt ist, müssen Sie alle
Anmeldedaten angeben, die für den Zugriff auf diese Docker-Registry erforderlich sind. Verwenden Sie dazu die
Felder für den Nutzernamen (username) und
das Passwort (password).
Sie können alle vertraulichen Anmeldedaten für eine Docker-Registry schützen, indem Sie vorhandene Secrets angeben, die die Informationen enthalten, anstatt diese Felder direkt zu definieren.
Wenn Sie ein Secret in einem Job angeben, müssen Sie es als Pfad
zu einer Secret-Version formatieren:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.
Sie können einen Job erstellen, der Container-Images aus einer privaten Docker-Registry verwendet, indem Sie die gcloud CLI oder die Batch API verwenden. Im folgenden Beispiel wird erläutert, wie Sie einen Job erstellen, der ein Container-Image aus einer privaten Docker-Registry verwendet, indem Sie den Nutzernamen direkt und das Passwort als Secret angeben.
gcloud
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben sind. Fügen Sie für alle ausführbaren Container-Dateien, die Images aus einer privaten Docker-Registry verwenden, alle Anmeldedaten, die für den Zugriff erforderlich sind, in die Felder
usernameundpasswordein.Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, der ein Image aus einer privaten Docker-Registry angibt, erstellen Sie eine JSON-Datei mit folgendem Inhalt:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "PRIVATE_IMAGE_URI", "commands": [ "-c", "echo This runnable uses a private image." ], "username": "USERNAME", "password": "PASSWORD" } } ], } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }Ersetzen Sie Folgendes:
PRIVATE_IMAGE_URI: der Image-URI für ein Container-Image aus einer privaten Docker-Registry. Wenn für dieses Image weitere Containereinstellungenerforderlich sind, müssen Sie diese ebenfalls angeben.USERNAME: der Nutzername für die private Docker-Registry, der als Secret oder direkt angegeben werden kann.PASSWORD: das Passwort für die private Docker-Registry, das als Secret (empfohlen) oder direkt angegeben werden kann.Wenn Sie das Passwort beispielsweise als Secret angeben möchten, legen Sie
PASSWORDauf Folgendes fest:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONErsetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID Ihres Projekts.SECRET_NAME: der Name eines vorhandenen Secret Manager-Secrets.VERSION: die Version des angegebenen Secrets, das die Daten enthält, die Sie an den Job übergeben möchten. Dies kann die Versionsnummer oderlatestsein.
Verwenden Sie den
gcloud batch jobs submitBefehl, um den Job zu erstellen und auszuführen:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEErsetzen Sie Folgendes:
JOB_NAME: der Name des Jobs.LOCATION: der Standort des Jobs.JSON_CONFIGURATION_FILE: der Pfad zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Stellen Sie eine POST Anfrage an die
jobs.create Methode.
Fügen Sie für alle ausführbaren Container-Dateien, die Images aus einer privaten Docker-Registry verwenden, alle Anmeldedaten, die für den Zugriff erforderlich sind, in die Felder username und password ein.
Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, der ein Image aus einer privaten Docker-Registry angibt, stellen Sie die folgende Anfrage:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "PRIVATE_IMAGE_URI",
"commands": [
"-c",
"echo This runnable uses a private image."
],
"username": "USERNAME",
"password": "PASSWORD"
}
}
],
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Ersetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID Ihres Projekts.LOCATION: der Standort des Jobs.JOB_NAME: der Name des Jobs.PRIVATE_IMAGE_URI: der Image-URI für ein Container-Image aus einer privaten Docker-Registry. Wenn für dieses Image weitere Containereinstellungenerforderlich sind, müssen Sie diese ebenfalls angeben.USERNAME: der Nutzername für die private Docker-Registry, der als Secret oder direkt angegeben werden kann.PASSWORD: das Passwort für die private Docker-Registry, das als Secret (empfohlen) oder direkt angegeben werden kann.Wenn Sie das Passwort beispielsweise als Secret angeben möchten, legen Sie
PASSWORDauf Folgendes fest:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONErsetzen Sie Folgendes:
PROJECT_ID: die Projekt-ID Ihres Projekts.SECRET_NAME: der Name eines vorhandenen Secret Manager-Secrets.VERSION: die Version des angegebenen Secrets, das die Daten enthält, die Sie an den Job übergeben möchten. Dies kann die Versionsnummer oderlatestsein.
Nächste Schritte
Wenn Sie Probleme beim Erstellen oder Ausführen eines Jobs haben, lesen Sie den Abschnitt zu Fehlerbehebung.
Weitere Informationen zu Umgebungsvariablen.
Weitere Informationen zu Secret Manager.
Weitere Optionen zum Erstellen von Jobs