Configure segredos para pools de trabalhadores

O seu conjunto de trabalhadores pode exigir chaves de API, palavras-passe, certificados ou outras informações confidenciais para as respetivas dependências. Para o Cloud Run, a Google recomenda armazenar estas informações confidenciais num segredo que cria no Secret Manager.

Disponibilize um segredo aos seus contentores de uma das seguintes formas:

  • Quando monta cada segredo como um volume, o Cloud Run disponibiliza o segredo ao contentor como ficheiros. Quando lê um volume, o Cloud Run obtém sempre o valor secreto do Secret Manager para usar o valor 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 como versão.

Para mais informações, consulte as práticas recomendadas do Secret Manager.

Como os segredos são verificados na implementação e no tempo de execução

Durante a implementação do conjunto de trabalhadores, o Cloud Run verifica todos os segredos que usa. A verificação garante que a conta de serviço que executa o contentor tem autorização para aceder a estes segredos.

Durante o tempo de execução, quando as instâncias são iniciadas:

  • Se o segredo for uma variável de ambiente, o Cloud Run obtém o valor do segredo antes de iniciar a instância. Se o processo de obtenção do segredo falhar, a instância não é iniciada.
  • Se montar o segredo como um volume, o Cloud Run não efetua verificações durante o arranque da instância. No entanto, durante a execução, se um segredo for inacessível, as tentativas de leitura do volume montado falham.

Propriedade do volume

A propriedade de um volume secreto do Cloud Run 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, o que acontece sempre no caso do conjunto de trabalhadores, o proprietário do volume é o utilizador root.

Antes de começar

  1. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  2. 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:

Para permitir que o Cloud Run aceda ao segredo, a identidade do serviço tem de ter a seguinte função:

Para obter instruções sobre como adicionar o principal da identidade de 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 o seu conjunto de trabalhadores do Cloud Run interage com Google Cloud APIs, como as bibliotecas de clientes da nuvem, 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

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também vão receber automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Pode tornar um segredo acessível ao seu conjunto de trabalhadores através da Google Cloud consola ou da CLI do Google Cloud quando implementa um novo conjunto de trabalhadores ou atualiza um conjunto de trabalhadores existente e implementa uma revisão. Clique no separador que quer:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Grupos de trabalhadores no menu e clique em Implementar contentor para configurar um novo grupo de trabalhadores. Preencha a página de definições do conjunto de trabalhadores inicial e, de seguida, clique em Recipientes, volumes, rede, segurança para expandir a página de configuração.

  3. Se estiver a configurar um conjunto de trabalhadores existente, clique no conjunto de trabalhadores e, de seguida, em Editar e implementar nova revisão.

  4. Siga os passos para montar o segredo como um volume ou expor o segredo como uma variável de ambiente.

    • Para expor o segredo como uma variável de ambiente:

      1. Clique no separador Recipientes.
      2. No separador Variáveis e segredos, clique em Referenciar um segredo.
      3. No campo Nome 1, introduza o nome da variável de ambiente.
      4. Na lista Segredo, selecione o segredo que quer usar.
      5. Na lista Versão 1, selecione a versão do segredo a referenciar.
      6. Clique em Concluído.
      7. Clique em Criar ou Implementar.
    • Para montar o segredo como um volume:

      1. Clique no separador Volumes e selecione Adicionar volume.
      2. Na lista Tipo de volume, selecione Secreto.
      3. No campo Nome do volume, introduza um nome ou aceite o nome predefinido.
      4. Na lista Segredo, selecione o segredo que quer usar.
      5. No campo Caminho 1, introduza o nome do ficheiro a montar.
      6. 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.
      7. Clique em Concluído.
      8. Navegue para o separador Contentores para montar o seu segredo no contentor.
      9. No separador Volume mounts (Montagens de volume), clique em Mount volume (Montar volume).
      10. Na lista Nome 1, selecione o nome do volume.
      11. 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.
      12. Clique em Concluído.
      13. Clique em Criar ou Implementar.

gcloud

  • Para expor o segredo como uma variável de ambiente quando implementa um grupo de trabalhadores, execute o seguinte comando:

    gcloud beta run worker-pools deploy WORKER_POOL \
    --image IMAGE_URL \
    --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

    Substitua o seguinte:

    • WORKER_POOL: o nome do seu conjunto de trabalhadores.
    • IMAGE_URL: uma referência à imagem do contentor que contém o conjunto de trabalhadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • ENV_VAR_NAME: o nome da variável de ambiente que quer usar com o segredo.
    • SECRET_NAME: o nome secreto 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 vários segredos ao mesmo tempo, separe as opções de configuração de cada segredo com uma vírgula. O comando seguinte atualiza um segredo montado como um volume e outro segredo exposto como uma variável de ambiente. Para atualizar segredos existentes, execute o seguinte comando:

    gcloud beta run worker-pools deploy WORKER_POOL \
    --image IMAGE_URL \
    --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • Para limpar os secrets existentes e tornar um novo secret acessível ao grupo de trabalhadores, use a flag --set-secrets:

    gcloud beta run worker-pools update WORKER_POOL \
    --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

Referencie segredos de outros projetos

Para referenciar um segredo de outro projeto, verifique se a conta do conjunto de trabalhadores do seu projeto tem acesso ao segredo.

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione Grupos de trabalhadores no menu e clique em Implementar contentor para configurar um novo grupo de trabalhadores. Preencha a página de definições do conjunto de trabalhadores inicial e, de seguida, clique em Recipientes, volumes, rede, segurança para expandir a página de configuração.

  3. Se estiver a configurar um conjunto de trabalhadores existente, clique no conjunto de trabalhadores e, de seguida, em Editar e implementar nova revisão.

  4. Siga os passos para montar o segredo como um volume ou expor o segredo como uma variável de ambiente.

    • Para expor o segredo como uma variável de ambiente:

      1. Clique no separador Recipientes.
      2. No separador Variáveis e segredos, clique em Referenciar um segredo.
      3. No campo Nome 1, introduza o nome da variável de ambiente.
      4. Na lista Secret, clique em Introduzir Secret manualmente.
      5. 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.

      6. Na lista Versão 1, selecione a versão do segredo a referenciar.

      7. Clique em Concluído.

      8. Clique em Criar ou Implementar.

    • Para montar o segredo como um volume:

      1. Clique no separador Volumes e selecione Adicionar volume.
      2. Na lista Tipo de volume, selecione Secreto.
      3. No campo Nome do volume, introduza um nome ou aceite o nome predefinido.
      4. Na lista Secret, clique em Introduzir Secret manualmente.
      5. 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.

      6. No campo Caminho 1, introduza o nome do ficheiro a montar.

      7. 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.

      8. Clique em Concluído.

      9. Navegue para o separador Contentores para montar o seu segredo no contentor.

      10. No separador Volume mounts (Montagens de volume), clique em Mount volume (Montar volume).

      11. Na lista Nome 1, selecione o nome do volume.

      12. 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.

      13. Clique em Concluído.

      14. Clique em Criar ou Implementar.

gcloud

Para referenciar um segredo como uma variável de ambiente, execute o seguinte comando:

gcloud beta run worker-pools deploy WORKER_POOL \
--image IMAGE_URL \
--update-secrets=ENV_VAR_NAME=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

Substitua o seguinte:

  • WORKER_POOL: o nome do seu conjunto de trabalhadores.
  • IMAGE_URL: uma referência à imagem do contentor que contém o conjunto de trabalhadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • PROJECT_NUMBER com o número do projeto do projeto no qual o segredo foi criado.
  • SECRET_NAME: o nome secreto, por exemplo, mysecret.
  • VERSION com a versão do Secret. Use latest para a versão mais recente ou um número, por exemplo, 2.

Veja as definições de segredos

Para ver as definições de segredos atuais do seu conjunto de trabalhadores do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda à página de conjuntos de trabalhadores do Cloud Run:

    Aceda aos conjuntos de trabalhadores do Cloud Run

  2. Clique no conjunto de trabalhadores que lhe interessa para abrir a página Detalhes dos conjuntos de trabalhadores.

  3. Clique em Editar e implementar nova revisão.

  4. Localize a definição de segredos nos detalhes da configuração.

gcloud

  1. Use o seguinte comando:

    gcloud beta run worker-pools describe WORKER_POOL
  2. Localize a definição de segredos na configuração devolvida.

Remova segredos de um grupo de trabalhadores

Pode remover segredos de um conjunto de trabalhadores através da Google Cloud consola ou da CLI gcloud:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Selecione o seu conjunto de trabalhadores na lista e clique em Editar e implementar nova revisão.

  3. Clique no separador Recipientes.

  4. Para eliminar segredos montados como um volume, selecione o separador Montagens de volumes, passe o ponteiro sobre o segredo que quer remover e, de seguida, clique em Eliminar.

  5. Para eliminar segredos expostos como uma variável de ambiente, selecione o separador Variáveis e segredos, passe o cursor do rato sobre o segredo que quer remover e, de seguida, clique em Eliminar.

  6. Clique em Implementar.

gcloud

Pode remover todos os segredos de um conjunto de trabalhadores ou especificar um ou mais segredos a remover:

  • Para remover todos os segredos, execute o seguinte comando:
  gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL \
  --clear-secrets

Substitua o seguinte:

  • WORKER_POOL: o nome do seu conjunto de trabalhadores.
  • IMAGE_URL: uma referência à imagem do contentor que contém o conjunto de trabalhadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.

  • Para especificar uma lista de segredos a remover, use a flag --remove-secrets. O comando seguinte remove um segredo montado como um volume e outro segredo exposto como uma variável de ambiente:

  gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL \
  --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH

Substitua o seguinte:

  • WORKER_POOL: o nome do seu conjunto de trabalhadores.
  • IMAGE_URL: uma referência à imagem do contentor que contém o conjunto de trabalhadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • ENV_VAR_NAME: o nome da variável de ambiente.
  • SECRET_FILE_PATH: o caminho completo do segredo. Por exemplo, /mnt/secrets/primary/latest, em que /mnt/secrets/primary/ é o caminho de montagem e latest é o caminho secreto. Também pode especificar os caminhos de montagem e secretos separadamente:

    --set-secrets MOUNT_PATH:SECRET_PATH=SECRET:VERSION

Use segredos no seu código

Para ver exemplos de acesso a segredos no seu código como variáveis de ambiente, consulte o tutorial sobre a autenticação do utilizador final, particularmente a secção Processar a configuração sensível com o Secret Manager.

Caminhos não permitidos e limitações

Aplicam-se as seguintes limitações à montagem de segredos:

  • O Cloud Run não permite montar secrets em /dev, /proc e /sys, nem nos respetivos subdiretórios.
  • 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.