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
- Se non hai mai utilizzato Batch, consulta la Guida introduttiva all'utilizzo di Batch e abilita Batch completando i prerequisiti per progetti e utenti.
- Crea un secret o identifica un secret per i dati sensibili che vuoi specificare in modo sicuro per un job.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Editor job batch (
roles/batch.jobsEditor
) sul progetto -
Utente account di servizio (
roles/iam.serviceAccountUser
) nell'account di servizio del job, che per impostazione predefinita è l'account di servizio Compute Engine predefinito
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Editor job batch (
-
Per assicurarti che l'account di servizio del job disponga delle autorizzazioni necessarie per accedere ai secret, chiedi all'amministratore di concedere all'account di servizio del job il ruolo IAM Accesso ai secret di Secret Manager (
roles/secretmanager.secretAccessor
) sul secret.
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
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 olatest
.
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 olatest
.
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
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
epassword
.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:
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 olatest
.
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:
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 olatest
.
Passaggi successivi
In caso di problemi durante la creazione o l'esecuzione di un job, consulta Risoluzione dei problemi.
Scopri di più sulle variabili di ambiente.
Scopri di più su Secret Manager.
Scopri di più sulle opzioni per la creazione di job.