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
-
Ative a API Secret Manager.
- 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:
Acesse a página do Secret Manager no console do Google Cloud:
Acessar a página do Secret ManagerClique na caixa de seleção ao lado do secret.
Se ela ainda não estiver aberta, clique em Mostrar painel de informações para abrir o painel.
No painel de informações, clique em Adicionar participante.
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:
A conta de serviço gerenciada pelo usuário atribuída à função no momento da implantação. Para saber como implantar uma função com uma conta de serviço gerenciada pelo usuário, consulte Como usar contas de serviço individuais para sua função.
A conta de serviço padrão do App Engine (não recomendada para uso em produção).
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:
- Defina uma variável de ambiente de execução durante a implantação da função.
- Torne o secret acessível para a função em uma variável de ambiente.
- 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:
Crie um arquivo que contenha o secret.
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.Torne o secret acessível para a função como um volume montado.
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:
Acesse a página do Cloud Functions no Console do Google Cloud:
Acessar a página do Cloud FunctionsClique no nome da função que você quer que acesse o secret.
Clique em Editar.
Clique em Ambiente de execução, compilação... para expandir as opções de configuração avançada.
Clique em Repositório de imagens e segurança para abrir a guia.
Clique em Adicionar uma referência de secret para definir um secret para a função.
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:
- Selecione o secret na lista suspensa.
Para fazer referência a um secret de outro projeto:
Verifique se a conta de serviço do projeto recebeu acesso ao secret.
Selecione Inserir secret de modo manual.
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.
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:
Selecione Ativado como volume.
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.
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.
No menu suspenso Version1, selecione a versão do secret a ser referenciada.
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:
Selecione Expor como variável de ambiente.
No campo Name1, insira o nome da variável de ambiente.
No menu suspenso Version1, selecione a versão do secret a ser referenciada.
É 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.
Clique em Concluído.
Clique em Next.
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 elatest
é 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
oulatest
.
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
oulatest
.
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 elatest
é 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
oulatest
.
É 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
oulatest
.SECRET_FILE_PATH: o caminho completo do secret. Por exemplo,
/mnt/secrets/primary/latest
, em que/mnt/secrets/primary/
é o caminho de ativação elatest
é 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
Acesse a página do Cloud Functions no console do Google Cloud:
Acessar a página do Cloud FunctionsClique no nome da função para remover um dos secrets.
Clique em Editar.
Clique em Configurações de ambiente de execução, build e conexões para expandir as opções avançadas de configuração.
Clique em Repositório de imagens e segurança para abrir a guia "Segurança".
Coloque o cursor sobre o secret que você quer remover e clique em
Excluir.Clique em Próxima.
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 elatest
é 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
Acesse a página do Cloud Functions no Console do Google Cloud:
Acessar a página do Cloud FunctionsClique no nome da função para conferir os secrets disponíveis.
Clique em Editar.
Clique em Configurações de ambiente de execução, build e conexões para expandir as opções avançadas de configuração.
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
- Considere desenvolver funções que usem o Secret Manager com as bibliotecas de cliente do Secret Manager.