In diesem Dokument wird beschrieben, wie Sie sensible Daten, die Sie für einen Batch-Job angeben möchten, mit Secret Manager-Secrets schützen.
Secret Manager-Secrets schützen sensible 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. Damit können Sie Folgendes tun:
Definieren Sie benutzerdefinierte Umgebungsvariablen, die sensible Daten enthalten, auf sichere Weise.
Geben Sie die Anmeldedaten für eine Docker Registry sicher an, damit die Runnables eines Jobs auf die privaten Container-Images zugreifen können.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Abschnitt Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
- Erstellen Sie ein Secret oder identifizieren Sie ein Secret für die vertraulichen Daten, die Sie für einen Job sicher 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, das standardmäßig das Compute Engine-Standarddienstkonto ist
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 Dienstkonto des Jobs die IAM-Rolle Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
) für das Secret zu erteilen.
Sensible 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 „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, in dem geheime Variablen definiert werden, indem Sie die gcloud CLI, die Batch API, Java, Node.js oder Python verwenden.
Im folgenden Beispiel wird gezeigt, wie Sie einen Job erstellen, der eine geheime Variable für die Umgebung aller Runnables (environment
-Unterfeld von taskSpec
) definiert und verwendet.
gcloud
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben werden, und fügen Sie das Unterfeld
secretVariables
für eine oder mehrere Umgebungen ein.Wenn Sie beispielsweise einen einfachen Scriptjob erstellen möchten, der eine geheime Variable in der Umgebung für alle Runnables 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. Entsprechend der Konvention werden Umgebungsvariablennamen großgeschrieben.Wenn Sie sicher auf die vertraulichen Daten aus dem Secret Manager-Secret der Variablen zugreifen möchten, geben Sie den Variablennamen in den Runnable-Objekten dieses Jobs an. Die Secret-Variable ist für alle ausführbaren Elemente 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. Das kann die Versionsnummer oderlatest
sein.
Verwenden Sie den Befehl
gcloud batch jobs submit
, um den Job zu erstellen und auszuführen:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ersetzen 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 Methode jobs.create
, in der das Unterfeld secretVariables
für eine oder mehrere Umgebungen angegeben wird.
Wenn Sie beispielsweise einen einfachen Skriptjob erstellen möchten, der eine geheime Variable in der Umgebung für alle ausführbaren Elemente 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. Entsprechend der Konvention werden Umgebungsvariablennamen großgeschrieben.Wenn Sie sicher auf die vertraulichen Daten aus dem Secret Manager-Secret der Variablen zugreifen möchten, geben Sie den Variablennamen in den Runnable-Objekten dieses Jobs an. Die Secret-Variable ist für alle ausführbaren Elemente 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. Das kann die Versionsnummer oderlatest
sein.
Java
Node.js
Python
Sicher auf Container-Images zugreifen, für die Anmeldedaten für die Docker-Registry erforderlich sind
Wenn Sie ein Container-Image aus einer privaten Docker-Registry verwenden möchten, muss in einem ausführbaren Programm Anmeldedaten angegeben werden, mit denen auf diese Docker-Registry zugegriffen werden kann.
Insbesondere für jeden Container, der mit dem Feld „Image-URI“ (imageUri
) ausgeführt werden kann, das 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 das Feld „Nutzername“ (username
) und das Feld „Passwort“ (password
).
Sie können alle vertraulichen Anmeldedaten für eine Docker-Registrierung 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. Verwenden Sie dazu die gcloud CLI oder die Batch API. Im folgenden Beispiel wird erläutert, wie Sie einen Job erstellen, der ein Container-Image aus einer privaten Docker-Registry verwendet. Dazu geben Sie den Nutzernamen direkt und das Passwort als Secret an.
gcloud
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs angegeben werden. Fügen Sie für alle Container-Runnables, die Images aus einer privaten Docker-Registry verwenden, alle Anmeldedaten, die für den Zugriff darauf erforderlich sind, in die Felder
username
undpassword
ein.Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, in dem ein Image aus einer privaten Docker-Registrierung angegeben wird, 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 Containereinstellungen erforderlich 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
PASSWORD
auf Folgendes fest:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Ersetzen 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. Das kann die Versionsnummer oderlatest
sein.
Verwenden Sie den Befehl
gcloud batch jobs submit
, um den Job zu erstellen und auszuführen:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ersetzen 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 Methode jobs.create
.
Fügen Sie für alle Container-Runnables, die Images aus einer privaten Docker-Registry verwenden, alle Anmeldedaten, die für den Zugriff darauf erforderlich sind, in die Felder username
und password
ein.
Wenn Sie beispielsweise einen einfachen Containerjob erstellen möchten, in dem ein Image aus einer privaten Docker-Registry angegeben wird, 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 Containereinstellungen erforderlich 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
PASSWORD
auf Folgendes fest:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Ersetzen 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. Das kann die Versionsnummer oderlatest
sein.
Nächste Schritte
Wenn Probleme beim Erstellen oder Ausführen eines Jobs auftreten, finden Sie weitere Informationen unter Fehlerbehebung.
Weitere Informationen zu Secret Manager