Questo documento descrive come proteggere i dati sensibili da specificare per un job batch utilizzando i secret di Secret Manager.
I segreti di Secret Manager proteggono i dati sensibili tramite la crittografia. In un job batch, puoi specificare uno o più secret esistenti per trasmettere in modo sicuro i dati sensibili in essi contenuti, che puoi utilizzare per:
Definisci in modo sicuro variabili di ambiente personalizzate che contengono dati sensibili.
Specifica in modo sicuro le credenziali di accesso per un Docker Registry per consentire ai file 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 attivalo completando i prerequisiti per progetti e utenti.
- Crea un segreto o identifica un segreto 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:
-
Batch Job Editor (
roles/batch.jobsEditor
) nel 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 a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Batch Job Editor (
-
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 trasmettere 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 di secret (secretVariables
) per un ambiente e specificare un secret per ogni 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 di secret utilizzando l'interfaccia a riga di comando gcloud, l'API Batch, Java, Node.js o Python.
L'esempio seguente spiega come creare un job che
definisce e utilizza una variabile di secret per l'ambiente di tutti i file eseguibili (campo secondario 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 segreta 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 delle variabili di ambiente sono scritti in maiuscolo.Per accedere in sicurezza ai dati sensibili dal segreto Secret Manager della variabile, specifica il nome della variabile negli elementi eseguibili del job. La variabile secret è accessibile a tutti i programmabili nello stesso ambiente in cui la definisci.
PROJECT_ID
: l'ID progetto del progetto.SECRET_NAME
: il nome di un secret di Secret Manager esistente.VERSION
: la versione del secret specificato contenente i dati da passare 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 lavoro.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
che specifica il sottocampo secretVariables
per uno o più ambienti.
Ad esempio, per creare un job di script di base che utilizza una variabile segreta nell'ambiente per tutti i file 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 progetto.LOCATION
: la località del lavoro.JOB_NAME
: il nome del job.SECRET_VARIABLE_NAME
: il nome della variabile secret. Per convenzione, i nomi delle variabili di ambiente sono scritti in maiuscolo.Per accedere in sicurezza ai dati sensibili dal segreto Secret Manager della variabile, specifica il nome della variabile negli elementi eseguibili del job. La variabile secret è accessibile a tutti i programmabili nello stesso ambiente in cui la definisci.
SECRET_NAME
: il nome di un secret di Secret Manager esistente.VERSION
: la versione del secret specificato contenente i dati da passare al job. Può essere il numero di versione olatest
.
Java
Node.js
Python
Accedere in modo sicuro alle immagini dei container che richiedono le credenziali del registry Docker
Per utilizzare un'immagine container da un registry Docker privato, un file eseguibile deve specificare le credenziali di accesso che consentono di accedere al registry Docker.
Nello specifico, per qualsiasi container eseguibile con il
campo URI immagine (imageUri
)
impostato su un'immagine di un registry Docker privato, devi specificare le eventuali
credenziali necessarie per accedere a quel registry Docker utilizzando il
campo nome utente (username
) e il
campo password (password
).
Puoi proteggere le credenziali sensibili di un registry Docker specificando i secret esistenti che contengono le informazioni anziché definire direttamente questi campi.
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 registry Docker privato utilizzando la CLI gcloud o l'API Batch. L'esempio seguente spiega come creare un job che utilizza un'immagine container da un registry 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 i container eseguibili 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 specifica un'immagine da un registry 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 dell'immagine per un'immagine container da un registry Docker privato. Se questa immagine richiede altre impostazioni del contenitore, devi includerle.USERNAME
: il nome utente per il registry Docker privato, che può essere specificato come secret o direttamente.PASSWORD
: la password per il registry Docker privato, che può essere specificata come secret (opzione consigliata) o direttamente.Ad esempio, per specificare la password come segreto, imposta
PASSWORD
su quanto segue:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del progetto.SECRET_NAME
: il nome di un secret di Secret Manager esistente.VERSION
: la versione del secret specificato contenente i dati da passare 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 lavoro.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 i container eseguibili 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 registry Docker privato, effettua la seguente 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 progetto.LOCATION
: la località del lavoro.JOB_NAME
: il nome del job.PRIVATE_IMAGE_URI
: l'URI dell'immagine per un'immagine container da un registry Docker privato. Se questa immagine richiede altre impostazioni del contenitore, devi includerle.USERNAME
: il nome utente per il registry Docker privato, che può essere specificato come secret o direttamente.PASSWORD
: la password per il registry Docker privato, che può essere specificata come secret (opzione consigliata) o direttamente.Ad esempio, per specificare la password come segreto, imposta
PASSWORD
su quanto segue:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del progetto.SECRET_NAME
: il nome di un secret di Secret Manager esistente.VERSION
: la versione del secret specificato contenente i dati da passare al job. Può essere il numero di versione olatest
.
Passaggi successivi
Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
Scopri di più sulle variabili di ambiente.
Scopri di più su Secret Manager.
Scopri di più sulle opzioni di creazione dei job.