Tutorial: Usar uma identidade gerenciada para invocar o Azure Functions de um aplicativo do Azure Spring Apps
Nota
Os planos Basic, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de aposentadoria de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.
O plano de consumo padrão e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.
Este artigo aplica-se a: ✔️ Basic/Standard ✔️ Enterprise
Este artigo mostra como criar uma identidade gerenciada para um aplicativo hospedado no Azure Spring Apps e usá-la para invocar funções acionadas por HTTP.
Tanto o Azure Functions quanto os Serviços de Aplicativo têm suporte interno para a autenticação do Microsoft Entra. Usando esse recurso de autenticação interno junto com Identidades Gerenciadas para Aplicativos Spring do Azure, você pode invocar serviços RESTful usando semântica OAuth moderna. Esse método não requer o armazenamento de segredos no código e fornece controles mais granulares para controlar o acesso a recursos externos.
Pré-requisitos
- Uma subscrição do Azure. Se você não tiver uma assinatura, crie uma conta gratuita antes de começar.
- Azure CLI versão 2.45.0 ou superior.
- Git.
- Apache Maven versão 3.0 ou superior.
- Instale as Ferramentas Principais do Azure Functions versão 4.x.
Criar um grupo de recursos
Um grupo de recursos é um contentor lógico no qual os recursos do Azure são implementados e geridos. Use o seguinte comando para criar um grupo de recursos para conter um aplicativo Function:
az group create --name <resource-group-name> --location <location>
Para obter mais informações, consulte o comando az group create .
Criar um aplicativo de função
Para criar um aplicativo Function, você deve primeiro criar uma conta de armazenamento de backup. Você pode usar o comando az storage account create .
Importante
Cada aplicativo Function e conta de armazenamento deve ter um nome exclusivo.
Use o comando a seguir para criar a conta de armazenamento. Substitua function-app-name> pelo nome do seu aplicativo Function e <storage-account-name> pelo nome da sua conta de armazenamento.<
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location> \
--sku Standard_LRS
Depois que a conta de armazenamento for criada, use o seguinte comando para criar o aplicativo Function:
az functionapp create \
--resource-group <resource-group-name> \
--name <function-app-name> \
--consumption-plan-location <location> \
--os-type windows \
--runtime node \
--storage-account <storage-account-name> \
--functions-version 4
Anote o valor retornado hostNames
, que está no formato https://<your-functionapp-name>.azurewebsites.net
. Use esse valor na URL raiz do aplicativo Function para testar o aplicativo Function.
Habilitar a autenticação do Microsoft Entra
Use as etapas a seguir para habilitar a autenticação do Microsoft Entra para acessar seu aplicativo Function.
- No portal do Azure, navegue até seu grupo de recursos e abra o aplicativo Função que você criou.
- No painel de navegação, selecione Autenticação e, em seguida, selecione Adicionar provedor de identidade no painel principal.
- Na página Adicionar um provedor de identidade, selecione Microsoft no menu suspenso Provedor de identidade.
- Selecione Adicionar.
- Para as configurações básicas na página Adicionar um provedor de identidade, defina Tipos de conta suportados como Qualquer diretório do Microsoft Entra - Multilocatário.
- Defina solicitações não autenticadas como HTTP 401 Não autorizado: recomendado para APIs. Essa configuração garante que todas as solicitações não autenticadas sejam negadas (resposta 401).
- Selecione Adicionar.
Depois de adicionar as configurações, o aplicativo Função será reiniciado e todas as solicitações subsequentes serão solicitadas a entrar por meio da ID do Microsoft Entra. Você pode testar se as solicitações não autenticadas estão sendo rejeitadas no momento com a URL raiz do aplicativo Function (retornada na hostNames
saída do az functionapp create
comando). Em seguida, você deve ser redirecionado para a tela de entrada do Microsoft Entra da sua organização.
Você precisa da ID do Aplicativo e do URI da ID do Aplicativo para uso posterior. No portal do Azure, navegue até o aplicativo Função que você criou.
Para obter a ID do aplicativo, selecione Autenticação no painel de navegação e copie o valor da ID do aplicativo (cliente) para o provedor de identidade que inclui o nome do aplicativo Função.
Para obter o URI da ID do Aplicativo, selecione Expor uma API no painel de navegação e copie o valor do URI da ID do Aplicativo.
Criar uma função acionada por HTTP
Em um diretório local vazio, use os seguintes comandos para criar um novo aplicativo de função e adicionar uma função acionada por HTTP:
func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger
Por padrão, as funções usam autenticação baseada em chave para proteger pontos de extremidade HTTP. Para habilitar a autenticação do Microsoft Entra para proteger o acesso às funções, defina a authLevel
chave como anonymous
no arquivo function.json , conforme mostrado no exemplo a seguir:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...
}
]
}
Para obter mais informações, consulte a seção Pontos de extremidade HTTP seguros de Protegendo funções do Azure.
Use o seguinte comando para publicar o aplicativo na instância criada na etapa anterior:
func azure functionapp publish <function-app-name>
A saída do comando publish deve listar a URL para sua função recém-criada, conforme mostrado na saída a seguir:
Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
HttpTrigger - [httpTrigger]
Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger
Criar uma instância de serviço e um aplicativo do Azure Spring Apps
Use os seguintes comandos para adicionar a extensão spring e criar uma nova instância do Azure Spring Apps:
az extension add --upgrade --name spring
az spring create \
--resource-group <resource-group-name> \
--name <Azure-Spring-Apps-instance-name> \
--location <location>
Use o comando a seguir para criar um aplicativo nomeado msiapp
com uma identidade gerenciada atribuída ao sistema, conforme solicitado pelo --assign-identity
parâmetro:
az spring app create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name "msiapp" \
--assign-endpoint true \
--assign-identity
Crie um aplicativo Spring Boot de exemplo para invocar a função
Este exemplo invoca a função acionada HTTP solicitando primeiro um token de acesso do ponto de extremidade MSI e usando esse token para autenticar a solicitação HTTP da função. Para obter mais informações, consulte a seção Obter um token usando HTTP de Como usar identidades gerenciadas para recursos do Azure em uma VM do Azure para adquirir um token de acesso.
Use o seguinte comando clone o projeto de exemplo:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
Use o seguinte comando para especificar o URI da função e o nome do gatilho nas propriedades do aplicativo:
cd azure-spring-apps-samples/managed-identity-function vim src/main/resources/application.properties
Para usar a identidade gerenciada para aplicativos do Azure Spring Apps, adicione as seguintes propriedades com esses valores a src/main/resources/application.properties.
azure.function.uri=https://<function-app-name>.azurewebsites.net azure.function.triggerPath=httptrigger azure.function.application-id.uri=<function-app-application-ID-uri>
Use o seguinte comando para empacotar seu aplicativo de exemplo:
mvn clean package
Use o seguinte comando para implantar o aplicativo no Azure Spring Apps:
az spring app deploy \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --name "msiapp" \ --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
Use o seguinte comando para acessar o ponto de extremidade público ou o ponto de extremidade de teste para testar seu aplicativo:
curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
A mensagem a seguir é retornada no corpo da resposta.
Function Response: Hello, springcloud. This HTTP triggered function executed successfully.