Sensible Daten mit Secret Manager mit Batch schützen

In diesem Dokument wird beschrieben, wie Sie sensible Daten, die Sie für einen Batch-Job angeben möchten, mithilfe von 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 sensiblen Daten sicher zu übergeben. Damit haben Sie folgende Möglichkeiten:

Hinweise

Sensible Daten sicher an benutzerdefinierte Umgebungsvariablen übergeben

Damit sensible Daten aus Secret Manager-Secrets sicher an benutzerdefinierte Umgebungsvariablen übergeben werden, müssen Sie jede Umgebungsvariablen 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 oder Batch API verwenden. Im folgenden Beispiel wird erläutert, wie Sie einen Job erstellen, der eine Secret-Variable für die Umgebung aller Runnables (environment-Unterfeld von taskSpec) definiert und verwendet.

gcloud

  1. Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs angibt, und fügen Sie das Unterfeld secretVariables für eine oder mehrere Umgebungen ein.

    Um beispielsweise einen einfachen Skriptjob zu erstellen, der in der Umgebung für alle Runnables eine Secret-Variable 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-Variable. Konventionsgemäß werden Namen von Umgebungsvariablen großgeschrieben.

      Geben Sie diesen Variablennamen in den Runnables dieses Jobs an, um sicher auf die sensiblen Daten aus dem Secret Manager-Secret der Variablen zuzugreifen. Die Secret-Variable ist für alle Runnables zugänglich, die sich in derselben Umgebung befinden, 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 oder latest sein.

  2. 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 für eine JSON-Datei mit den Konfigurationsdetails des Jobs.

API

Stellen Sie eine POST-Anfrage an die Methode jobs.create, mit der das Unterfeld secretVariables für eine oder mehrere Umgebungen angegeben wird.

Um beispielsweise einen einfachen Skriptjob zu erstellen, der für alle Runnables eine geheime Variable in der Umgebung 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-Variable. Konventionsgemäß werden Namen von Umgebungsvariablen großgeschrieben.

    Geben Sie diesen Variablennamen in den Runnables dieses Jobs an, um sicher auf die sensiblen Daten aus dem Secret Manager-Secret der Variablen zuzugreifen. Die Secret-Variable ist für alle Runnables zugänglich, die sich in derselben Umgebung befinden, 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 oder latest sein.

Sicherer Zugriff auf Container-Images, für die Docker-Registry-Anmeldedaten erforderlich sind

Wenn Sie ein Container-Image aus einer privaten Docker-Registry verwenden möchten, muss ein Runnable Anmeldedaten angeben, mit denen es auf diese Docker-Registry zugreifen kann. Insbesondere für alle Container, die ausgeführt werden können, bei denen 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 das Feld für den Nutzernamen (username) und das Feld für das Passwort (password).

Sie können vertrauliche 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 Batch API verwenden. 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

  1. Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs angibt. Fügen Sie für alle ausführbaren Container, die Images aus einer privaten Docker-Registry verwenden, in den Feldern username und password alle Anmeldedaten ein, die für den Zugriff erforderlich sind.

    Um beispielsweise einen einfachen Containerjob zu erstellen, 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 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 für PASSWORD 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 oder latest sein.

  2. 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 für eine JSON-Datei mit den Konfigurationsdetails des Jobs.

API

Stellen Sie eine POST-Anfrage an die Methode jobs.create. Fügen Sie für alle ausführbaren Container, die Images aus einer privaten Docker-Registry verwenden, in den Feldern username und password alle Anmeldedaten ein, die für den Zugriff erforderlich sind.

Um beispielsweise einen einfachen Containerjob zu erstellen, 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 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 für PASSWORD 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 oder latest sein.

Nächste Schritte