Proteggi i dati sensibili utilizzando Secret Manager con Batch

Questo documento descrive come proteggere i dati sensibili che vuoi specificare per un job batch utilizzando i secret di Secret Manager.

I secret di Secret Manager proteggono i dati sensibili tramite la crittografia. In un job batch, puoi specificare uno o più secret esistenti per passare in modo sicuro i dati sensibili che contengono:

  • Definisci in modo sicuro le variabili di ambiente personalizzate contenenti dati sensibili.

  • Specifica in modo sicuro le credenziali di accesso per un Docker Registry per consentire agli elementi eseguibili di un job di accedere alle relative immagini container private.

Prima di iniziare

Trasferisci in modo sicuro i dati sensibili alle variabili di ambiente personalizzate

Per trasferire in modo sicuro i dati sensibili dai secret di Secret Manager alle variabili di ambiente personalizzate, devi definire ogni variabile di ambiente nel sottocampo delle variabili secret (secretVariables) per un ambiente e specificare un secret per ciascun valore. Ogni volta che specifichi un secret in un job, devi formattarlo come percorso a una versione del secret: projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.

Puoi creare un job che definisce le variabili secret utilizzando gcloud CLI o l'API Batch. L'esempio seguente spiega come creare un job che definisca e utilizzi una variabile del secret per l'ambiente di tutti gli elementi eseguibili (sottocampo environment di taskSpec).

gcloud

  1. Crea un file JSON che specifichi i dettagli di configurazione del job e includa il sottocampo secretVariables per uno o più ambienti.

    Ad esempio, per creare un job di script di base che utilizza una variabile secret nell'ambiente per tutti gli elementi eseguibili, crea un file JSON con i seguenti contenuti:

    {
      "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"
      }
    }
    

    Sostituisci quanto segue:

    • SECRET_VARIABLE_NAME: il nome della variabile secret. Per convenzione, i nomi variabile di ambiente sono con lettere maiuscole.

      Per accedere in modo sicuro ai dati sensibili dal secret di Secret Manager della variabile, specifica il nome di questa variabile negli elementi eseguibili di questo job. La variabile del secret è accessibile a tutti gli elementi eseguibili che si trovano nello stesso ambiente in cui definisci la variabile secret.

    • PROJECT_ID: l'ID progetto del tuo progetto.

    • SECRET_NAME: il nome di un secret di Secret Manager esistente.

    • VERSION: la versione del secret specificato che contiene i dati che vuoi trasmettere al job. Può essere il numero di versione o latest.

  2. Per creare ed eseguire il job, utilizza il comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Sostituisci quanto segue:

    • JOB_NAME: il nome del job.

    • LOCATION: la località del job.

    • JSON_CONFIGURATION_FILE: il percorso di un file JSON con i dettagli di configurazione del job.

API

Effettua una richiesta POST al metodo jobs.create che specifica il sottocampo secretVariables per uno o più ambienti.

Ad esempio, per creare un job di script di base che utilizza una variabile secret nell'ambiente per tutti gli elementi eseguibili, effettua la seguente richiesta:

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"
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del tuo progetto.

  • LOCATION: la località del job.

  • JOB_NAME: il nome del job.

  • SECRET_VARIABLE_NAME: il nome della variabile secret. Per convenzione, i nomi variabile di ambiente sono con lettere maiuscole.

    Per accedere in modo sicuro ai dati sensibili dal secret di Secret Manager della variabile, specifica il nome di questa variabile negli elementi eseguibili di questo job. La variabile del secret è accessibile a tutti gli elementi eseguibili che si trovano nello stesso ambiente in cui definisci la variabile secret.

  • SECRET_NAME: il nome di un secret di Secret Manager esistente.

  • VERSION: la versione del secret specificato che contiene i dati che vuoi trasmettere al job. Può essere il numero di versione o latest.

Accedi in modo sicuro alle immagini container che richiedono credenziali del registro Docker

Per utilizzare un'immagine container da un registro Docker privato, un elemento eseguibile deve specificare le credenziali di accesso che gli consentono di accedere al registro Docker. In particolare, per qualsiasi container eseguibile con il campo dell'URI immagine (imageUri) impostato su un'immagine di un registro Docker privato, devi specificare le eventuali credenziali necessarie per accedere al registro Docker utilizzando il campo nome utente (username) e il campo password (password).

Puoi proteggere qualsiasi credenziale sensibile per un registro Docker specificando i secret esistenti che contengono le informazioni, invece di definire questi campi direttamente. Ogni volta che specifichi un secret in un job, devi formattarlo come percorso a una versione del secret: projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.

Puoi creare un job che utilizza immagini container da un registro Docker privato utilizzando gcloud CLI o l'API Batch. L'esempio seguente spiega come creare un job che utilizza un'immagine container da un registro Docker privato specificando direttamente il nome utente e la password come secret.

gcloud

  1. Crea un file JSON che specifichi i dettagli di configurazione del job. Per tutti gli elementi eseguibili dei container che utilizzano immagini di un registro Docker privato, includi le credenziali necessarie per accedervi nei campi username e password.

    Ad esempio, per creare un job di container di base che specifichi un'immagine da un registro Docker privato, crea un file JSON con i seguenti contenuti:

    {
      "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"
      }
    }
    

    Sostituisci quanto segue:

    • PRIVATE_IMAGE_URI: l'URI di un'immagine container da un registro Docker privato. Se questa immagine richiede altre impostazioni del contenitore, devi includere anche queste.

    • USERNAME: il nome utente per il registro Docker privato, che può essere specificato come secret o direttamente.

    • PASSWORD: la password per il registro Docker privato, che può essere specificata come secret (consigliata) o direttamente.

      Ad esempio, per specificare la password come secret, imposta PASSWORD come segue:

      projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
      

      Sostituisci quanto segue:

  2. Per creare ed eseguire il job, utilizza il comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Sostituisci quanto segue:

    • JOB_NAME: il nome del job.

    • LOCATION: la località del job.

    • JSON_CONFIGURATION_FILE: il percorso di un file JSON con i dettagli di configurazione del job.

API

Invia una richiesta POST al metodo jobs.create. Per tutti gli elementi eseguibili dei container che utilizzano immagini di un registro Docker privato, includi le credenziali necessarie per accedervi nei campi username e password.

Ad esempio, per creare un job di container di base che specifica un'immagine da un registro Docker privato, effettua questa richiesta:

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"
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del tuo progetto.

  • LOCATION: la località del job.

  • JOB_NAME: il nome del job.

  • PRIVATE_IMAGE_URI: l'URI di un'immagine container da un registro Docker privato. Se questa immagine richiede altre impostazioni del contenitore, devi includere anche queste.

  • USERNAME: il nome utente per il registro Docker privato, che può essere specificato come secret o direttamente.

  • PASSWORD: la password per il registro Docker privato, che può essere specificata come secret (consigliata) o direttamente.

    Ad esempio, per specificare la password come secret, imposta PASSWORD come segue:

    projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
    

    Sostituisci quanto segue:

Passaggi successivi