Configurar secrets

Use o Secret Manager para armazenar com segurança chaves de API, senhas e outras informações confidenciais. Neste guia, você verá como configurar funções do Cloud Run para acessar os segredos armazenados no Secret Manager.

Este documento abrange as duas maneiras de disponibilizar um secret para sua função:

  • Montar o secret como um volume. Isso disponibiliza o secret para a função como um arquivo. Se você fizer referência a um secret como um volume, sua função acessará o valor do secret do Secret Manager sempre que o arquivo for lido no disco. Isso faz da ativação como um volume uma boa estratégia se você quiser fazer referência à versão mais recente do secret em vez de uma versão fixada dele. Esse método também funciona bem se você planeja implementar a rotação secreta.

  • Transmitir o segredo como uma variável de ambiente. Os valores das variáveis de ambiente são resolvidos no momento da inicialização da instância. Portanto, se você usar esse método, recomendamos fazer referência a uma versão fixada do secret em vez de fazer referência à versão mais recente dele.

Para mais informações sobre como usar o Secret Manager, consulte a visão geral do Secret Manager. Para saber como criar e acessar secrets, consulte Criar um secret.

Antes de começar

  1. Enable the Secret Manager API.

    Enable the API

  2. Se ainda não tiver feito isso, crie um secret no Secret Manager, conforme descrito em Criar um secret.

Como conceder acesso a segredos

Sua função pode acessar segredos que residem no mesmo projeto que a função, bem como segredos que residem em outro projeto. Para acessar um secret, a conta de serviço do ambiente de execução da função precisa receber acesso ao secret.

Por padrão, as funções do Cloud Run usam a conta de serviço padrão do Compute para autenticar com o Secret Manager. Se a conta de serviço padrão já tiver o papel de Editor, recomendamos que você o substitua por papéis menos permissivos.

Para usar o Secret Manager com as funções do Cloud Run, atribua o papel roles/secretmanager.secretAccessor à conta de serviço associada à função:

  1. Acesse a página do Secret Manager no console do Google Cloud:
    Acessar a página do Secret Manager

  2. Clique na caixa de seleção ao lado do secret.

  3. Se ela ainda não estiver aberta, clique em Mostrar painel de informações para abrir o painel.

  4. No painel de informações, clique em Adicionar participante.

  5. No campo Novos principais, insira a conta de serviço que a função usa para a identidade. A conta de serviço da função é uma das seguintes:

  6. No menu suspenso Selecionar um papel, escolha Secret Manager e depois Acessador de secrets do Secret Manager.

Como preparar uma função para acessar secrets

Há duas maneiras de disponibilizar secrets para uma função:

  • Transmitir o secret como uma variável de ambiente.
  • Montar o secret como um volume.

Variáveis de ambiente

Para usar variáveis de ambiente e disponibilizar secrets para a função:

  1. Defina uma variável de ambiente do ambiente de execução durante a implantação da função.
  2. Torne o secret acessível para a função em uma variável de ambiente.
  3. Acesse a variável de ambiente de maneira programática no momento da execução.

Como montar o secret como um volume

Para montar um secret como um volume:

  1. Crie um arquivo que contenha o secret.

  2. Escolha um diretório não utilizado e que não seja do sistema, por exemplo, /mnt/secrets, como o caminho de ativação do secret. Todos os arquivos ou subdiretórios preexistentes nesse diretório que não sejam o secret e as versões dele se tornam inacessíveis depois que o secret é ativado.

  3. Torne o secret acessível para a função como um volume montado.

  4. No ambiente de execução, leia o conteúdo do arquivo de maneira programática para acessar o valor do secret .

Por exemplo, se o secret tiver sido montado em /mnt/secrets/secret1, a função precisa ler esse arquivo. Confira um exemplo de como ler o arquivo de maneira síncrona usando Node.js:

fs.readFileSync('/mnt/secrets/secret1')

Como disponibilizar um secret para uma função

Para fazer referência a um secret a partir de uma função, primeiro é necessário torná-lo acessível à função. É possível tornar um secret acessível a funções novas ou atuais usando o Console do Google Cloud ou a CLI do Google Cloud:

Console

Para tornar um secret acessível a uma função:

  1. Acesse a página de funções do Cloud Run no console do Google Cloud:
    Acessar a página de funções do Cloud Run

  2. Clique no nome da função que você quer que acesse o secret.

  3. Clique em Editar.

  4. Clique em Ambiente de execução, compilação... para expandir as opções de configuração avançada.

  5. Clique em Repositório de imagens e segurança para abrir a guia.

  6. Clique em Adicionar uma referência de secret para definir um secret para a função.

  7. Selecione o secret para torná-lo acessível. Se precisar, crie um secret.

    • Para fazer referência a um secret no mesmo projeto de sua função:

      1. Selecione o secret na lista suspensa.
    • Para fazer referência a um secret de outro projeto:

      1. Verifique se a conta de serviço do projeto recebeu acesso ao secret.

      2. Selecione Inserir secret de modo manual.

      3. Insira o ID do recurso do secret no seguinte formato:

        projects/PROJECT_ID/secrets/SECRET_NAME

        Substitua:

        • PROJECT_ID: o ID do projeto em que o secret reside.

        • SECRET_NAME: o nome do secret no Secret Manager.

  8. Selecione o método de referência do secret. É possível montar o secret como um volume ou expô-lo como uma variável de ambiente.

    • Para ativar o secret como um volume:

      1. Selecione Ativado como volume.

      2. No campo Caminho de ativação, insira o prefixo do caminho de ativação do secret. Esse é o diretório em que todas as versões do secret são colocadas.

      3. No campo Path1, digite o nome do arquivo a ser ativado. Esse nome é concatenado com o prefixo do caminho de ativação da etapa anterior para formar o caminho completo em que o secret é ativado.

      4. No menu suspenso Version1, selecione a versão do secret a ser referenciada.

      5. Ative outras versões desse secret clicando em + Adicionar para definir outros caminhos e as versões do secret a serem ativadas neles.

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

      1. Selecione Expor como variável de ambiente.

      2. No campo Name1, insira o nome da variável de ambiente.

      3. No menu suspenso Version1, selecione a versão do secret a ser referenciada.

      4. É possível expor outras versões desse secret na função clicando em + Adicionar para definir outras variáveis de ambiente e as versões do secret a serem armazenadas nelas.

  9. Clique em Concluído.

  10. Clique em Próxima.

  11. Clique em Implantar.

O código da função agora pode fazer referência ao secret.

gcloud

Para tornar um secret acessível a uma função, insira um dos seguintes comandos.

  • Para ativar o secret como um volume, digite o seguinte comando:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
    

    Substitua:

    • FUNCTION_NAME: o nome da sua função

    • RUNTIME: o tempo de execução em que a função será executada.

    • 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'

    • SECRET: o nome do secret no Secret Manager.

    • VERSION: a versão do secret a ser usada. Por exemplo, 1 ou latest.

    A sinalização --set-secrets substitui todas as chaves secretas atuais. Para manter os segredos existentes da função, use a sinalização --update-secrets.

  • Para expor o secret como uma variável de ambiente, digite o seguinte comando:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
    

    Substitua:

    • FUNCTION_NAME: o nome da sua função

    • RUNTIME: o tempo de execução em que a função será executada.

    • ENV_VAR_NAME: o nome da variável de ambiente.

    • SECRET: o nome do secret no Secret Manager.

    • VERSION: a versão do secret a ser usada. Por exemplo, 1 ou latest.

    A sinalização --set-secrets substitui todas as chaves secretas atuais. Para manter os segredos existentes da função, use a sinalização --update-secrets.

  • Será possível mencionar um secret de outro projeto se a conta de serviço da função tiver recebido acesso ao secret. Para fazer referência a um secret de outro projeto, use o caminho do recurso do secret:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
    

    Substitua:

    • FUNCTION_NAME: o nome da sua função

    • SECRET_RESOURCE_PATH: o caminho do recurso do secret que reside em outro projeto. O caminho do recurso usa o seguinte formato:

      projects/PROJECT_ID/secrets/SECRET_NAME

      Substitua:

      • PROJECT_ID: o ID do projeto em que o secret reside.

      • SECRET_NAME: o nome do secret no Secret Manager.

    • RUNTIME: o tempo de execução em que a função será executada.

    • 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'

    • SECRET: o nome do secret no Secret Manager.

    • VERSION: a versão do secret a ser usada. Por exemplo, 1 ou latest.

  • É possível atualizar vários secrets de uma só vez. 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 existentes, digite o seguinte comando:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \
    SECRET_FILE_PATH=SECRET:VERSION'
    

    Substitua:

    • FUNCTION_NAME: o nome da sua função

    • RUNTIME: o tempo de execução em que a função será executada.

    • ENV_VAR_NAME: o nome da variável de ambiente.

    • SECRET: o nome do secret no Secret Manager.

    • VERSION: a versão do secret a ser usada. Por exemplo, 1 ou latest.

    • 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'

Como remover secrets de uma função

É possível remover secrets de uma função usando o console do Google Cloud ou a CLI gcloud:

Console

  1. Acesse a página de funções do Cloud Run no console do Google Cloud:
    Acessar a página de funções do Cloud Run

  2. Clique no nome da função para remover um dos secrets.

  3. Clique em Editar.

  4. Clique em Configurações de ambiente de execução, build e conexões para expandir as opções avançadas de configuração.

  5. Clique em Repositório de imagens e segurança para abrir a guia "Segurança".

  6. Coloque o cursor sobre o secret que você quer remover e clique em Excluir.

  7. Clique em Próxima.

  8. Clique em Implantar.

gcloud

É possível remover todos os secrets de uma função ou especificar um ou mais secrets a serem removidos:

  • Para remover todos os segredos, execute o seguinte comando:

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --clear-secrets
    

    Substitua:

    • FUNCTION_NAME: o nome da sua função

    • RUNTIME: o tempo de execução em que a função será executada.

    Todos os secrets serão removidos da função.

  • 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 functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
    

    Substitua:

    • FUNCTION_NAME: o nome da sua função

    • RUNTIME: o tempo de execução em que a função será executada.

    • 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'

    Os secrets especificados são removidos da função.

Como conferir os secrets acessíveis da função

É possível conferir quais secrets a função pode acessar no momento usando o console do Google Cloud ou a gcloud CLI:

Console

  1. Acesse a página de funções do Cloud Run no console do Google Cloud:
    Acessar a página de funções do Cloud Run

  2. Clique no nome da função para conferir os secrets disponíveis.

  3. Clique em Editar.

  4. Clique em Configurações de ambiente de execução, build e conexões para expandir as opções avançadas de configuração.

  5. Clique em Segurança para abrir a guia "Segurança".

A guia "Segurança" lista os secrets disponíveis no momento para a função.

gcloud

Para conferir quais secrets estão disponíveis para sua função, use o comando gcloud functions describe:

gcloud functions describe FUNCTION_NAME

Substitua FUNCTION_NAME pelo nome da sua função.

A seguir