Este documento descreve como proteger dados confidenciais que quer especificar para uma tarefa em lote através de Secrets do Secret Manager.
Os segredos do Secret Manager protegem os dados confidenciais através da encriptação. Num trabalho em lote, pode especificar um ou mais segredos existentes para transmitir de forma segura os dados confidenciais que contêm, que pode usar para fazer o seguinte:
Definir em segurança variáveis de ambiente personalizadas que contêm dados confidenciais.
Especifique em segurança as credenciais de início de sessão para um registo do Docker para permitir que os executáveis de uma tarefa acedam às respetivas imagens de contentores privados.
Antes de começar
- Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
- Crie um segredo ou identifique um segredo para os dados confidenciais que quer especificar em segurança para uma tarefa.
-
Para receber as autorizações de que precisa para criar uma tarefa, peça ao seu administrador para lhe conceder as seguintes funções de IAM:
-
Editor de tarefas em lote (
roles/batch.jobsEditor
) no projeto -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço da tarefa, que, por predefinição, é a conta de serviço predefinida do Compute Engine
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Editor de tarefas em lote (
-
Para garantir que a conta de serviço da tarefa tem as autorizações necessárias para aceder a segredos, peça ao administrador para conceder à conta de serviço da tarefa a função do IAM Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
) no segredo.
Transmita dados confidenciais em segurança para variáveis de ambiente personalizadas
Para transmitir dados confidenciais de forma segura de segredos do Secret Manager para variáveis de ambiente personalizadas, tem de definir cada variável de ambiente no subcampo secret variables (secretVariables
) para um ambiente e especificar um segredo para cada valor.
Sempre que especificar um segredo num trabalho, tem de o formatar como um caminho
para uma versão do segredo:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Pode criar uma tarefa que defina variáveis secretas
usando a CLI gcloud, a API Batch, o Java, o Node.js ou o Python.
O exemplo seguinte explica como criar uma tarefa que
define e usa uma variável secreta para o
ambiente de todos os executáveis (subcampo environment
de taskSpec
).
gcloud
Crie um ficheiro JSON que especifique os detalhes de configuração da tarefa e inclua o subcampo
secretVariables
para um ou mais ambientes.Por exemplo, para criar uma tarefa de script básica que use uma variável secreta no ambiente para todos os executáveis, crie um ficheiro 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 o seguinte:
SECRET_VARIABLE_NAME
: o nome da variável secreta. Por convenção, os nomes das variáveis de ambiente são escritos em maiúsculas.Para aceder de forma segura aos dados confidenciais do segredo do Secret Manager, especifique este nome de variável nos executáveis desta tarefa. A variável secreta é acessível a todos os runnables que estão no mesmo ambiente onde define a variável secreta.
PROJECT_ID
: o ID do projeto do seu projeto.SECRET_NAME
: o nome de um segredo do Secret Manager existente.VERSION
: a versão do segredo especificado que contém os dados que quer transmitir à tarefa. Pode ser o número da versão oulatest
.
Para criar e executar a tarefa, use o comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua o seguinte:
JOB_NAME
: o nome da tarefa.LOCATION
: a localização do trabalho.JSON_CONFIGURATION_FILE
: o caminho para um ficheiro JSON com os detalhes de configuração da tarefa.
API
Faça um pedido POST
ao método jobs.create
que especifica o subcampo secretVariables
para um ou mais ambientes.
Por exemplo, para criar uma tarefa de script básica que use uma variável secreta no ambiente para todos os executáveis, faça o seguinte pedido:
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 o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: a localização do trabalho.JOB_NAME
: o nome da tarefa.SECRET_VARIABLE_NAME
: o nome da variável secreta. Por convenção, os nomes das variáveis de ambiente são escritos em maiúsculas.Para aceder de forma segura aos dados confidenciais do segredo do Secret Manager, especifique este nome de variável nos executáveis desta tarefa. A variável secreta é acessível a todos os runnables que estão no mesmo ambiente onde define a variável secreta.
SECRET_NAME
: o nome de um segredo do Secret Manager existente.VERSION
: a versão do segredo especificado que contém os dados que quer transmitir à tarefa. Pode ser o número da versão oulatest
.
Java
Node.js
Python
Aceda em segurança a imagens de contentores que requerem credenciais do registo do Docker
Para usar uma imagem de contentor de um registo Docker privado, um executável tem de
especificar credenciais de início de sessão que lhe permitam aceder a esse registo Docker.
Especificamente, para qualquer contentor executável com o
campo URI da imagem (imageUri
)
definido como uma imagem de um registo Docker privado, tem de especificar as
credenciais necessárias para aceder a esse registo Docker através do
campo nome de utilizador (username
) e do
campo palavra-passe (password
).
Pode proteger quaisquer credenciais confidenciais para um registo do Docker especificando segredos existentes que contenham as informações em vez de definir estes campos diretamente.
Sempre que especificar um segredo num trabalho, tem de o formatar como um caminho
para uma versão do segredo:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Pode criar uma tarefa que use imagens de contentores de um registo do Docker privado através da CLI gcloud ou da API Batch. O exemplo seguinte explica como criar uma tarefa que usa uma imagem de contentor de um registo Docker privado especificando o nome de utilizador diretamente e a palavra-passe como um segredo.
gcloud
Crie um ficheiro JSON que especifique os detalhes de configuração da tarefa. Para todos os executáveis de contentores que usam imagens de um registo do Docker privado, inclua todas as credenciais necessárias para aceder ao mesmo nos campos
username
epassword
.Por exemplo, para criar uma tarefa de contentor básica que especifique uma imagem de um registo Docker privado, crie um ficheiro 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 o seguinte:
PRIVATE_IMAGE_URI
: o URI da imagem de um contentor de um registo Docker privado. Se esta imagem requerer outras definições do contentor, também as tem de incluir.USERNAME
: o nome de utilizador do registo Docker privado, que pode ser especificado como um segredo ou diretamente.PASSWORD
: a palavra-passe do registo Docker privado, que pode ser especificada como um segredo (recomendado) ou diretamente.Por exemplo, para especificar a palavra-passe como um segredo, defina
PASSWORD
da seguinte forma:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Substitua o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.SECRET_NAME
: o nome de um segredo do Secret Manager existente.VERSION
: a versão do segredo especificado que contém os dados que quer transmitir à tarefa. Pode ser o número da versão oulatest
.
Para criar e executar a tarefa, use o comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua o seguinte:
JOB_NAME
: o nome da tarefa.LOCATION
: a localização do trabalho.JSON_CONFIGURATION_FILE
: o caminho para um ficheiro JSON com os detalhes de configuração da tarefa.
API
Faça um pedido POST
ao
método jobs.create
.
Para todos os executáveis de contentores que usam imagens de um registo do Docker privado, inclua todas as credenciais necessárias para aceder ao mesmo nos campos username
e password
.
Por exemplo, para criar uma tarefa de contentor básica que especifica uma imagem de um registo Docker privado, faça o seguinte pedido:
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 o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: a localização do trabalho.JOB_NAME
: o nome da tarefa.PRIVATE_IMAGE_URI
: o URI da imagem de um contentor de um registo Docker privado. Se esta imagem requerer outras definições do contentor, também as tem de incluir.USERNAME
: o nome de utilizador do registo Docker privado, que pode ser especificado como um segredo ou diretamente.PASSWORD
: a palavra-passe do registo Docker privado, que pode ser especificada como um segredo (recomendado) ou diretamente.Por exemplo, para especificar a palavra-passe como um segredo, defina
PASSWORD
da seguinte forma:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Substitua o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.SECRET_NAME
: o nome de um segredo do Secret Manager existente.VERSION
: a versão do segredo especificado que contém os dados que quer transmitir à tarefa. Pode ser o número da versão oulatest
.
O que se segue?
Se tiver problemas ao criar ou executar uma tarefa, consulte a secção Resolução de problemas.
Saiba mais acerca das variáveis de ambiente.
Saiba mais sobre o Secret Manager.
Saiba mais sobre as opções de criação de tarefas.