O job pode exigir chaves de API, senhas, certificados ou outras informações sensíveis para as dependências. Para o Cloud Run, o Google recomenda armazenar essas informações sensíveis em um secret criado no Secret Manager.
Disponibilize um secret para seus contêineres de uma das seguintes maneiras:
- Quando você monta cada secret como um volume, o Cloud Run disponibiliza o secret para o contêiner como arquivos. Ao ler um volume, o Cloud Run sempre busca o valor do secret no Secret Manager para usar o valor com a versão mais recente. Esse método também funciona bem com a rotação de secrets.
- Transmita um secret usando variáveis de ambiente.
As variáveis de ambiente são resolvidas no momento da inicialização da instância. Portanto, se você usar esse método, o Google recomenda que você fixe o secret em uma versão específica em vez de usar
latest
como a versão.
Para mais informações, consulte as práticas recomendadas do Secret Manager.
Como os secrets são verificados na implantação e no ambiente de execução
Durante a criação do job, o Cloud Run verifica todos os secrets que você usa. A verificação garante que a conta de serviço que executa o contêiner tenha permissão para acessar esses secrets.
Durante o tempo de execução, quando as instâncias são iniciadas:
- Se o secret for uma variável de ambiente, o Cloud Run vai recuperar o valor dele antes de iniciar a instância. Se o processo de recuperação de secrets falhar, a instância não será iniciada.
- Se você ativar o secret como um volume, o Cloud Run não vai realizar nenhuma verificação durante a inicialização da instância. No entanto, durante o tempo de execução, se um secret estiver inacessível, as tentativas de ler o volume montado vão falhar.
Propriedade do volume
A propriedade de um volume de secret do Cloud Run varia de acordo com o ambiente de execução e o tipo de implantação.
Quando você monta um volume de secret usando o ambiente de execução de segunda geração, que é sempre o caso de jobs, a raiz é proprietária do volume.
Antes de começar
-
Enable the Secret Manager API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Use um secret atual ou crie um no Secret Manager, conforme descrito em Criar secret.
Funções exigidas
Para receber as permissões necessárias para configurar secrets, peça ao administrador para conceder a você os papéis do IAM a seguir:
-
Administrador do Cloud Run (
roles/run.admin
) no job do Cloud Run -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na identidade de serviço
Para permitir que o Cloud Run acesse o secret, a identidade do serviço precisa ter o seguinte papel:
- Acessador de secrets do Secret Manager (
roles/secretmanager.secretAccessor
)
Para instruções sobre como adicionar o principal de identidade de serviço ao papel Acessador de Secrets do Secret Manager, consulte Gerenciar o acesso aos secrets.
Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o job do Cloud Run interagir com APIs doGoogle Cloud , como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.
Tornar um secret acessível ao Cloud Run
É possível tornar um secret acessível ao job usando o console Google Cloud , a CLI do Google Cloud ou o YAML:
Console
No console do Google Cloud , acesse a página de jobs do Cloud Run:
Selecione Jobs no menu e clique em Implantar contêiner para preencher a página inicial de configurações do job. Se você estiver configurando um job, selecione-o e clique em Ver e editar a configuração do job.
Clique em Contêineres, Volumes, Conexões, Segurança para expandir a página de propriedades do job.
Clique na guia Variáveis e secrets.
- Na guia "Variáveis e secrets":
Para expor o secret como uma variável de ambiente:
- Clique na guia Contêineres.
- Na guia Variáveis e secrets, clique em Referenciar um secret.
- No campo Nome 1, insira o nome da variável de ambiente.
- Na lista Secret, selecione o secret que você quer usar.
- Na lista Versão 1, selecione a versão do secret a ser referenciada.
- Clique em Concluído.
- Clique em Criar ou Implantar.
Para ativar o secret como um volume:
- Clique na guia Volumes e selecione Adicionar volume.
- Na lista Tipo de volume, selecione Secret.
- No campo Nome do volume, digite um nome ou aceite o nome padrão.
- Na lista Secret, selecione o secret que você quer usar.
- No campo Caminho 1, digite o nome do arquivo a ser ativado.
- Na lista Versão 1, selecione a versão do secret a ser referenciada. Por padrão, a versão mais recente é selecionada. É possível selecionar uma versão específica.
- Clique em Concluído.
- Acesse a guia Contêiner(es) para ativar o secret no contêiner.
- Na guia Ativações de volume, clique em Ativar volume.
- Na lista Nome 1, selecione o nome do volume.
- No campo Caminho de ativação 1, insira o caminho de ativação do secret. Esse é o diretório em que todas as versões do secret são colocadas.
- Clique em Concluído.
- Clique em Criar ou Implantar.
- Na guia "Variáveis e secrets":
Clique em Criar ou Atualizar.
gcloud
Para especificar o secret em uma variável de ambiente ao criar um novo job:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Substitua:
- JOB_NAME: o nome do job.
- ENV_VAR_NAME: o nome da variável de ambiente a ser usada para o secret.
- SECRET_NAME: o nome do secret no mesmo projeto. Por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
. - IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
.
É possível especificar vários pares de variáveis/secrets do ambiente usando uma lista separada por vírgulas.
Para especificar o secret em uma variável de ambiente ao atualizar um job:
gcloud run jobs update JOB_NAME \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Para montar o secret como um volume ao criar um job:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets=PATH=SECRET_NAME:VERSION
Substitua:
- JOB_NAME: o nome do job.
- IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de ativação do volume e o nome de arquivo do secret. Ele precisa começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de ativação do volume epassword
é o nome do arquivo do secret. - SECRET_NAME: o nome do secret no mesmo projeto. Por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
.
Para atualizar um secret em um job atual, siga estas etapas:
gcloud run jobs update JOB_NAME \ --update-secrets=PATH=SECRET_NAME:VERSION
YAML
Devido a restrições na compatibilidade da API, os locais do secret precisam ser armazenados em uma anotação.
Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Para secrets expostos como variáveis de ambiente:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Substitua:
- JOB: o nome do job.
- IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome do secret. Por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
. - SECRET_LOOKUP_NAME: qualquer nome que tenha uma
sintaxe válida de nome de secret. Por exemplo,
my-secret
. Pode ser o mesmo que SECRET_NAME.
Para secrets montados como caminhos de arquivo:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Substitua:
- JOB_NAME: o nome do job.
- IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de ativação do volume e o nome de arquivo do secret. Ele precisa começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de ativação do volume epassword
é o nome do arquivo do secret. - PROJECT_NUMBER: o número do projeto em que o secret foi criado.
- SECRET_NAME: o nome do secret. Por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
. - SECRET_LOOKUP_NAME: qualquer nome que tenha uma
sintaxe válida de nome de secret. Por exemplo,
my-secret
. Pode ser o mesmo que SECRET_NAME. - VOLUME_NAME: qualquer nome, por exemplo,
my-volume
. Ele pode ser igual a SECRET_NAME.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Adicione o seguinte a um recursogoogle_cloud_run_v2_job
na configuração do Terraform:Para secrets expostos como variáveis de ambiente:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
env {
name = "SECRET_NAME"
value_source {
secret_key_ref {
secret = "SECRET_NAME"
version = "VERSION"
}
}
}
}
}
}
}
Substitua:
- JOB_NAME: o nome do seu job do Cloud Run;
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome do secret. Por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
.
Para secrets montados como caminhos de arquivo:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
secret {
secret = "SECRET_NAME"
}
}
}
}
}
Substitua:
- JOB_NAME: o nome do seu job do Cloud Run;
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - VOLUME_NAME: qualquer nome, por exemplo,
my-volume
. Pode ser igual aSECRET_NAME
. - MOUNT_PATH: o caminho de ativação do volume e o nome de arquivo do secret. Ele precisa começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de ativação do volume epassword
é o nome do arquivo do secret. - SECRET_NAME: o nome do secret. Por exemplo,
mysecret
.
Como fazer referência a secrets de outros projetos
É possível referenciar um secret de outro projeto, se a conta de serviço do seu projeto tiver permissão para acessar o secret.
Console
No console do Google Cloud , acesse a página de jobs do Cloud Run:
Selecione Jobs no menu e clique em Implantar contêiner para preencher a página inicial de configurações do job. Se você estiver configurando um job, selecione-o e clique em Ver e editar a configuração do job.
Clique em Contêineres, Volumes, Conexões, Segurança para expandir a página de propriedades do job.
Clique na guia Variáveis e secrets.
- Na guia "Variáveis e secrets":
Para expor o secret como uma variável de ambiente:
- Clique na guia Contêineres.
- Na guia Variáveis e secrets, clique em Referenciar um secret.
- No campo Nome 1, insira o nome da variável de ambiente.
- Na lista Secret, clique em Inserir secret manualmente.
Insira o ID do recurso do secret no seguinte formato:
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Substitua:
PROJECT_NUMBER pelo número do projeto Google Cloud . Para instruções detalhadas sobre como encontrar o número do projeto, consulte Criar e gerenciar projetos.
SECRET_NAME: o nome do secret no Secret Manager.
Na lista Versão 1, selecione a versão do secret a ser referenciada.
Clique em Concluído.
Clique em Criar ou Implantar.
Para ativar o secret como um volume:
- Clique na guia Volumes e selecione Adicionar volume.
- Na lista Tipo de volume, selecione Secret.
- No campo Nome do volume, digite um nome ou aceite o nome padrão.
- Na lista Secret, clique em Inserir secret manualmente.
Insira o ID do recurso do secret no seguinte formato:
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Substitua:
PROJECT_NUMBER pelo número do projeto Google Cloud . Para instruções detalhadas sobre como encontrar o número do projeto, consulte Criar e gerenciar projetos.
SECRET_NAME: o nome do secret no Secret Manager.
No campo Caminho 1, digite o nome do arquivo a ser ativado.
Na lista Versão 1, selecione a versão do secret a ser referenciada. Por padrão, a versão mais recente é selecionada. É possível selecionar uma versão específica.
Clique em Concluído.
Acesse a guia Contêiner(es) para ativar o secret no contêiner.
Na guia Ativações de volume, clique em Ativar volume.
Na lista Nome 1, selecione o nome do volume.
No campo Caminho de ativação 1, insira o caminho de ativação do secret. Esse é o diretório em que todas as versões do secret são colocadas.
Clique em Concluído.
Clique em Criar ou Implantar.
- Na guia "Variáveis e secrets":
Clique em Criar ou Atualizar.
gcloud
Para montar um secret como um volume ao atualizar um job:
gcloud run jobs update JOB_NAME \ --image IMAGE_URL \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
- JOB_NAME: o nome do job.
- IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de ativação do volume e o nome de arquivo do secret. Ele precisa começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de ativação do volume epassword
é o nome do arquivo do secret. - PROJECT_NUMBER: o número do projeto em que o secret foi criado.
- SECRET_NAME: o nome do secret, por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
.
YAML
Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Devido a restrições na compatibilidade da API, os locais do secret precisam ser armazenados em uma anotação.
Para secrets expostos como variáveis de ambiente:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Substitua:
- JOB: o nome do job.
- IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome do secret, por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
. - PROJECT_NUMBER: o número do projeto em que o secret foi criado.
- SECRET_LOOKUP_NAME: qualquer nome que tenha uma
sintaxe válida de nome de secret. Por exemplo,
my-secret
. Pode ser o mesmo que SECRET_NAME.
Para secrets montados como caminhos de arquivo:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Substitua:
- JOB_NAME: o nome do job.
- IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de ativação do volume e o nome de arquivo do secret. Ele precisa começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de ativação do volume epassword
é o nome do arquivo do secret. - PROJECT_NUMBER: o número do projeto em que o secret foi criado.
- SECRET_NAME: o nome do secret. Por exemplo,
mysecret
. - VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
. - SECRET_LOOKUP_NAME: qualquer nome que tenha uma
sintaxe válida de nome de secret, por exemplo,
my-secret
, pode ser igual a SECRET_NAME. - VOLUME_NAME: qualquer nome, por exemplo,
my-volume
. Ele pode ser igual a SECRET_NAME.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Adicione o seguinte a um recursogoogle_cloud_run_v2_job
na configuração do Terraform:Para secrets expostos como variáveis de ambiente:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
env {
name = "SECRET_NAME"
value_source {
secret_key_ref {
secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
version = "VERSION"
}
}
}
}
}
}
}
Substitua:
- JOB_NAME: o nome do seu job do Cloud Run;
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome do secret. Por exemplo,
mysecret
. - PROJECT_ID: o ID do projeto em que o secret foi criado.
- VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
.
Para secrets montados como caminhos de arquivo:
resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
secret {
secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
}
}
}
}
}
Substitua:
- JOB_NAME: o nome do seu job do Cloud Run;
- REGION: a região Google Cloud , por exemplo,
europe-west1
. - IMAGE_URL: uma referência à imagem de contêiner. Por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - VOLUME_NAME: qualquer nome, por exemplo,
my-volume
. Pode ser o mesmo queSECRET_NAME
. - MOUNT_PATH: o caminho de ativação do volume e o nome de arquivo do secret. Ele precisa começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de ativação do volume epassword
é o nome do arquivo do secret. - PROJECT_ID: o ID do projeto em que o secret foi criado.
- SECRET_NAME: o nome do secret. Por exemplo,
mysecret
.
Ver configurações de secrets
Para ver as configurações de secrets atuais do seu job do Cloud Run, faça o seguinte:
Console
No console do Google Cloud , acesse a página de jobs do Cloud Run:
Clique no job em que você tem interesse para abrir a página Detalhes do job.
Clique em Ler e editar a configuração do job.
Localize a definição dos secrets nos detalhes da configuração.
gcloud
Use o comando a seguir:
gcloud run jobs describe JOB_NAME
Localize a configuração de secret na configuração retornada.
Caminhos e limitações não permitidos
As seguintes limitações se aplicam à montagem de secrets:
- O Cloud Run não permite ativar secrets em
/dev
,/proc
e/sys
, ou nos subdiretórios. - O Cloud Run não permite ativar vários secrets no mesmo caminho porque duas ativações de volume não podem ser montadas no mesmo local.
Substituição de um diretório
Se o secret for montado como um volume no Cloud Run e o último diretório no caminho de montagem do volume já existir, todos os arquivos ou pastas no diretório atual ficarão inacessíveis.
Por exemplo, se um secret chamado my-secret
for ativado no caminho
/etc/app_data
, todo o conteúdo dentro do diretório app_data
será
substituído, e o único arquivo visível será /etc/app_data/my-secret
.
Para evitar a substituição de arquivos em um diretório atual, crie um novo diretório para
ativar o secret, por exemplo, /etc/app_data/secrets
, de modo que o caminho
de ativação do secret seja /etc/app_data/secrets/my-secret
.