Compartilhar via


Tutorial: Usar uma identidade gerenciada para invocar o Azure Functions em um aplicativo do Azure Spring Apps

Observação

Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.

O plano Standard de consumo 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 mais informações, confira Migrar o plano Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo se aplica ao: ✔️ nível Básico/Standard ✔️ nível Enterprise

Este artigo mostra como criar uma identidade gerenciada para um aplicativo hospedado nos Aplicativos Spring do Azure e usá-lo para invocar funções de gatilho por HTTP.

Tanto o Azure Functions quanto os Serviços de Aplicativo têm suporte interno para autenticação do Microsoft Entra. Ao usar esse recurso de autenticação integrado, juntamente com as Identidades Gerenciadas para Aplicativos Spring do Azure, você pode invocar os serviços RESTful usando a semântica OAuth moderna. Esse método não exige 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 contêiner lógico no qual os recursos do Azure são implantados e gerenciados. Use o comando a seguir para criar um grupo de recursos para conter um aplicativo de funções:

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ções

Para criar um aplicativo de funções, você deve primeiro criar uma conta de armazenamento de backup. Você pode usar o comando az storage account create.

Importante

Cada aplicativo de funções e a conta de armazenamento devem ter um nome exclusivo.

Use o comando a seguir para criar uma conta de armazenamento. Substitua <function-app-name> pelo nome do aplicativo de funções 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 comando a seguir para criar o aplicativo de funções:

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 hostNamesretornado, que está no formato https://<your-functionapp-name>.azurewebsites.net. Use esse valor na URL raiz do aplicativo de funções para testar o aplicativo de funções.

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é o grupo de recursos e abra o aplicativo de funções 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ásicos na página Adicionar um provedor de identidade defina Tipos de conta com suporte 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 é reiniciado e todas as solicitações subsequentes são solicitadas a entrar por meio do Microsoft Entra ID. Você pode testar se as solicitações não autenticadas estão sendo rejeitadas no momento com a URL raiz do aplicativo de funções (retornada na hostNames saída do comando az functionapp create). 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 de funções 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 de funções.

Captura de tela do portal do Azure mostrando a página Autenticação para um aplicativo de funções, com o nome do aplicativo de funções realçado no provedor 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ções com o URI da ID do Aplicativo realçado.

Crie uma função disparada por HTTP

Em um diretório local vazio, use os comandos a seguir para criar um aplicativo de funções e adicione uma função de gatilho por HTTP:

func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger

Por padrão, as funções usam a autenticação baseada em chave para proteger os pontos de extremidade HTTP. Para habilitar a autenticação do Microsoft Entra para proteger o acesso às funções, defina a chave authLevel para 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 em Proteção do Azure Functions.

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 de publicar deve listar a URL da função recém-criada, como mostrado na seguinte saída:

Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
    HttpTrigger - [httpTrigger]
        Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger

Crie uma instância de serviço e um aplicativos dos Aplicativos Spring do Azure

Use os comandos a seguir para adicionar a extensão spring e criar uma nova instância dos Aplicativos Spring do Azure:

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 parâmetro --assign-identity:

az spring app create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name "msiapp" \
    --assign-endpoint true \
    --assign-identity

Criar um aplicativo Spring Boot de exemplo para invocar a função

Esse exemplo invoca a função de gatilho por 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 clone de comando do 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 sua 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 para 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 comando a seguir para empacotar seu aplicativo de exemplo:

    mvn clean package
    
  5. Use o comando a seguir para implantar o aplicativo nos Aplicativos Spring do Azure:

    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 comando a seguir para acessar o ponto de extremidade público ou o teste de ponto de extremidade para testar o aplicativo:

    curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
    

    A mensagem a seguir será retornada no corpo da resposta.

    Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
    

Próximas etapas