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

Antes de começar

  1. Ative a API Secret Manager.

    Ative a API

  2. Se você ainda não tiver feito isso, crie um secret no Secret Manager. Para saber como criar e acessar secrets, consulte Como 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 "Gerenciador de secrets" no Console do Cloud:
    Acessar a página "Gerenciador de secrets"

  2. Clique no nome de um 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. Na lista suspensa Selecionar um papel, escolha Gerenciador de secret e depois Acessador de secrets do Gerenciador de secrets.

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 ferramenta de linha de comando gcloud:

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

  6. Clique em Referenciar um secret para definir um secret para a função.

  7. Selecione o secret para torná-lo acessível. Se você precisar criar um secret, consulte Como criar e acessar secrets.

    • 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 seu projeto recebeu acesso ao secret.

      2. Selecione Não vê seu secret? Insira o código secreto do recurso.

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

        project/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 Montado como volume.

      2. No campo Caminho de montagem, insira o caminho a ser usado para seu secret.

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

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

      1. Selecione Expor como variável de ambiente.

      2. No campo Caminho de montagem, insira o caminho a ser usado para seu secret.

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

  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 beta 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, /etc/secrets/primary/latest, em que /etc/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 beta 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 beta 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:

      project/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, /etc/secrets/primary/latest, em que /etc/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 beta 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, /etc/secrets/primary/latest, em que /etc/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 Cloud ou a ferramenta 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 Segurança para abrir a guia "Segurança".

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

  7. Clique em Next.

  8. Clique em Deploy.

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 beta 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 beta 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, /etc/secrets/primary/latest, em que /etc/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 ver os secrets acessíveis da função

É possível ver quais secrets sua função pode acessar atualmente usando o Console do Cloud ou a ferramenta 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 ver 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 atualmente disponíveis para a função.

gcloud

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

gcloud beta functions describe FUNCTION_NAME

Substitua FUNCTION_NAME pelo nome da sua função.

A seguir