O job pode precisar de dependências que exigem chaves de API, senhas ou outras informações confidenciais. Para o Cloud Run, o Google recomenda que você armazene esse tipo de informação confidencial em um secret criado no Secret Manager.
É possível disponibilizar um secret de contêineres de duas maneiras:
- Ative cada secret como um volume, o que torna o secret disponível para o contêiner como arquivos. A leitura de um volume sempre busca o valor do Secret Manager para que possa ser usado com a versão latest. Esse método também funciona bem com a rotação de secret.
- 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 a mais recente.
Para mais informações, consulte o documento de 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, todos os secrets usados, seja como variável de ambiente ou montados como volume, são verificados para garantir que a conta de serviço usada para executar o contêiner tenha acesso a eles. Se alguma verificação falhar, a criação do job falhará.
Durante o tempo de execução, quando as instâncias são iniciadas:
- Se o secret for uma variável de ambiente, o valor dele será recuperado antes de iniciar a instância. Portanto, se a recuperação falhar, a instância não será iniciada.
- Se o secret for ativado como um volume, nenhuma verificação será realizada 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 falharão.
A propriedade do volume varia por ambiente de execução e tipo de implantação
Quando você ativa um volume usando o ambiente de execução de segunda geração, que é o caso de jobs, o volume é de propriedade da raiz.
Antes de começar
É possível usar um secret atual do Secret Manager ou criar um novo secret.
Funções exigidas
Para receber as permissões necessárias para usar 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 conta 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 do Google Cloud, como 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 do 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:
Se você estiver configurando um novo job, clique na guia Jobs e preencha a página inicial de configurações do job conforme quiser. Se você estiver configurando um job, clique nele e em Editar.
Clique em Contêiner, variáveis e secrets, conexões e segurança para expandir a página de propriedades do job.
Clique na guia Variáveis e secrets.
- Na guia "Variáveis e secrets":
- Em Secrets, clique em Adicionar uma referência de secret
- Selecione o secret que você quer usar na lista suspensa Secret.
- No menu suspenso Método de referência, selecione a maneira como você quer usar o secret, montado como um volume ou exposto como variáveis de ambiente.
- Se você estiver ativando o secret como um volume,
- Em Caminho de ativação, especifique o caminho de ativação que você está usando para secrets.
- Por padrão, a versão mais recente é selecionada. É possível selecionar uma versão específica, se quiser. Em Caminhos especificados para versões do secret, especifique o caminho para a versão e o número da versão.
- Clique em Concluído.
- Se você está expondo o secret como uma variável de ambiente:
- Forneça o Nome da variável e selecione a versão do secret ou a mais recente para sempre usar a versão do secret atual.
- Clique em Concluído.
- Na guia "Variáveis e secrets":
Clique em Criar ou Atualizar.
Linha de comando
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
Substituir
- JOB_NAME pelo nome do job.
- ENV_VAR_NAME pelo nome da variável de ambiente a ser usada para o secret.
- SECRET_NAME pelo nome do secret no mesmo projeto, por exemplo,
mysecret
. - VERSION pela versão do secret Use
latest
para a versão mais recente ou um número, por exemplo,2
. - IMAGE_URL por 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 pelo nome do job.
- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
; PATH
pelo caminho de ativação do volume e do 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
pelo nome do secret no mesmo projeto, por exemplo,mysecret
.VERSION
pela versão do secret Uselatest
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.
Faça o download e veja a configuração do job que já existe usando o comando gcloud run jobs describe --format export
, que gera resultados limpos no formato YAML. Em seguida, modifique os campos descritos abaixo e faça upload do YAML modificado usando o comando gcloud run jobs replace
.
Modifique os campos somente conforme documentado.
Para ver e fazer o download da configuração:
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
pelo nome do job.- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
com o nome do secret, por exemplo,mysecret
.VERSION
pela versão do secret Uselatest
para a versão mais recente ou um número, por exemplo,2
.SECRET_LOOKUP_NAME
por qualquer nome que tenha uma sintaxe válida de nome de secret (por exemplo,my-secret
) pode ser igual aSECRET_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
pelo nome do job.- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
pelo caminho de ativação do volume e do 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
pelo número do projeto em que o secret foi criado.SECRET_NAME
pelo nome do secret. Por exemplo,mysecret
.VERSION
pela versão do secret Uselatest
para a versão mais recente ou um número, por exemplo,2
.SECRET_LOOKUP_NAME
por qualquer nome que tenha uma sintaxe válida de nome de secret (por exemplo,my-secret
) pode ser igual aSECRET_NAME
.VOLUME_NAME
com qualquer nome (por exemplo,my-volume
) pode ser igual aSECRET_NAME
.
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:
Se você estiver configurando um novo job, clique na guia Jobs e preencha a página inicial de configurações do job conforme quiser. Se você estiver configurando um job, clique nele e em Editar.
Clique em Contêiner, variáveis e secrets, conexões e segurança para expandir a página de propriedades do job.
Clique na guia Variáveis e secrets.
- Na guia "Variáveis e secrets":
- Em Secrets, clique em Adicionar uma referência de secret
- Selecione Inserir secret manualmente na lista suspensa Secrets para
exibir o seguinte formulário:
- No formulário Adicionar um secret por ID do recurso, insira o secret do
outro projeto, no formato
projects/PROJECT_NUMBER/secrets/SECRET_NAME
. Outra opção é copiar e colar o código do recurso do outro projeto, se você tiver acesso a ele, selecionando a chave secreta, clicando nas reticências à direita do secret, e selecionando Copiar código do recurso no menu suspenso. - Clique em Adicionar secret.
- No menu suspenso Método de referência, selecione a maneira como você quer usar o secret, montado como um volume ou exposto como variáveis de ambiente.
- Se você estiver ativando o secret como um volume,
- Em Caminho de ativação, especifique o caminho de ativação que você está usando para secrets.
- Por padrão, a versão mais recente é selecionada. É possível selecionar uma versão específica, se quiser. Em Caminhos especificados para versões do secret, especifique o caminho para a versão e o número da versão.
- Clique em Concluído.
- Se você está expondo o secret como uma variável de ambiente:
- Forneça o Nome da variável e selecione a versão do secret ou a mais recente para sempre usar a versão do secret atual.
- Clique em Concluído.
- Na guia "Variáveis e secrets":
Clique em Criar ou Atualizar.
Linha de comando
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 pelo nome do job.
- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
pelo caminho de ativação do volume e do 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
pelo número do projeto em que o secret foi criado.SECRET_NAME
com o nome do secret, por exemplo,mysecret
.VERSION
pela versão do secret Uselatest
para a versão mais recente ou um número, por exemplo,2
.
YAML
Faça o download e consulte a configuração do job que já existe usando o comando gcloud run jobs describe --format export
, que gera resultados limpos no formato YAML. Em seguida, modifique os campos descritos abaixo e faça upload do YAML modificado usando o comando gcloud run jobs replace
.
Modifique os campos somente conforme documentado.
Para ver e fazer o download da configuração:
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
pelo nome do job.- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
SECRET_NAME
pelo nome do secret. Por exemplo,mysecret
.VERSION
pela versão do secret Uselatest
para a versão mais recente ou um número, por exemplo,2
.PROJECT_NUMBER
pelo número do projeto em que o secret foi criado.SECRET_LOOKUP_NAME
por qualquer nome que tenha uma sintaxe válida de nome de secret (por exemplo,my-secret
) pode ser igual aSECRET_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
pelo nome do job.- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
PATH
pelo caminho de ativação do volume e do 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
pelo número do projeto em que o secret foi criado.SECRET_NAME
pelo nome do secret. Por exemplo,mysecret
.VERSION
pela versão do secret Uselatest
para a versão mais recente ou um número, por exemplo,2
.SECRET_LOOKUP_NAME
por qualquer nome que tenha uma sintaxe válida de nome de secret (por exemplo,my-secret
) pode ser igual aSECRET_NAME
.VOLUME_NAME
com qualquer nome (por exemplo,my-volume
) pode ser igual aSECRET_NAME
.
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 na guia Configuração.
Localize a definição dos secrets nos detalhes da configuração.
Linha de comando
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
O Cloud Run não permite ativar secrets em /dev
,
/proc
e /sys
, ou nos subdiretórios.
Se você estiver ativando secrets em /tmp
e usando o ambiente de execução de primeira geração, consulte o problema conhecido na ativação de secrets em /tmp
.
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
.