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 o Cloud Functions para acessar os segredos armazenados no Gerenciador de segredos.

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. Ative a API Secret Manager.

    Ative a 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, o Cloud Functions usa a conta de serviço padrão do App Engine para fazer a autenticação com o Secret Manager. Para uso em produção, o Google recomenda que você configure a função para autenticação usando uma conta de serviço gerenciada pelo usuário que recebe o conjunto menos permissivo de papéis necessários para realizar isso. tarefas da função.

Para usar o Gerenciador de secrets com o Cloud Functions, 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 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 ambiente de 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 forma 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 do Cloud Functions no Console do Google Cloud:
    Acessar a página do Cloud Functions

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

  11. Clique em Deploy.

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 do Cloud Functions no console do Google Cloud:
    Acessar a página do Cloud Functions

  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 do Cloud Functions no Console do Google Cloud:
    Acessar a página do Cloud Functions

  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