Compartilhar via


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

Observação

Azure Spring Apps é o novo nome do serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns locais por um tempo enquanto trabalhamos para atualizar ativos como capturas de tela, vídeos e diagramas.

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.

    Screenshot of the Azure portal showing the Add an identity provider page with Microsoft highlighted in the identity provider dropdown menu.

  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).

    Screenshot of the Azure portal showing the Add an identity provider page with Support account types and Unauthenticated requests highlighted.

  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.

Screenshot of the Azure portal showing the Authentication page for a Function app, with the Function app name highlighted in the Identity provider.

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.

Screenshot of the Azure portal showing the Expose an API page for a Function app with the Application ID URI highlighted.

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 Proteger um ponto de extremidade HTTP em produção de Azure Functions gatilho HTTP.

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