Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo é a principal referência sobre como o Funções do Azure se liga a serviços remotos. Fornece orientações específicas baseadas no tipo de ligação e no método de autenticação.
Importante
Use identidades geridas com o Microsoft Entra ID sempre que possível. Este método de autenticação elimina segredos e oferece a maior segurança.
Categorias de conexão
As ligações Funções do Azure enquadram-se nestas categorias básicas:
- Anfitrião necessário: Ligações que o anfitrião das Funções precisa para operar, como armazenamento e monitorização.
- Bindings: Ligações que o host gere para os seus gatilhos e bindings.
- SDK do cliente: Ligações que cria e gere no seu próprio código de função.
Gorjeta
O Functions também suporta conectores geridos (em pré-visualização), que permitem ligar a serviços como Office 365, Teams e SharePoint com gestão OAuth e webhook integrada através de um Espaço de Nomes de Conectores. Para mais informações, consulte Usar conectores no Funções do Azure.
O anfitrião de Funções exige que a sua aplicação tenha estas ligações específicas nomeadas, que suportam tanto execuções de funções como registos:
AzureWebJobsStorage: O Functions utiliza esta conta de armazenamento predefinida para permitir funcionalidades essenciais, como coordenar a execução única dos disparadores de temporizador e o armazenamento predefinido das chaves de acesso da função. O host requer esta ligação a uma conta de armazenamento suportada. A tua aplicação de funções não consegue arrancar sem esta configuração de ligação. Para mais informações, consulte Considerações de armazenamento para Funções do Azure.APPLICATIONINSIGHTS_CONNECTION_STRING: Deve também configurar o host para escrever registos para uma instância do Application Insights.WEBSITE_AZUREFILESCONNECTIONSTRING: Usado apenas por aplicações que funcionam num plano Consumption ou Elastic Premium. Define a conta de armazenamento que contém a partilha Ficheiros do Azure que mantém o pacote de implementação da sua aplicação.
Métodos de autenticação
Importante
Quando possível, use identidades geridas para as suas ligações. Esta abordagem elimina completamente os segredos. Quando o serviço alvo não suporta autenticação Microsoft Entra ID, use o Azure Key Vault para gerir segredos centralmente. Use apenas segredos partilhados diretamente nas definições da aplicação como último recurso.
O Functions suporta estes métodos de autenticação ao ligar a serviços remotos:
| Método de autenticação | Segurança | Quando utilizar |
|---|---|---|
| Identidades administradas | Máximo | O serviço Target suporta o Microsoft Entra ID. Sem segredos para gerir. |
| Azure Key Vault | Alto | O serviço não suporta identidades geridas, ou então precisa de gestão centralizada de segredos com rotação. |
| Segredo partilhado | Baixo | Predefinição herdada. Migre para identidades geridas ou Key Vault o mais rapidamente possível. |
Escolha o seu método de autenticação preferido no topo do artigo para ver orientações detalhadas de configuração.
Definir ligações
Em tempo de execução, a sua aplicação de funções acede à informação de ligação como variáveis de ambiente a partir destas localizações:
| Meio Ambiente | Onde as definições são guardadas |
|---|---|
| Azure | Definições da aplicação (encriptadas em repouso) |
| Desenvolvimento local | local.settings.json (opcionalmente encriptado) |
Em ambos os ambientes, as definições são expostas ao teu código como variáveis de ambiente. As definições específicas de que precisa dependem tanto do tipo de ligação como do método de autenticação que escolher.
Quando usa autenticação Microsoft Entra para se ligar a um serviço Azure, as definições específicas da aplicação que utiliza dependem do serviço ligado e se está a usar uma identidade atribuída pelo sistema ou pelo utilizador para autenticar a ligação.
As identidades que usas para as tuas ligações devem ter permissões para realizar as ações pretendidas. Para a maioria dos serviços Azure, este requisito significa que precisa de atribuir um papel no Azure RBAC, usando funções incorporadas ou personalizadas que forneçam essas permissões. Para saber mais, consulte Conceder permissões a uma identidade.
Tenha estas considerações em mente ao utilizar ligações baseadas na identidade:
Numa aplicação alojada por Functions, as ligações baseadas em identidade utilizam uma identidade gerida. A identidade atribuída ao sistema, que é específica para a sua aplicação, é usada por defeito. No entanto, as identidades atribuídas pelo utilizador, que também requerem as propriedades
*__credentiale*__clientID, são mais flexíveis e recomendadas.Quando a sua aplicação corre noutros contextos, como desenvolvimento local, é usada a identidade do seu programador. Para mais informações, consulte o artigo sobre desenvolvimento local .
As ligações baseadas em identidade só são suportadas na versão 4.x e posteriores do runtime Functions. Se estiveres a correr uma aplicação C# antiga na versão 1.x do runtime de Funções, primeiro tens de migrar para a versão 4.x.
Pode configurar a sua aplicação de funções para usar uma identidade em vez de uma cadeia de ligação ao estabelecer ligação à conta de armazenamento predefinida (AzureWebJobsStorage) e a outras ligações exigidas pelo host.
O suporte de identidade gerida para AzureWebJobsStorage varia consoante o plano de alojamento:
| Plano de alojamento | MI para armazenamento do host | requisito do Ficheiros do Azure | Recommendation |
|---|---|---|---|
| Consumo Flexível | Suporte completo | Nenhum (sem Ficheiros do Azure) | Recomendado para MI |
| Dedicado (Serviço de Aplicativo) | Suporte completo | Nenhum (sem escalonamento dinâmico) | MI completo, sem necessidade de solução alternativa |
| Consumo | Blobs, filas, tabelas | Key Vault ou remover Ficheiros do Azure | Loja WEBSITE_AZUREFILESCONNECTIONSTRING no Key Vault |
| Elástico Premium | Blobs, filas, tabelas | Key Vault ou remover Ficheiros do Azure | Loja WEBSITE_AZUREFILESCONNECTIONSTRING no Key Vault |
Antes de usar identidades geridas para ligações exigidas pelo host, considere estas limitações:
Para os planos Consumption e Premium, implemente uma destas soluções alternativas para o Ficheiros do Azure:
- Armazena apenas a
WEBSITE_AZUREFILESCONNECTIONSTRINGcadeia de ligação no Key Vault, que é a opção mais segura a seguir. - Crie uma aplicação de plano Consumption ou Premium que funcione sem o Ficheiros do Azure. Existem impactos no desempenho ao correr sem o Ficheiros do Azure. Para mais informações, consulte Criar uma aplicação sem Ficheiros do Azure.
- Armazena apenas a
Estes gatilhos dependem de
AzureWebJobsStoragefuncionar corretamente:- Armazenamento de Blobs do Azure
- Hubs de Eventos do Azure
- Durable Functions (por predefinição)
- Timer
Se a sua aplicação usar alguma destas extensões, certifique-se de que a versão também suporta identidades geridas.
AzureWebJobsStoragemantém artefactos de implementação em compilações do lado do servidor (remotas) num plano de Consumo Linux. Neste cenário, deve implementar e executar a sua aplicação a partir de um pacote de implementação externo.Outros componentes da sua aplicação de funções podem reutilizar a ligação
AzureWebJobsStorage, incluindo extensões de associação ao armazenamento ou clientes de armazenamento criados com o SDK do Azure. Ao utilizar identidades geridas, crie novas definições de aplicação para estes componentes não anfitriões, mesmo quando suportam identidades geridas.
Estas definições específicas da aplicação definem ligações com base na identidade tanto a AzureWebJobsStorage como a APPLICATIONINSIGHTS_CONNECTION_STRING:
| Setting | Description |
|---|---|
AzureWebJobsStorage__blobServiceUri |
O URI para Armazenamento de Blobs na conta de armazenamento predefinida. Exigido para clouds soberanas ou um DNS de armazenamento personalizado, tais como: https://mystorageaccount.blob.contoso.com.
HTTPS é obrigatório. |
AzureWebJobsStorage__queueServiceUri |
O URI para o armazenamento de filas na conta de armazenamento predefinida. Exigido para clouds soberanas ou um DNS de armazenamento personalizado, tais como: https://mystorageaccount.queue.contoso.com.
HTTPS é obrigatório. |
AzureWebJobsStorage__tableServiceUri |
O URI do armazenamento de tabelas na conta de armazenamento predefinida. Exigido para clouds soberanas ou um DNS de armazenamento personalizado, tais como: https://mystorageaccount.table.contoso.com.
HTTPS é obrigatório. |
AzureWebJobsStorage__credential |
Defina como managedidentity para usar a autenticação de identidade gerida. Uma identidade gerida deve estar disponível no ambiente de alojamento. |
AzureWebJobsStorage__clientId ouAzureWebJobsStorage__managedIdentityResourceId |
Retorna uma identidade específica atribuída pelo utilizador utilizada para obter um token de acesso para autenticação de identidade gerida. Quando nenhuma delas está definida, é usada a identidade atribuída pelo sistema à aplicação. |
APPLICATIONINSIGHTS_AUTHENTICATION_STRING |
Permite ligações ao Application Insights através da autenticação Microsoft Entra. Definido para ( Authorization=AAD atribuído ao sistema) ou ClientId=<YOUR_CLIENT_ID>;Authorization=AAD (atribuído pelo utilizador). |
Como o valor do duplo sublinhado (__) é interpretado em tempo de execução como dois pontos (:), a série de definições é interpretada como propriedades do AzureWebJobsStorage objeto. Por exemplo, considere estas AzureWebJobsStorage definições de ligação:
AzureWebJobsStorage__blobServiceUri=https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.netAzureWebJobsStorage__queueServiceUri=https://<STORAGE_ACCOUNT_NAME>.queue.core.windows.netAzureWebJobsStorage__tableServiceUri=https://<STORAGE_ACCOUNT_NAME>.table.core.windows.netAzureWebJobsStorage__credential=managedidentityAzureWebJobsStorage__clientId=<MY_USER_ASSIGNED_IDENTITY_ID>
Em tempo de execução, o anfitrião interpreta estas definições como uma configuração complexa AzureWebJobsStorage .
"AzureWebJobsStorage":
{
"blobServiceUri": "https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.net",
"queueServiceUri": "https://<STORAGE_ACCOUNT_NAME>.queue.core.windows.net",
"tableServiceUri": "https://<STORAGE_ACCOUNT_NAME>.table.core.windows.net",
"credential": "managedidentity",
"clientId": "<MY_USER_ASSIGNED_IDENTITY_ID>"
}
Também deve conceder permissões para a identidade na conta de armazenamento predefinida, para que o anfitrião possa ligar-se com permissões suficientes para realizar as tarefas exigidas. Para saber como, consulte Conceder permissões a uma identidade.
Conceder permissões a uma identidade
Quando utiliza identidades geridas com autenticação Microsoft Entra ID, deve atribuir especificamente permissões à identidade que a sua aplicação utiliza ao fazer ligações ao serviço remoto. A forma mais fácil de conceder permissões de privilégio mínimo à sua aplicação é atribuindo funções incorporadas.
Tenha em mente estas recomendações ao conceder permissões RBAC às identidades da sua aplicação:
- Sempre que possível, cumpra o princípio do menor privilégio , concedendo à identidade apenas os privilégios mínimos exigidos. Por exemplo, se a aplicação só precisar de ler a partir de uma fonte de dados, use uma função que só tenha permissões de leitura e não de escrita de dados.
- Não uses funções amplas e integradas como o de Proprietário, mesmo que seja só para fazer a aplicação funcionar.
- Depois de criar ou modificar uma atribuição de funções, pode demorar até 10 minutos até a mudança se propagar. Durante este período, a sua função pode receber erros de autorização (403) mesmo que a função esteja corretamente atribuída. Se encontrar erros imediatamente após criar uma atribuição de funções, espere alguns minutos e tente novamente.
- Quando múltiplas ligações exigirem permissões para o mesmo serviço, use a função que corresponda ao subconjunto mínimo de permissões para todas as ligações a esse serviço.
- Várias associações exigem permissões mais amplas na sua conta de armazenamento do que as necessárias para a ligação
AzureWebJobsStorage. - Para aceder às chaves no Key Vault usando identidades geridas, atribua a tua aplicação ao papel de Utilizador do Key Vault Secrets. Também pode usar uma política de acesso ao Key Vault para atribuir à identidade gerida a permissão Obter segredos. Para mais informações, consulte conceder a uma identidade da sua aplicação acesso ao seu cofre de chaves.
- Este artigo refere-se apenas a funções incorporadas que fornecem permissões mínimas. Dependendo dos requisitos da tua aplicação, podes precisar de criar os teus próprios papéis personalizados.
As permissões de que precisa dependem do tipo de ligação:
AzureWebJobsStorage: O papel de Proprietário de Dados do Blob de Armazenamento fornece as permissões mínimas da conta de armazenamento para a ligação exigidaAzureWebJobsStoragepelo host. Este papel fornece o nível de acesso ao armazenamento que o anfitrião das Funções necessita, seguindo o princípio do privilégio mínimo.Para alguns tipos de problemas, as Funções podem gerar eventos de diagnóstico para ajudar na resolução de problemas, mesmo quando a sua aplicação não consegue arrancar. Também tem de adicionar a função Storage Table Data Contributor, que fornece acesso ao Armazenamento de Tabelas, onde esses eventos de diagnóstico são armazenados. Sem estas permissões extra, pode ver avisos nos seus registos sobre a impossibilidade de escrever estes eventos.
Várias outras associações podem exigir que utilizes uma função ligeiramente mais abrangente. A coluna Armazenamento Necessitado de Host da tabela no separador Bindings lista estes requisitos de função.
APPLICATIONINSIGHTS_AUTHENTICATION_STRING: A função Monitoring Metrics Publisher atribui as permissões mínimas de que o host necessita para estabelecer ligação ao Application Insights para fins de registo.
Nota
Ao usar APPLICATIONINSIGHTS_AUTHENTICATION_STRING para se conectar ao Application Insights usando a autenticação do Microsoft Entra, você também deve Desabilitar a autenticação local para o Application Insights. Esta configuração requer a autenticação Microsoft Entra para que a telemetria seja integrada no seu espaço de trabalho.
Nota
Use o Key Vault apenas para ligações que atualmente não suportam Microsoft Entra ID com identidades geridas pelo Azure.
Como alguns serviços ainda não suportam autenticação Microsoft Entra, a sua aplicação pode ainda exigir segredos em certos casos. Nestes casos, o Azure Key Vault pode ajudar a simplificar o ciclo de gestão da autenticação baseada em segredos. A sua aplicação pode usar o Key Vault para armazenar e aceder de forma mais segura a segredos partilhados, incluindo a cadeia de ligação padrão da conta de armazenamento. Embora as ligações continuem a usar segredos partilhados, o Key Vault oferece um nível superior de segurança para os seus segredos, incluindo manutenção e rotação de chaves. A sua aplicação pode ligar-se ao Key Vault usando identidades geridas, mesmo quando o próprio serviço ainda não suporta ligações baseadas em identidade gerida.
Quando utiliza o Key Vault, crie a definição da aplicação para a ligação com uma referência do Key Vault em vez do segredo real. Para mais informações, consulte as definições da aplicação Source no Key Vault.
Tenha estas considerações em mente ao manter ligações no Key Vault:
Para aceder às chaves no cofre, deve conceder uma identidade na sua aplicação para aceder ao seu cofre de chaves.
Pode usar o Key Vault para armazenar definições para as suas ligações geridas baseadas em identidade. Quando a sua aplicação utiliza o Key Vault, as referências devem usar um separador de chave de
:ou/, comoStorage1:blobServiceUri. Quando usas o delimitador de configuração de aplicação normal de__, os nomes das referências não se resolvem corretamente.
Pode configurar a definição AzureWebJobsStorage para devolver uma referência ao Key Vault com a cadeia de ligação, em vez de devolver a própria cadeia de ligação. Para saber como, consulte Usar referências do Key Vault como definições da aplicação.
O Ficheiros do Azure atualmente não suporta ligações de identidade geridas. Devido a esta limitação, utilize o Key Vault para proteger a configuração WEBSITE_AZUREFILESCONNECTIONSTRING, que é necessária para o dimensionamento dinâmico tanto no plano Consumption como no Premium. O plano Flex Consumption é também um plano dinâmico que não utiliza Ficheiros do Azure e suporta totalmente ligações de identidade geridas.
Atenção
Evite trabalhar diretamente com segredos partilhados. Sempre que possível, utilize um método de autenticação mais seguro para as suas ligações.
Mitigue os potenciais riscos negativos de segredos perdidos ou comprometidos utilizando identidades geridas com autenticação Microsoft Entra ID. Quando o serviço remoto não suporta identidades geridas, pelo menos use o Azure Key Vault, que mantém segredos partilhados de forma mais segura.
Se por algum motivo não conseguir usar um método de autenticação mais seguro, a plataforma encripta os dados nas definições da sua aplicação enquanto está em repouso. Migre as suas aplicações do uso de segredos partilhados para um método de autenticação mais seguro o mais rapidamente possível.
Defina a cadeia de ligação da conta de armazenamento por predefinição na definição AzureWebJobsStorage. Esta configuração é o comportamento de ligação padrão quando crias a tua aplicação de funções.
Gerir as ligações do cliente SDK
Quando crias as tuas próprias ligações ao SDK cliente em código de função, reutiliza sempre as instâncias do cliente entre invocações em vez de criar novas. Esta melhor prática em todos os planos de alojamento reduz a latência, evita o esgotamento dos sockets e melhora a eficiência dos recursos.
Reutilizar instâncias de cliente
Siga estas orientações ao utilizar um cliente específico de serviço numa aplicação Funções do Azure:
- Não cries um novo cliente com cada invocação de função.
- Crie um único cliente partilhado que cada invocação de função possa reutilizar.
- Considere criar um único cliente partilhado numa classe auxiliar se diferentes funções usarem o mesmo serviço.
A abordagem recomendada depende da tua linguagem:
Utilize a injeção de dependências para registar clientes singleton ou de âmbito.
Consulte exemplos de código cliente para padrões completos em cada linguagem.
Limites de ligação num plano de consumo
Nota
Os limites de ligação rígida descritos nesta secção aplicam-se apenas ao plano de Consumo legado. O plano Flex Consumption não é executado no mesmo ambiente de sandbox nem impõe esses limites. No entanto, continua a ser recomendado reutilizar os clientes em todos os planos para obter o melhor desempenho.
No plano de Consumo legado, as aplicações funcionais correm num ambiente sandbox que limita o número de ligações de saída a 600 ativas (1.200 no total) por instância. Quando atinge este limite, o anfitrião Functions escreve a seguinte mensagem nos logs: Host thresholds exceeded: Connections. Para obter mais informações, consulte os limites do serviço Funções.
Este limite é por exemplo. Quando o controlador de escala adiciona instâncias de aplicativo de função para lidar com mais solicitações, cada instância tem um limite de conexão independente. Isto significa que não há limite global de ligações, e podes ter mais de 600 ligações ativas em todas as instâncias ativas.
Ao resolver problemas de ligação, certifique-se de que o Application Insights está ativado para a sua aplicação funcional. O Application Insights permite visualizar métricas para seus aplicativos de função, como execuções. Para obter mais informações, consulte Exibir telemetria no Application Insights.
Exemplos de código de cliente
Esta seção demonstra as práticas recomendadas para criar e usar clientes a partir do seu código de função.
Pedidos HTTP
Registar um HttpClient partilhado usando injeção de dependências para que todas as invocações de funções reutilizem a mesma instância. Neste caso, não tens de eliminar o cliente porque o runtime gere a sua vida útil.
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace;
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddHttpClient();
}
}
Depois injeta IHttpClientFactory ou HttpClient na tua classe de função:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace MyNamespace;
public class MyFunction(HttpClient httpClient, ILogger<MyFunction> logger)
{
[Function("MyFunction")]
public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo timer)
{
var response = await httpClient.GetAsync("https://example.com");
logger.LogInformation("Response status: {Status}", response.StatusCode);
}
}
Azure Cosmos DB clients
Regista um CosmosClient único na tua startup para que todas as funções partilhem uma ligação. A documentação do Azure Cosmos DB recomenda que utilize um cliente singleton durante toda a vida útil da sua aplicação.
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace;
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton(_ =>
{
var connectionString = Environment.GetEnvironmentVariable("CosmosDBConnection");
return new CosmosClient(connectionString);
});
}
}
Depois injeta CosmosClient na tua classe de função:
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace MyNamespace;
public class MyCosmosFunction(CosmosClient cosmosClient, ILogger<MyCosmosFunction> logger)
{
private readonly Container _container = cosmosClient.GetContainer("mydb", "mycontainer");
[Function("MyCosmosFunction")]
public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo timer)
{
var item = new { id = "myId", partitionKey = "myPartitionKey", data = "example" };
await _container.UpsertItemAsync(item, new PartitionKey("myPartitionKey"));
logger.LogInformation("Item upserted");
}
}
Conexões SqlClient
Seu código de função pode usar o Provedor de Dados do .NET Framework para SQL Server (SqlClient) para fazer conexões com um banco de dados relacional SQL. Este fornecedor é também o fornecedor subjacente para frameworks de dados que dependem do ADO.NET, como o Entity Framework. Ao contrário das conexões HttpClient e DocumentClient , ADO.NET implementa o pool de conexões por padrão. Mas como você ainda pode ficar sem conexões, você deve otimizar as conexões com o banco de dados. Para obter mais informações, consulte Pool de conexões do SQL Server (ADO.NET).
Gorjeta
Algumas estruturas de dados, como o Entity Framework, normalmente obtêm cadeias de conexão da seção ConnectionStrings de um arquivo de configuração. Nesse caso, você deve adicionar explicitamente as cadeias de conexão do banco de dados SQL à coleção Connection strings das configurações do seu aplicativo de funções e no arquivo local.settings.json do seu projeto local. Se estiveres a criar uma instância de SqlConnection no teu código de função, guarda o valor da cadeia de ligação nas definições da aplicação com as tuas outras ligações.
Azure App Configuration
Azure App Configuration é um serviço Azure que pode usar para gerir centralmente as definições da aplicação. O App Configuration suporta pares hierárquicos chave-valor e versionamento, e integra-se com o Azure Key Vault para uma gestão de segredos mais segura. Para mais informações, veja O que é a Configuração de Aplicações Azure?
Para melhorar a segurança, a sua aplicação de funções utiliza identidades geridas com autenticação Microsoft Entra para aceder às definições numa Loja de Aplicações. Para mais informações, consulte Utilizar referências do App Configuration para o Funções do Azure.
Nota
Ao usar o Azure App Configuration para armazenar definições para ligações baseadas em identidade gerida, as referências devem usar um separador de chave de : ou / no formato <CONNECTION_NAME_PREFIX>:fullyQualifiedNamespace. Quando usas o delimitador de configuração de aplicação normal de __, os nomes das referências não se resolvem corretamente.
Conteúdo relacionado
Utilize conectores no Funções do Azure — Ligue-se a serviços como Office 365, Teams e SharePoint através de conectores geridos com OAuth incorporado e processamento de webhooks.
Para mais informações sobre por que motivo utilizar clientes estáticos, consulte Antipadrão de instanciação incorreta.
Para obter mais dicas de desempenho do Funções do Azure, consulte Otimizar o desempenho e a confiabilidade do Funções do Azure.