Configure segredos (1.ª geração)
Pode usar o Secret Manager para armazenar de forma segura chaves de API, palavras-passe e outras informações confidenciais. Este guia mostra-lhe como configurar funções do Cloud Run para aceder a segredos armazenados no Secret Manager.
Este documento aborda as duas formas de disponibilizar um segredo à sua função:
Montar o segredo como um volume. Isto disponibiliza o segredo à função como um ficheiro. Se fizer referência a um segredo como um volume, a sua função acede ao valor do segredo a partir do Secret Manager sempre que o ficheiro é lido a partir do disco. Isto torna a montagem como um volume uma boa estratégia se quiser fazer referência à versão mais recente do segredo em vez de uma versão fixada do segredo. Este método também funciona bem se planear implementar a rotação de segredos.
Transmitir o segredo como uma variável de ambiente. Os valores das variáveis de ambiente são resolvidos no momento do arranque da instância. Por isso, se usar este método, recomendamos que faça referência a uma versão fixada do segredo em vez de fazer referência à versão mais recente do segredo.
Para mais informações sobre a utilização do Secret Manager, consulte a vista geral do Secret Manager. Para saber como criar e aceder a segredos, consulte o artigo Crie um segredo.
Antes de começar
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. - Se ainda não o fez, crie um segredo no Secret Manager, conforme descrito em Crie um segredo.
Conceder acesso a segredos
A sua função pode aceder a segredos que residam no mesmo projeto que a função, bem como a segredos que residam noutro projeto. Para aceder a um segredo, a conta de serviço de tempo de execução da função tem de ter acesso concedido ao segredo.
Por predefinição, as funções do Cloud Run usam a conta de serviço predefinida do App Engine para fazer a autenticação no Secret Manager. Para utilização em produção, a Google recomenda que configure a sua função para autenticar através de uma conta de serviço gerida pelo utilizador à qual é atribuído o conjunto de funções menos permissivo necessário para realizar as tarefas da função.
Para usar o Secret Manager com as funções do Cloud Run, atribua a função roles/secretmanager.secretAccessor
à conta de serviço associada à sua função:
Aceda à página Secret Manager na Google Cloud consola:
Aceder ao Secret ManagerClique na caixa de verificação junto ao segredo.
Se ainda não estiver aberto, clique em Mostrar painel de informações para o abrir.
No painel de informações, clique em Adicionar diretor.
No campo Novos membros, introduza a conta de serviço que a sua função usa para a respetiva identidade. A conta de serviço da função é uma das seguintes:
A conta de serviço gerida pelo utilizador atribuída à função no momento da implementação. Para saber como implementar uma função com uma conta de serviço gerida pelo utilizador, consulte o artigo Usar contas de serviço individuais para a sua função.
A conta de serviço predefinida do App Engine (não recomendada para utilização em produção).
No menu pendente Selecionar uma função, escolha Secret Manager e, de seguida, Secret Manager Secret Accessor.
A preparar a sua função para aceder a segredos
Existem duas formas de disponibilizar um segredo à sua função:
- Transmitir o segredo como uma variável de ambiente.
- Montar o segredo como um volume.
Variáveis de ambiente
Para usar variáveis de ambiente para disponibilizar segredos à sua função:
- Definir uma variável de ambiente de tempo de execução durante a implementação da função.
- Torne o segredo acessível à sua função numa variável de ambiente.
- Aceder à variável de ambiente programaticamente em tempo de execução.
Montar o segredo como um volume
Para montar um segredo como um volume:
Crie um ficheiro que contenha o seu segredo.
Escolha um diretório não usado e não pertencente ao sistema, como
/mnt/secrets
, como o caminho de montagem do seu segredo. Todos os ficheiros ou subdiretórios pré-existentes nesse diretório, exceto o seu segredo e as respetivas versões, ficam inacessíveis assim que o segredo for montado.Torne o segredo acessível à sua função como um volume montado.
Em tempo de execução, leia programaticamente o conteúdo do ficheiro para aceder ao valor secreto.
Por exemplo, se o segredo tiver sido montado em /mnt/secrets/secret1
, a função tem de ler este ficheiro. Segue-se um exemplo de como pode ler o ficheiro de forma síncrona através do Node.js:
fs.readFileSync('/mnt/secrets/secret1')
Tornar um segredo acessível a uma função
Para referenciar um segredo a partir de uma função, primeiro tem de tornar o segredo acessível à função. Pode tornar um segredo acessível a funções novas ou existentes através da Google Cloud consola ou da Google Cloud CLI:
Consola
Para tornar um segredo acessível a uma função:
Aceda à página de funções do Cloud Run na Google Cloud consola:
Aceda à página de funções do Cloud RunClique no nome da função que quer poder aceder a um segredo.
Clique em Edit.
Clique em Tempo de execução, compilação… para expandir as opções de configuração avançadas.
Clique em Segurança e repositório de imagens para abrir o separador.
Clique em Adicionar uma referência secreta para definir um segredo para a função.
Selecione o segredo a tornar acessível. Se precisar, crie um segredo.
Para fazer referência a um segredo no mesmo projeto que a sua função:
- Selecione o segredo na lista pendente.
Para fazer referência a um segredo de outro projeto:
Confirme que a conta de serviço do seu projeto tem acesso concedido ao segredo.
Selecione Introduzir Secret manualmente.
Introduza o ID do recurso do Secret no seguinte formato:
projects/PROJECT_ID/secrets/SECRET_NAME
Substitua o seguinte:
PROJECT_ID: o ID do projeto onde o segredo reside.
SECRET_NAME: o nome do segredo no Secret Manager.
Selecione o método de referência para o segredo. Pode montar o segredo como um volume ou expor o segredo como uma variável de ambiente.
Para montar o segredo como um volume:
Selecione Montado como volume.
No campo Caminho de montagem, introduza o caminho de montagem para este segredo. Este é o diretório onde todas as versões do seu segredo são colocadas.
No campo Path1, introduza o nome do ficheiro a montar. Este nome é concatenado com o caminho de montagem do passo anterior para formar o caminho de montagem completo onde o seu segredo está montado.
No menu pendente Version1, selecione a versão do segredo a que quer fazer referência.
Pode montar versões adicionais deste segredo clicando em +Adicionar para definir caminhos adicionais e as versões deste segredo a montar neles.
Para expor o segredo como uma variável de ambiente:
Selecione Exposto como variável de ambiente.
No campo Name1, introduza o nome da variável de ambiente.
No menu pendente Version1, selecione a versão do segredo a que quer fazer referência.
Pode expor versões adicionais deste segredo à sua função clicando em +Adicionar para definir variáveis de ambiente adicionais e as versões deste segredo a armazenar nas mesmas.
Clique em Concluído.
Clicar em Seguinte.
Clique em Implementar.
O código da sua função já pode fazer referência ao segredo.
gcloud
Para tornar um segredo acessível a uma função, introduza um dos seguintes comandos.
Para montar o segredo como um volume, introduza o seguinte comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
Substitua o seguinte:
FUNCTION_NAME: o nome da sua função.
RUNTIME: o tempo de execução em que executar a função.
SECRET_FILE_PATH: o caminho completo do segredo. Por exemplo,
/mnt/secrets/primary/latest
, em que/mnt/secrets/primary/
é o caminho de montagem elatest
é o caminho secreto. Também pode especificar os caminhos de montagem e secretos separadamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
SECRET: o nome do segredo no Secret Manager.
VERSION: a versão do secret a usar. Por exemplo,
1
oulatest
.
A flag
--set-secrets
substitui todos os segredos existentes. Para manter os segredos existentes da função, use a flag--update-secrets
em alternativa.Para expor o segredo como uma variável de ambiente, introduza o seguinte comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
Substitua o seguinte:
FUNCTION_NAME: o nome da sua função.
RUNTIME: o tempo de execução em que executar a função.
ENV_VAR_NAME: o nome da variável de ambiente.
SECRET: o nome do segredo no Secret Manager.
VERSION: a versão do secret a usar. Por exemplo,
1
oulatest
.
A flag
--set-secrets
substitui todos os segredos existentes. Para manter os segredos existentes da função, use a flag--update-secrets
em alternativa.Pode fazer referência a um segredo de outro projeto se tiver sido concedido acesso ao segredo à conta de serviço da função. Para fazer referência a um segredo de outro projeto, use o caminho do recurso do segredo:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
Substitua o seguinte:
FUNCTION_NAME: o nome da sua função.
SECRET_RESOURCE_PATH: o caminho do recurso para o segredo que reside noutro projeto. O caminho do recurso usa o seguinte formato:
projects/PROJECT_ID/secrets/SECRET_NAME
Substitua o seguinte:
PROJECT_ID: o ID do projeto onde o segredo reside.
SECRET_NAME: o nome do segredo no Secret Manager.
RUNTIME: o tempo de execução em que executar a função.
SECRET_FILE_PATH: o caminho completo do segredo. Por exemplo,
/mnt/secrets/primary/latest
, em que/mnt/secrets/primary/
é o caminho de montagem elatest
é o caminho secreto. Também pode especificar os caminhos de montagem e secretos separadamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
SECRET: o nome do segredo no Secret Manager.
VERSION: a versão do secret a usar. Por exemplo,
1
oulatest
.
Pode atualizar vários segredos em simultâneo. Separe as opções de configuração para cada segredo com uma vírgula. O comando seguinte atualiza um segredo montado como um volume e outro segredo exposto como uma variável de ambiente.
Para atualizar segredos existentes, introduza o seguinte comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \ SECRET_FILE_PATH=SECRET:VERSION'
Substitua o seguinte:
FUNCTION_NAME: o nome da sua função.
RUNTIME: o tempo de execução em que executar a função.
ENV_VAR_NAME: o nome da variável de ambiente.
SECRET: o nome do segredo no Secret Manager.
VERSION: a versão do secret a usar. Por exemplo,
1
oulatest
.SECRET_FILE_PATH: o caminho completo do segredo. Por exemplo,
/mnt/secrets/primary/latest
, em que/mnt/secrets/primary/
é o caminho de montagem elatest
é o caminho secreto. Também pode especificar os caminhos de montagem e secretos separadamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
Remover segredos de uma função
Pode remover segredos de uma função através da Google Cloud consola ou da CLI gcloud:
Consola
Aceda à página de funções do Cloud Run na Google Cloud consola:
Aceda à página de funções do Cloud RunClique no nome da função para remover um dos respetivos segredos.
Clique em Edit.
Clique em Definições de tempo de execução, compilação e ligações para expandir as opções de configuração avançadas.
Clique em Segurança e repositório de imagens para abrir o separador Segurança.
Mantenha o ponteiro sobre o segredo que quer remover e, de seguida, clique em
Eliminar.Clicar em Seguinte.
Clique em Implementar.
gcloud
Pode remover todos os segredos de uma função ou especificar um ou mais segredos a remover:
Para remover todos os segredos, execute o seguinte comando:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --clear-secrets
Substitua o seguinte:
FUNCTION_NAME: o nome da sua função.
RUNTIME: o tempo de execução em que executar a função.
Todos os segredos são removidos da função.
Para especificar uma lista de segredos a remover, use a flag
--remove-secrets
. O comando seguinte remove um segredo montado como um volume e outro segredo exposto como uma variável de ambiente:gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --runtime RUNTIME \ --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
Substitua o seguinte:
FUNCTION_NAME: o nome da sua função.
RUNTIME: o tempo de execução em que executar a função.
ENV_VAR_NAME: o nome da variável de ambiente.
SECRET_FILE_PATH: o caminho completo do segredo. Por exemplo,
/mnt/secrets/primary/latest
, em que/mnt/secrets/primary/
é o caminho de montagem elatest
é o caminho secreto. Também pode especificar os caminhos de montagem e secretos separadamente:--set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'
Os segredos especificados são removidos da função.
Ver os segredos acessíveis da sua função
Pode ver os segredos aos quais a sua função pode aceder através da Google Cloud consola ou da CLI gcloud:
Consola
Aceda à página de funções do Cloud Run na Google Cloud consola:
Aceda à página de funções do Cloud RunClique no nome da função para ver os respetivos segredos disponíveis.
Clique em Edit.
Clique em Definições de tempo de execução, compilação e ligações para expandir as opções de configuração avançadas.
Clique em Segurança para abrir o separador Segurança.
O separador Segurança apresenta os segredos acessíveis à sua função.
gcloud
Para ver que segredos estão disponíveis para a sua função, use o comando
gcloud functions describe
:
gcloud functions describe FUNCTION_NAME
Substitua FUNCTION_NAME pelo nome da sua função.
O que se segue?
- Considere desenvolver funções que usam o Secret Manager com as bibliotecas de cliente do Secret Manager.