Configurar secrets para pools de workers

Seu pool de trabalhadores 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 implantação do pool de workers, 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 secreto 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 do pool de workers, a raiz é proprietária do volume.

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

Para permitir que o Cloud Run acesse o secret, a identidade do serviço precisa ter o seguinte papel:

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 pool de trabalhadores 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

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

É possível tornar um secret acessível ao pool de trabalhadores usando o console Google Cloud ou a Google Cloud CLI ao implantar um novo pool de trabalhadores ou atualizar um pool de trabalhadores e implantar uma revisão. Clique na guia escolhida:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Selecione Pools de workers no menu e clique em Implantar contêiner para configurar um novo pool de workers. Preencha a página inicial de configurações do pool de workers e clique em Contêineres, volumes, Rede e segurança para expandir a página de configuração.

  3. Se você estiver configurando um pool de workers atual, clique nele e em Editar e implantar nova revisão.

  4. Siga as etapas para expor o secret como uma variável de ambiente ou ativá-lo como um volume.

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

      1. Clique na guia Contêineres.
      2. Na guia Variáveis e secrets, clique em Referenciar um secret.
      3. No campo Nome 1, insira o nome da variável de ambiente.
      4. Na lista Secret, selecione o secret que você quer usar.
      5. Na lista Versão 1, selecione a versão do secret a ser referenciada.
      6. Clique em Concluído.
      7. Clique em Criar ou Implantar.
    • Para ativar o secret como um volume:

      1. Clique na guia Volumes e selecione Adicionar volume.
      2. Na lista Tipo de volume, selecione Secret.
      3. No campo Nome do volume, digite um nome ou aceite o nome padrão.
      4. Na lista Secret, selecione o secret que você quer usar.
      5. No campo Caminho 1, digite o nome do arquivo a ser ativado.
      6. 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.
      7. Clique em Concluído.
      8. Acesse a guia Contêiner(es) para ativar o secret no contêiner.
      9. Na guia Ativações de volume, clique em Ativar volume.
      10. Na lista Nome 1, selecione o nome do volume.
      11. 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.
      12. Clique em Concluído.
      13. Clique em Criar ou Implantar.

gcloud

  • Para expor o secret como uma variável de ambiente ao implantar um pool 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:

    • WORKER_POOL: o nome do pool de workers.
    • IMAGE_URL: uma referência à imagem de contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • ENV_VAR_NAME: o nome da variável de ambiente que você quer usar com 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.
  • Para atualizar vários secrets ao mesmo tempo, separe as opções de configuração de cada secret com uma vírgula. O comando a seguir atualiza um secret ativado como um volume e outro secret exposto como uma variável de ambiente. Para atualizar os secrets atuais, 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 atuais e tornar um novo secret acessível ao pool de worker, use a flag --set-secrets:

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

Fazer referência a secrets de outros projetos

Para fazer referência a um secret de outro projeto, verifique se a conta do pool de workers do projeto tem acesso ao secret.

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Selecione Pools de workers no menu e clique em Implantar contêiner para configurar um novo pool de workers. Preencha a página inicial de configurações do pool de workers e clique em Contêineres, volumes, Rede e segurança para expandir a página de configuração.

  3. Se você estiver configurando um pool de workers atual, clique nele e em Editar e implantar nova revisão.

  4. Siga as etapas para expor o secret como uma variável de ambiente ou ativá-lo como um volume.

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

      1. Clique na guia Contêineres.
      2. Na guia Variáveis e secrets, clique em Referenciar um secret.
      3. No campo Nome 1, insira o nome da variável de ambiente.
      4. Na lista Secret, clique em Inserir secret manualmente.
      5. 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.

      6. Na lista Versão 1, selecione a versão do secret a ser referenciada.

      7. Clique em Concluído.

      8. Clique em Criar ou Implantar.

    • Para ativar o secret como um volume:

      1. Clique na guia Volumes e selecione Adicionar volume.
      2. Na lista Tipo de volume, selecione Secret.
      3. No campo Nome do volume, digite um nome ou aceite o nome padrão.
      4. Na lista Secret, clique em Inserir secret manualmente.
      5. 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.

      6. No campo Caminho 1, digite o nome do arquivo a ser ativado.

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

      8. Clique em Concluído.

      9. Acesse a guia Contêiner(es) para ativar o secret no contêiner.

      10. Na guia Ativações de volume, clique em Ativar volume.

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

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

      13. Clique em Concluído.

      14. Clique em Criar ou Implantar.

gcloud

Para referenciar um secret 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:

  • WORKER_POOL: o nome do pool de workers.
  • IMAGE_URL: uma referência à imagem de contêiner que contém o pool de workers, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • PROJECT_NUMBER pelo número do projeto em que o secret foi criado.
  • SECRET_NAME: o nome do secret, por exemplo, mysecret.
  • VERSION pela versão do secret Use latest para a versão mais recente ou um número, por exemplo, 2.

Ver configurações de secrets

Para ver as configurações de secrets atuais do pool de trabalhadores do Cloud Run:

Console

  1. No console do Google Cloud , acesse a página de pools de trabalhadores do Cloud Run:

    Acessar pools de workers do Cloud Run

  2. Clique no pool de workers em que você tem interesse para abrir a página Detalhes do pool de workers.

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

  4. Localize a definição dos secrets nos detalhes da configuração.

gcloud

  1. Use o comando a seguir:

    gcloud beta run worker-pools describe WORKER_POOL
  2. Localize a configuração de secret na configuração retornada.

Remover secrets de um pool de workers

É possível remover secrets de um pool de workers usando o console Google Cloud ou a CLI gcloud:

Console

  1. No Google Cloud console, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Selecione o pool de workers na lista e clique em Editar e implantar nova revisão.

  3. Clique na guia Contêineres.

  4. Para excluir secrets montados como um volume, selecione a guia Montagens de volume, passe o cursor sobre o secret que você quer remover e clique em Excluir.

  5. Para excluir secrets expostos como uma variável de ambiente, selecione a guia Variáveis e secrets, passe o cursor sobre o secret que você quer remover e clique em Excluir.

  6. Clique em Implantar.

gcloud

É possível remover todos os secrets de um pool de workers ou especificar um ou mais secrets a serem removidos:

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

Substitua:

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

  • Para especificar uma lista de secrets a serem removidos, use a sinalização --remove-secrets. O comando a seguir remove um secret ativado como um volume e outro secret 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:

  • WORKER_POOL: o nome do pool de workers.
  • IMAGE_URL: uma referência à imagem de contêiner que contém o pool de workers, 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 secret. Por exemplo, /mnt/secrets/primary/latest, em que /mnt/secrets/primary/ é o caminho de ativação e latest é o caminho secreto. Também é possível especificar os caminhos de montagem e secret separadamente:

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

Usar secrets no código

Para exemplos de como acessar secrets no código como variáveis de ambiente, consulte o tutorial sobre autenticação de usuários finais, especialmente a seção Como lidar com configurações sensíveis com o Secret Manager.

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.