Neste documento, descrevemos como proteger dados sensíveis que você quer especificar para um job do Batch usando secrets do Secret Manager.
Os secrets do Secret Manager protegem dados sensíveis com 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:
Defina com segurança variáveis de ambiente personalizadas que contenham dados sensíveis.
Especifique 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êineres particulares.
Antes de começar
- Se você nunca usou o Batch, leia Começar a usar o 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 em lote (
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 por meio de papéis personalizados ou de outros papéis predefinidos.
-
Editor de jobs em lote (
-
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 a ela o papel do IAM de Acessador de secrets do Gerenciador de secrets (
roles/secretmanager.secretAccessor
) no secret.
Transmitir dados sensíveis com segurança para variáveis de ambiente personalizadas
Para transmitir dados sensíveis de secrets do Secret Manager para variáveis de ambiente personalizadas, defina cada variável de ambiente no subcampo de variáveis secretas (secretVariables
) de um ambiente e especifique um secret para cada valor.
Sempre que você especificar um secret em um job, formate-o como um caminho
para uma versão do secret:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
É possível criar um job que define variáveis secretas
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 secreta para o
ambiente de todos os executáveis (subcampo environment
de taskSpec
).
gcloud
Crie um arquivo JSON que especifique os detalhes de configuração do job e inclua o subcampo
secretVariables
para um ou mais ambientes.Por exemplo, para criar um trabalho de script básico que usa uma variável secreta no ambiente para todos os executáveis, crie um arquivo JSON com o seguinte conteúdo:
{ "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 secreta. Por convenção, os nomes das variável de ambiente são maiúsculos.Para acessar com segurança os dados sensíveis do secret do Secret Manager da variável, especifique o nome dela nos executáveis do job. A variável de secret fica acessível a todos os executáveis que estão no mesmo ambiente em que você define a variável de secret.
PROJECT_ID
: o ID do projeto.SECRET_NAME
: o nome de um secret do Secret Manager.VERSION
: a versão do secret especificado que contém os dados que você quer transmitir ao job. Pode ser o número da versão oulatest
.
Para criar e executar o job, use o comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
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 solicitação POST
ao
método jobs.create
que especifica o subcampo secretVariables
para um ou mais ambientes.
Por exemplo, para criar um job de script básico que usa uma variável secreta 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.LOCATION
: o local do job.JOB_NAME
: o nome do job.SECRET_VARIABLE_NAME
: o nome da variável secreta. Por convenção, os nomes das variável de ambiente são maiúsculos.Para acessar com segurança os dados sensíveis do secret do Secret Manager da variável, especifique o nome dela nos executáveis do job. A variável de secret fica acessível a todos os executáveis que estão no mesmo ambiente em que você define a variável de secret.
SECRET_NAME
: o nome de um secret do Secret Manager.VERSION
: a versão do secret especificado que contém os dados que você quer transmitir ao 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 do 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 do Docker.
Especificamente, para qualquer contêiner executável com o campo URI da imagem (imageUri
) definido como uma imagem de um registro privado do Docker, especifique as credenciais necessárias para acessar esse registro usando os campos nome de usuário (username
) e senha (password
).
É possível proteger credenciais sensíveis de um registro do Docker especificando
secrets atuais que contêm as informações em vez de definir esses
campos diretamente.
Sempre que você especificar um secret em um job, formate-o como um caminho
para uma versão do secret:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
É possível criar um job que usa imagens de contêiner de um registro privado 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 secreto.
gcloud
Crie um arquivo JSON que especifique os detalhes de configuração do job. Para qualquer executável de contêiner que use imagens de um registro privado do Docker, inclua as credenciais necessárias para acessar os campos
username
epassword
.Por exemplo, para criar um job de contêiner básico que especifica uma imagem de um registro privado do Docker, crie um arquivo JSON com o seguinte conteúdo:
{ "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 de uma imagem de contêiner de um registro privado 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
PASSWORD
como:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Substitua:
PROJECT_ID
: o ID do projeto.SECRET_NAME
: o nome de um secret do Secret Manager.VERSION
: a versão do secret especificado que contém os dados que você quer transmitir ao job. Pode ser o número da versão oulatest
.
Para criar e executar o job, use o comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
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 solicitação POST
ao
método jobs.create
.
Para qualquer executável de contêiner que use imagens de um registro privado do Docker, inclua as credenciais necessárias para acessar os 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.LOCATION
: o local do job.JOB_NAME
: o nome do job.PRIVATE_IMAGE_URI
: o URI de uma imagem de contêiner de um registro privado 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
PASSWORD
como:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Substitua:
PROJECT_ID
: o ID do projeto.SECRET_NAME
: o nome de um secret do Secret Manager.VERSION
: a versão do secret especificado que contém os dados que você quer transmitir ao 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 o gerenciador de secrets.
Saiba mais sobre outras opções de criação de jobs.