Partilhar via


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

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.

  1. No portal do Azure, navegue até seu grupo de recursos e abra o aplicativo Função que você criou.
  2. No painel de navegação, selecione Autenticação e, em seguida, selecione Adicionar provedor de identidade no painel principal.
  3. Na página Adicionar um provedor de identidade, selecione Microsoft no menu suspenso Provedor de identidade.
  4. Selecione Adicionar.
  5. 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.
  6. 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).
  7. 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.

Captura de ecrã do portal do Azure a mostrar a página Autenticação de uma aplicação Função, com o nome da aplicação Função realçado no fornecedor de Identidade.

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.

Captura de tela do portal do Azure mostrando a página Expor uma API para um aplicativo de Função com o URI da ID do Aplicativo realçado.

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.

  1. Use o seguinte comando clone o projeto de exemplo:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. 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
    
  3. 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>
    
  4. Use o seguinte comando para empacotar seu aplicativo de exemplo:

    mvn clean package
    
  5. 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
    
  6. 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.
    

Próximos passos