A sua tarefa pode ter dependências que requerem chaves de API, palavras-passe, certificados ou outras informações confidenciais. Para o Cloud Run, a Google recomenda que armazene este tipo de informações confidenciais num segredo criado no Secret Manager.
Pode disponibilizar um segredo aos seus contentores de duas formas:
- Monte cada segredo como um volume, o que torna o segredo disponível para o contentor como ficheiros. A leitura de um volume obtém sempre o valor secreto do Secret Manager, pelo que pode ser usado com a versão mais recente. Este método também funciona bem com a rotação de segredos.
- Transmita um segredo através de variáveis de ambiente. As variáveis de ambiente são resolvidas no momento do arranque da instância. Por isso, se usar este método, a Google recomenda que fixe o segredo a uma versão específica em vez de usar latest.
Para mais informações, consulte o documento de práticas recomendadas do Secret Manager.
Como os segredos são verificados na implementação e no tempo de execução
Durante a criação de tarefas, todos os segredos usados, quer como variável de ambiente ou montados como um volume, são verificados para garantir que a conta de serviço usada para executar o contentor tem acesso aos mesmos. Se alguma verificação falhar, a criação da tarefa falha.
Durante o tempo de execução, quando as instâncias são iniciadas:
- Se o segredo for uma variável de ambiente, o valor do segredo é obtido antes de iniciar a instância. Por isso, se a obtenção do segredo falhar, a instância não é iniciada.
- Se o segredo estiver montado como um volume, não é feita nenhuma verificação durante o arranque da instância. No entanto, durante a execução, se um segredo estiver inacessível, as tentativas de leitura do volume montado falham.
A propriedade do volume difere consoante o ambiente de execução e o tipo de implementação
Quando monta um volume secreto através do ambiente de execução de segunda geração, que é o caso dos trabalhos, o volume é propriedade do utilizador root.
Antes de começar
-
Enable the Secret Manager API.
- Use um Secret existente ou crie um Secret no Secret Manager, conforme descrito em Crie um Secret.
Funções necessárias
Para receber as autorizações de que precisa para configurar segredos, peça ao seu administrador que lhe conceda as seguintes funções de IAM:
-
Administrador do Cloud Run (
roles/run.admin
) na tarefa do Cloud Run -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na identidade do serviço
Para permitir que o Cloud Run aceda ao segredo, a identidade do serviço tem de ter a seguinte função:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
)
Para obter instruções sobre como adicionar o principal da identidade do serviço à função Secret Accessor do Secret Manager, consulte o artigo Faça a gestão do acesso aos segredos.
Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se a sua tarefa do Cloud Run interagir com Google Cloud APIs, como as bibliotecas de cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.
Torne um segredo acessível ao Cloud Run
Pode tornar um segredo acessível à sua tarefa através da Google Cloud consola, da CLI do Google Cloud ou de YAML:
Consola
Na Google Cloud consola, aceda à página Tarefas do Cloud Run:
Selecione Tarefas no menu e clique em Implementar contentor para preencher a página de definições iniciais da tarefa. Se estiver a configurar uma tarefa existente, selecione a tarefa e, de seguida, clique em Editar.
Clique em Recipientes, volumes, ligações, segurança para expandir a página de propriedades da tarefa.
Clique no separador Variáveis e segredos.
- No separador Variáveis e segredos:
Para expor o segredo como uma variável de ambiente:
- Clique no separador Recipientes.
- No separador Variáveis e segredos, clique em Referenciar um segredo.
- No campo Nome 1, introduza o nome da variável de ambiente.
- Na lista Segredo, selecione o segredo que quer usar.
- Na lista Versão 1, selecione a versão do segredo a referenciar.
- Clique em Concluído.
- Clique em Criar ou Implementar.
Para montar o segredo como um volume:
- Clique no separador Volumes e selecione Adicionar volume.
- Na lista Tipo de volume, selecione Secreto.
- No campo Nome do volume, introduza um nome ou aceite o nome predefinido.
- Na lista Segredo, selecione o segredo que quer usar.
- No campo Caminho 1, introduza o nome do ficheiro a montar.
- Na lista Versão 1, selecione a versão do segredo a que quer fazer referência. Por predefinição, a versão mais recente está selecionada. Se quiser, pode selecionar uma versão específica.
- Clique em Concluído.
- Navegue para o separador Contentores para montar o segredo no contentor.
- No separador Volume mounts, clique em Mount volume.
- Na lista Nome 1, selecione o nome do volume.
- No campo Caminho de montagem 1, introduza o caminho de montagem para este segredo. Este é o diretório onde são colocadas todas as versões do seu segredo.
- Clique em Concluído.
- Clique em Criar ou Implementar.
- No separador Variáveis e segredos:
Clique em Criar ou Atualizar.
gcloud
Para especificar o segredo numa variável de ambiente quando cria uma nova tarefa:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Substitua o seguinte:
- JOB_NAME: o nome da sua profissão.
- ENV_VAR_NAME: o nome da variável de ambiente a usar para o segredo.
- SECRET_NAME: o nome do segredo 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 do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
.
Pode especificar vários pares de variáveis de ambiente/segredos através de uma lista delimitada por vírgulas.
Para especificar o segredo numa variável de ambiente quando atualiza uma tarefa:
gcloud run jobs update JOB_NAME \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Para montar o segredo como um volume ao criar uma tarefa:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets=PATH=SECRET_NAME:VERSION
Substitua o seguinte:
- JOB_NAME: o nome da sua profissão.
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de montagem do volume epassword
é o nome do ficheiro do segredo. - SECRET_NAME: o nome do segredo 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 uma chave secreta num trabalho existente:
gcloud run jobs update JOB_NAME \ --update-secrets=PATH=SECRET_NAME:VERSION
YAML
Devido a restrições relacionadas com a compatibilidade da API, as localizações dos segredos têm de ser armazenadas numa anotação.
Se estiver a criar uma nova tarefa, ignore este passo. Se estiver a atualizar uma tarefa existente, transfira a respetiva configuração YAML:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Para segredos 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 o seguinte:
- JOB: o nome da sua profissão.
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome secreto, 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 de nome secreto válida, por exemplo,
my-secret
. Pode ser igual a SECRET_NAME.
Para segredos montados como caminhos de ficheiros:
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 o seguinte:
- JOB_NAME: o nome da sua profissão.
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de montagem do volume epassword
é o nome do ficheiro do segredo. - PROJECT_NUMBER: o número do projeto no qual o segredo foi criado.
- SECRET_NAME: o nome secreto, 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 de nome secreto válida, por exemplo,
my-secret
. Pode ser igual a SECRET_NAME. - VOLUME_NAME: qualquer nome, por exemplo,
my-volume
. Pode ser igual a SECRET_NAME.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Adicione o seguinte a um recursogoogle_cloud_run_v2_job
na sua configuração do Terraform:Para segredos 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 o seguinte:
- JOB_NAME: o nome da sua tarefa do Cloud Run.
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome secreto, 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 segredos montados como caminhos de ficheiros:
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 o seguinte:
- JOB_NAME: o nome da sua tarefa do Cloud Run.
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: uma referência à
imagem do contentor, 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 montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de montagem do volume epassword
é o nome do ficheiro do segredo. - SECRET_NAME: o nome secreto, por exemplo,
mysecret
.
Referenciar segredos de outros projetos
Pode fazer referência a um segredo de outro projeto se a conta de serviço do seu projeto tiver autorização para aceder ao segredo.
Consola
Na Google Cloud consola, aceda à página Tarefas do Cloud Run:
Selecione Tarefas no menu e clique em Implementar contentor para preencher a página de definições iniciais da tarefa. Se estiver a configurar uma tarefa existente, selecione a tarefa e, de seguida, clique em Editar.
Clique em Recipientes, volumes, ligações, segurança para expandir a página de propriedades da tarefa.
Clique no separador Variáveis e segredos.
- No separador Variáveis e segredos:
Para expor o segredo como uma variável de ambiente:
- Clique no separador Recipientes.
- No separador Variáveis e segredos, clique em Referenciar um segredo.
- No campo Nome 1, introduza o nome da variável de ambiente.
- Na lista Secret, clique em Introduzir Secret manualmente.
Introduza o ID do recurso do Secret no seguinte formato:
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Substitua o seguinte:
PROJECT_NUMBER com o seu Google Cloud número do projeto. Para ver instruções detalhadas sobre como encontrar o número do projeto, consulte o artigo Criar e gerir projetos.
SECRET_NAME: o nome do segredo no Secret Manager.
Na lista Versão 1, selecione a versão do segredo a referenciar.
Clique em Concluído.
Clique em Criar ou Implementar.
Para montar o segredo como um volume:
- Clique no separador Volumes e selecione Adicionar volume.
- Na lista Tipo de volume, selecione Secreto.
- No campo Nome do volume, introduza um nome ou aceite o nome predefinido.
- Na lista Secret, clique em Introduzir Secret manualmente.
Introduza o ID do recurso do Secret no seguinte formato:
projects/PROJECT_NUMBER/secrets/SECRET_NAME
Substitua o seguinte:
PROJECT_NUMBER com o seu Google Cloud número do projeto. Para ver instruções detalhadas sobre como encontrar o número do projeto, consulte o artigo Criar e gerir projetos.
SECRET_NAME: o nome do segredo no Secret Manager.
No campo Caminho 1, introduza o nome do ficheiro a montar.
Na lista Versão 1, selecione a versão do segredo a que quer fazer referência. Por predefinição, a versão mais recente está selecionada. Se quiser, pode selecionar uma versão específica.
Clique em Concluído.
Navegue para o separador Contentores para montar o segredo no contentor.
No separador Volume mounts, clique em Mount volume.
Na lista Nome 1, selecione o nome do volume.
No campo Caminho de montagem 1, introduza o caminho de montagem para este segredo. Este é o diretório onde são colocadas todas as versões do seu segredo.
Clique em Concluído.
Clique em Criar ou Implementar.
- No separador Variáveis e segredos:
Clique em Criar ou Atualizar.
gcloud
Para montar um segredo como um volume quando atualiza uma tarefa:
gcloud run jobs update JOB_NAME \ --image IMAGE_URL \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
- JOB_NAME: o nome da sua profissão.
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de montagem do volume epassword
é o nome do ficheiro do segredo. - PROJECT_NUMBER: o número do projeto no qual o segredo foi criado.
- SECRET_NAME: o nome secreto, 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 estiver a criar uma nova tarefa, ignore este passo. Se estiver a atualizar uma tarefa existente, transfira a respetiva configuração YAML:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Devido a restrições relacionadas com a compatibilidade da API, as localizações dos segredos têm de ser armazenadas numa anotação.
Para segredos 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 o seguinte:
- JOB: o nome da sua profissão.
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome secreto, 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 no qual o segredo foi criado.
- SECRET_LOOKUP_NAME: qualquer nome que tenha uma sintaxe de nome secreto válida, por exemplo,
my-secret
. Pode ser igual a SECRET_NAME.
Para segredos montados como caminhos de ficheiros:
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 o seguinte:
- JOB_NAME: o nome da sua profissão.
- IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - PATH: o caminho de montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de montagem do volume epassword
é o nome do ficheiro do segredo. - PROJECT_NUMBER: o número do projeto no qual o segredo foi criado.
- SECRET_NAME: o nome secreto, 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 de nome secreto válida, por exemplo,
my-secret
, pode ser igual a SECRET_NAME. - VOLUME_NAME: qualquer nome, por exemplo,
my-volume
. Pode ser igual a SECRET_NAME.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Adicione o seguinte a um recursogoogle_cloud_run_v2_job
na sua configuração do Terraform:Para segredos 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 o seguinte:
- JOB_NAME: o nome da sua tarefa do Cloud Run.
- REGION: a Google Cloud região. Por exemplo,
europe-west1
. - IMAGE_URL: uma referência à
imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/job:latest
. - SECRET_NAME: o nome secreto, por exemplo,
mysecret
. - PROJECT_ID: o ID do projeto no qual o segredo foi criado.
- VERSION: a versão do secret. Use
latest
para a versão mais recente ou um número, por exemplo,2
.
Para segredos montados como caminhos de ficheiros:
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 o seguinte:
- JOB_NAME: o nome da sua tarefa do Cloud Run.
- REGION: a Google Cloud região, por exemplo,
europe-west1
. - IMAGE_URL: uma referência à
imagem do contentor, 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 montagem do volume e o nome do ficheiro da chave secreta. Tem de começar com uma barra inicial, por exemplo,
/etc/secrets/dbconfig/password
, em que/etc/secrets/dbconfig/
é o caminho de montagem do volume epassword
é o nome do ficheiro do segredo. - PROJECT_ID: o ID do projeto no qual o segredo foi criado.
- SECRET_NAME: o nome secreto, por exemplo,
mysecret
.
Veja as definições de segredos
Para ver as definições de segredos atuais para a sua tarefa do Cloud Run:
Consola
Na Google Cloud consola, aceda à página Tarefas do Cloud Run:
Clique no trabalho que lhe interessa para abrir a página Detalhes do trabalho.
Clique em Ver e editar configuração da tarefa.
Localize a definição de segredos nos detalhes da configuração.
gcloud
Use o seguinte comando:
gcloud run jobs describe JOB_NAME
Localize a definição de segredos na configuração devolvida.
Caminhos não permitidos e limitações
O Cloud Run não permite montar segredos em /dev
,
/proc
e /sys
, nem nos respetivos subdiretórios.
Se estiver a montar segredos no /tmp
e estiver a usar o
ambiente de execução de primeira geração,
consulte o problema conhecido sobre a
montagem de segredos no /tmp
.
O Cloud Run não permite montar vários segredos no mesmo caminho, porque não é possível montar dois volumes na mesma localização.
Substituir um diretório
Se o segredo estiver montado como um volume no Cloud Run e o último diretório no caminho de montagem do volume já existir, todos os ficheiros ou pastas no diretório existente ficam inacessíveis.
Por exemplo, se um segredo denominado my-secret
for montado no caminho /etc/app_data
, todo o conteúdo no diretório app_data
é substituído, e o único ficheiro visível é /etc/app_data/my-secret
.
Para evitar substituir ficheiros num diretório existente, crie um novo diretório para
montar o segredo, por exemplo, /etc/app_data/secrets
, para que o caminho de montagem
do segredo seja /etc/app_data/secrets/my-secret
.