Trabalhar com chaves de acesso no Funções do Azure

As chaves de acesso do Funções do Azure funcionam como segredos partilhados que autorizam o acesso aos endpoints das funções. Este artigo descreve os tipos de chaves de acesso suportadas pelo Functions e como trabalhar com chaves de acesso.

Embora as chaves de acesso ofereçam alguma proteção contra acessos indesejados, considere outras opções para proteger endpoints HTTP em produção. Por exemplo, não distribua segredos partilhados numa aplicação pública. Se um cliente público chamar a sua função, considere implementar estes ou outros mecanismos de segurança:

As chaves de acesso fornecem a base para a autorização HTTP em funções ativadas por HTTP. Para obter mais informações, consulte Nível de autorização.

Tipos de chaves de acesso

O âmbito de uma chave de acesso e as ações que suporta dependem do tipo de chave de acesso.

Tipo de chave Nome da chave Nível de autenticação HTTP Descrição
Função default ou definido pelo usuário function Permite o acesso apenas a um endpoint de função específico.
Anfitrião default ou definido pelo usuário function Permite o acesso a todos os endpoints de função numa aplicação de funções.
Mestrado _master admin Chave de host especial que também fornece acesso administrativo às APIs REST durante a execução numa aplicação de funções. Como a chave mestra concede permissões elevadas na sua aplicação funcional, não partilhe esta chave com terceiros nem a distribua em aplicações clientes nativas.
Sistema Depende da extensão n/d Extensões específicas podem exigir uma chave gerida pelo sistema para aceder aos endpoints de webhook. As chaves do sistema são concebidas para pontos finais de função específicos de extensões que os componentes internos invocam. Por exemplo, o gatilho Evento Grid requer que a assinatura use uma chave de sistema ao chamar o ponto de extremidade do gatilho. Durable Functions também usa chaves do sistema para chamar APIs da extensão Durable Task.
Apenas extensões específicas podem criar chaves do sistema. Não é possível definir explicitamente seus valores. Como outras chaves, você pode gerar um novo valor para a chave a partir do portal ou usando as APIs de chave.

Cada tecla tem um nome para referência. A aplicação de funções e os níveis de função têm cada um uma tecla padrão chamada default. As teclas de função têm precedência sobre as teclas de host. Quando duas teclas têm o mesmo nome, a tecla de função é sempre utilizada.

A tabela a seguir compara os usos para vários tipos de chaves de acesso:

Ação Âmbito Tipo de chave
Executar uma função Função específica Função
Executar uma função Qualquer função Função ou host
Chamar um endpoint admin App de Funções Mestre
Invocar APIs da extensão de tarefas duráveis Aplicação de Funções* Sistema
Chamar um webhook específico da extensão (interno) Aplicação de Funções* Sistema

*Âmbito determinado pela extensão.

Requisitos da chave de acesso

Em Funções, as chaves de acesso são matrizes de 32 bytes geradas aleatoriamente que são codificadas como cadeias de caracteres base-64 seguras para URL. Embora possas gerar as tuas próprias chaves de acesso e usá-las com as Funções, usa o processo padrão de geração de chaves de acesso.

As chaves de acesso geradas por funções incluem valores especiais de assinatura e soma de verificação que indicam o tipo de chave de acesso e que o Funções do Azure a gerou. Estes componentes extra na chave facilitam a determinação da origem destes tipos de segredos durante a varredura de segurança e outros processos automatizados.

Para permitir que as Funções gerem as suas chaves, não forneça a value chave a nenhuma das APIs que pode usar para gerar chaves.

Armazenamento de chaves de acesso

A tua aplicação de funções no Azure armazena as chaves e encripta-as em repouso. Por defeito, a AzureWebJobsStorage definição armazena as chaves num contentor de armazenamento Blob na conta fornecida. Use a AzureWebJobsSecretStorageType definição para sobrepor este comportamento padrão e armazene as chaves numa destas localizações alternativas:

Importante

As chaves de acesso fazem parte da loja secreta da sua aplicação e têm o seu próprio ciclo de vida, independente das funções que protegem. Apagar uma função não elimina nem roda as chaves armazenadas no arquivo de segredos. Como a localização de armazenamento de uma chave deriva do nome da aplicação, recriar uma função com o mesmo nome reutiliza as chaves previamente armazenadas em vez de gerar novas. Este comportamento aplica-se a todos os fornecedores de armazenamento secreto, incluindo armazenamento Blob e Key Vault. Eliminar e recriar uma função não substitui a rotação de chaves: para revogar uma chave quando uma credencial fica exposta ou quando está a remover o acesso de alguém, tem de efetuar explicitamente a sua rotação ou eliminá-la, conforme descrito em Renovar ou criar chaves de acesso.

Localização Valor Descrição
Uma segunda conta de armazenamento blob Armazena chaves no armazenamento de Blobs numa conta de armazenamento diferente da utilizada pelo ambiente de execução do Functions. A conta específica e o contentor usados são definidos por uma URL de assinatura de acesso partilhado (SAS) definida na configuração. Você deve manter a AzureWebJobsSecretStorageSas configuração quando a URL SAS for alterada.
Azure Key Vault keyvault Armazena chaves no cofre de chaves definido em AzureWebJobsSecretStorageKeyVaultUri.
Sistema de ficheiros files As chaves são mantidas no sistema de arquivos local, que é o padrão no Functions v1.x. O armazenamento em sistema de ficheiros não é recomendado.
Segredos de Kubernetes kubernetes Armazena chaves no conjunto de recursos em AzureWebJobsKubernetesSecretName. Suportado apenas quando seu aplicativo de função é implantado no Kubernetes. As Ferramentas Principais do Funções do Azure geram os valores automaticamente quando você as usa para implantar seu aplicativo em um cluster do Kubernetes. Segredos imutáveis não são suportados.
Segredos dos Aplicativos de Contêiner do Azure containerapps As chaves são armazenadas na loja de segredos Azure Container Apps, que é o sistema interno de gestão de segredos para Container Apps. Com suporte somente quando seu aplicativo de função é implantado em Aplicativos de Contêiner do Azure. Para mais informações, consulte Configurar a loja secreta Container Apps.

Quando usa o Key Vault para armazenamento de chaves, as definições da aplicação de que precisa dependem de como a aplicação se autentica no Key Vault: uma identidade gerida atribuída pelo sistema, uma identidade gerida atribuída pelo utilizador ou um registo da aplicação.

Nome de configuração Atribuído pelo sistema Atribuída pelo utilizador Registo de aplicações
AzureWebJobsSecretStorageKeyVaultUri Sim Sim Sim
AzureWebJobsSecretStorageKeyVaultClientId Não Sim Sim
AzureWebJobsSecretStorageKeyVaultClientSecret Não Não Sim
AzureWebJobsSecretStorageKeyVaultTenantId Não Não Sim

Importante

Os segredos não estão confinados a aplicações de funções individuais através da AzureWebJobsSecretStorageKeyVaultUri configuração. Se várias aplicações de função estiverem configuradas para usar o mesmo Cofre de Chaves, partilham os mesmos segredos, potencialmente levando a conflitos ou substituições de chaves. Para evitar comportamentos não intencionais, recomendamos que você use uma instância separada do Cofre de Chaves para cada aplicativo de função.

Endpoints de chamada com chaves de acesso

Pode chamar funções ativadas por HTTP usando uma URL que inclua o nome da função. Quando definir o nível de autorização de uma função para um valor diferente de anonymous, deve também fornecer uma chave de acesso no seu pedido. Pode incluir a chave de acesso no URL usando a ?code= cadeia de consulta ou no cabeçalho do pedido (x-functions-key). Para obter mais informações, consulte Autorização de chave de acesso.

Para aceder às APIs REST de tempo de execução (em /admin/), deve fornecer a chave mestra (_master) no cabeçalho do pedido x-functions-key. Pode desativar os endpoints administrativos ao definir a propriedade functionsRuntimeAdminIsolationEnabled do site.

Obtenha as teclas de acesso à sua função

Você pode obter chaves de função e host programaticamente usando estas APIs do Azure Resource Manager:

Para saber como chamar as APIs do Azure Resource Manager, consulte a referência da API REST do Azure.

Note

Quando implementar a aplicação de funções no Azure Container Apps e utilizar AzureWebJobsSecretStorageType=ContainerApps, tem de usar métodos específicos do Container Apps para obter as chaves de função. Para mais informações, consulte Gerir chaves de acesso na documentação de Aplicações de Contentor.

Use estes métodos para obter chaves de acesso sem usar as APIs REST.

  1. Inicie sessão no portal do Azure e depois procure e selecione Function App.

  2. Selecione o aplicativo de função com o qual deseja trabalhar.

  3. No menu à esquerda, expanda Funções e selecione Teclas do aplicativo.

    A página Chaves do aplicativo é exibida. Nesta página, são exibidas as chaves de anfitrião, que pode usar para aceder a qualquer função da aplicação. A chave do sistema também é exibida, o que dá a qualquer pessoa acesso em nível de administrador a todas as APIs de aplicativos funcionais.

Você também pode praticar o princípio do privilégio mínimo usando a chave para uma função específica. Pode obter teclas específicas de função na guia Teclas de Função de uma função específica acionada por HTTP.

Sugestão

Também pode obter chaves de acesso para as suas funções utilizando o comando Funções do Azure Core Tools func azure functionapp list-functions com a opção --show-keys. Para obter mais informações, consulte a referência das Ferramentas Principais do Funções do Azure.

Renovar ou criar chaves de acesso

Ao renovar ou criar seus valores de chave de acesso, você deve redistribuir manualmente os valores de chave atualizados para todos os clientes que chamam sua função.

Importante

Trate a chave mestra (_master) como uma credencial administrativa. Concede acesso administrativo, no plano de dados, à sua aplicação — incluindo, em aplicações com sistema de ficheiros gravável, a capacidade de implementar e executar código através das APIs REST em tempo de execução — por isso partilhe apenas com administradores de confiança, não com chamadores comuns. As chaves de host não são administrativas, mas cada uma autoriza chamadas para qualquer função da aplicação, por isso distribua-as cuidadosamente também.

Quando uma credencial for exposta, ou quando precisar de revogar o acesso de uma parte, rode explicitamente as chaves afetadas. Rodar uma chave individual é suficiente para revogar essa chave específica. Como referido no armazenamento de chaves de acesso, eliminar ou recriar uma função não roda as chaves armazenadas.

Você pode renovar chaves de função e host programaticamente ou criar novas usando estas APIs do Azure Resource Manager:

Para saber como chamar as APIs do Azure Resource Manager, consulte a referência da API REST do Azure.

Você pode usar esses métodos para obter chaves de acesso sem ter que criar manualmente chamadas para as APIs REST.

  1. Inicie sessão no portal do Azure e depois procure e selecione Function App.

  2. Selecione o aplicativo de função com o qual deseja trabalhar.

  3. No menu à esquerda, expanda Funções e selecione Teclas do aplicativo.

    A página Chaves do aplicativo é exibida. Nesta página, são exibidas as chaves de anfitrião, que pode usar para aceder a qualquer função da aplicação. A chave do sistema também é exibida, o que dá a qualquer pessoa acesso em nível de administrador a todas as APIs de aplicativos funcionais.

  4. Selecione Renovar valor da chave ao lado da chave que quer renovar, e depois selecione Renovar e guardar.

Você também pode renovar uma tecla de função na guia Teclas de função de uma função específica acionada por HTTP.

Excluir chaves de acesso

Você pode excluir chaves de função e host programaticamente usando estas APIs do Azure Resource Manager:

Para saber como chamar as APIs do Azure Resource Manager, consulte a referência da API REST do Azure.