Este documento descreve como proteger dados sensíveis que você quer especificar para um job em lote usando Secrets do Secret Manager.
Os secrets do Secret Manager protegem dados sensíveis por criptografia. Em um job em lote, é possível especificar um ou mais Secrets para transmitir com segurança os dados sensíveis que eles contêm, que podem ser usados para fazer o seguinte:
Definir com segurança variáveis de ambiente personalizadas que contêm dados sensíveis.
Especificar com segurança as credenciais de login de um registro do Docker para permitir que os executáveis de um job acessem as imagens de contêiner particulares.
Antes de começar
- Se você nunca usou o Batch, consulte Introdução ao Batch e ative o serviço concluindo os pré-requisitos para projetos e usuários.
- Crie um secret ou identifique um secret para os dados sensíveis que você quer especificar com segurança para um job.
-
Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:
- Editor de jobs do Batch (
roles/batch.jobsEditor) no projeto - Usuário da conta de serviço (
roles/iam.serviceAccountUser) na conta de serviço do job, que, por padrão, é a conta de serviço padrão do Compute Engine
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.
- Editor de jobs do Batch (
-
Para garantir que a conta de serviço do job tenha as permissões necessárias para acessar secrets, peça ao administrador para conceder opapel do IAM de Acessador de secrets do Secret Manager (
roles/secretmanager.secretAccessor) à conta de serviço do job no secret.
Transmitir dados sensíveis com segurança para variáveis de ambiente personalizadas
Para transmitir dados sensíveis com segurança de secrets do Secret Manager para variáveis de ambiente personalizadas, é necessário definir cada variável de ambiente no
subcampo de variáveis de secret (secretVariables) para um ambiente
e especificar um secret para cada valor.
Sempre que você especificar um secret em um job, é necessário formatá-lo como um caminho
para uma versão do secret:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.
É possível criar um job que defina variáveis de secret usando a CLI gcloud, a API Batch, Java, Node.js ou Python.
O exemplo a seguir explica como criar um job que
define e usa uma variável de secret para o
ambiente de todos os executáveis (environment subcampo de taskSpec).
gcloud
Crie um arquivo JSON que especifique os detalhes de configuração do job e inclua o subcampo
secretVariablespara um ou mais ambientes.Por exemplo, para criar um job de script básico que usa uma variável de secret no ambiente para todos os executáveis, crie um arquivo JSON com o conteúdo a seguir:
{ "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" } }Substitua:
SECRET_VARIABLE_NAME: o nome da variável de secret. Por convenção, os nomes das variável de ambiente são escritos em maiúsculas.Para acessar com segurança os dados sensíveis do secret do Secret Manager da variável, especifique esse nome de variável nos executáveis do job. A variável de secret pode ser acessada por todos os executáveis que estão no mesmo ambiente em que você a define.
PROJECT_ID: o ID do projeto do seu projeto.SECRET_NAME: o nome de um secret do Secret Manager existente.VERSION: a versão do secret especificado que contém os dados que você quer transmitir para o job. Pode ser o número da versão oulatest.
Para criar e executar o job, use o
gcloud batch jobs submitcomando:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESubstitua:
JOB_NAME: o nome do job.LOCATION: o local do job.JSON_CONFIGURATION_FILE: o caminho para um arquivo JSON com os detalhes de configuração do job.
API
Faça uma POST solicitação para o
jobs.create método
que especifica o secretVariables subcampo para um ou mais ambientes.
Por exemplo, para criar um job de script básico que usa uma variável de secret no ambiente para todos os executáveis, faça a seguinte solicitação:
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"
}
}
Substitua:
PROJECT_ID: o ID do projeto do seu projeto.LOCATION: o local do job.JOB_NAME: o nome do job.SECRET_VARIABLE_NAME: o nome da variável de secret. Por convenção, os nomes das variável de ambiente são escritos em maiúsculas.Para acessar com segurança os dados sensíveis do secret do Secret Manager da variável, especifique esse nome de variável nos executáveis do job. A variável de secret pode ser acessada por todos os executáveis que estão no mesmo ambiente em que você a define.
SECRET_NAME: o nome de um secret do Secret Manager existente.VERSION: a versão do secret especificado que contém os dados que você quer transmitir para o job. Pode ser o número da versão oulatest.
Java
Node.js
Python
Acessar com segurança imagens de contêiner que exigem credenciais de registro do Docker
Para usar uma imagem de contêiner de um registro particular do Docker, um executável precisa especificar credenciais de login que permitam o acesso a esse registro.
Especificamente, para qualquer executável de contêiner com o
campo de URI da imagem (imageUri)
definido como uma imagem de um registro particular do Docker, é necessário especificar as
credenciais necessárias para acessar esse registro do Docker usando os
campos de nome de usuário (username) e
senha (password).
É possível proteger credenciais sensíveis para um registro do Docker especificando secrets que contenham as informações em vez de definir esses campos diretamente.
Sempre que você especificar um secret em um job, é necessário formatá-lo como um caminho
para uma versão do secret:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.
É possível criar um job que use imagens de contêiner de um registro particular do Docker usando a CLI gcloud ou a API Batch. O exemplo a seguir explica como criar um job que usa uma imagem de contêiner de um registro particular do Docker especificando o nome de usuário diretamente e a senha como um secret.
gcloud
Crie um arquivo JSON que especifique os detalhes de configuração do job. Para todos os executáveis de contêiner que usam imagens de um registro particular do Docker, inclua as credenciais necessárias para acessá-lo nos campos
usernameepassword.Por exemplo, para criar um job de contêiner básico que especifica uma imagem de um registro particular do Docker, crie um arquivo JSON com o conteúdo a seguir:
{ "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" } }Substitua:
PRIVATE_IMAGE_URI: o URI da imagem para uma imagem do contêiner de um registro particular do Docker. Se essa imagem exigir outras configurações de contêiner, inclua-as também.USERNAME: o nome de usuário do registro particular do Docker, que pode ser especificado como um secret ou diretamente.PASSWORD: a senha do registro particular do Docker, que pode ser especificada como um secret (recomendado) ou diretamente.Por exemplo, para especificar a senha como um secret, defina
PASSWORDcomo o seguinte:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONSubstitua:
PROJECT_ID: o ID do projeto do seu projeto.SECRET_NAME: o nome de um secret do Secret Manager existente.VERSION: a versão do secret especificado que contém os dados que você quer transmitir para o job. Pode ser o número da versão oulatest.
Para criar e executar o job, use o
gcloud batch jobs submitcomando:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESubstitua:
JOB_NAME: o nome do job.LOCATION: o local do job.JSON_CONFIGURATION_FILE: o caminho para um arquivo JSON com os detalhes de configuração do job.
API
Faça uma POST solicitação para o
jobs.create método.
Para todos os executáveis de contêiner que usam imagens de um registro particular do Docker, inclua as credenciais necessárias para acessá-lo nos campos username e password.
Por exemplo, para criar um job de contêiner básico que especifica uma imagem de um registro particular do Docker, faça a seguinte solicitação:
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"
}
}
Substitua:
PROJECT_ID: o ID do projeto do seu projeto.LOCATION: o local do job.JOB_NAME: o nome do job.PRIVATE_IMAGE_URI: o URI da imagem para uma imagem do contêiner de um registro particular do Docker. Se essa imagem exigir outras configurações de contêiner, inclua-as também.USERNAME: o nome de usuário do registro particular do Docker, que pode ser especificado como um secret ou diretamente.PASSWORD: a senha do registro particular do Docker, que pode ser especificada como um secret (recomendado) ou diretamente.Por exemplo, para especificar a senha como um secret, defina
PASSWORDcomo o seguinte:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONSubstitua:
PROJECT_ID: o ID do projeto do seu projeto.SECRET_NAME: o nome de um secret do Secret Manager existente.VERSION: a versão do secret especificado que contém os dados que você quer transmitir para o job. Pode ser o número da versão oulatest.
A seguir
Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
Saiba mais sobre variáveis de ambiente.
Saiba mais sobre Secret Manager.
Saiba mais sobre as opções de criação de jobs.