Samouczek: wywoływanie usługi Azure Functions z aplikacji Azure Spring Apps przy użyciu tożsamości zarządzanej

Uwaga

Azure Spring Apps to nowa nazwa usługi Azure Spring Cloud. Mimo że usługa ma nową nazwę, stara nazwa będzie widoczna w niektórych miejscach przez pewien czas, ponieważ pracujemy nad aktualizowaniem zasobów, takich jak zrzuty ekranu, filmy wideo i diagramy.

Ten artykuł dotyczy: ✔️ Podstawowa/Standardowa ✔️ Enterprise

W tym artykule pokazano, jak utworzyć tożsamość zarządzaną dla aplikacji hostowanej w usłudze Azure Spring Apps i użyć jej do wywoływania funkcji wyzwalanych przez protokół HTTP.

Usługi Azure Functions i App Services mają wbudowaną obsługę uwierzytelniania entra firmy Microsoft. Korzystając z tej wbudowanej funkcji uwierzytelniania wraz z tożsamościami zarządzanymi dla usługi Azure Spring Apps, można wywoływać usługi RESTful przy użyciu nowoczesnych semantyki OAuth. Ta metoda nie wymaga przechowywania wpisów tajnych w kodzie i zapewnia bardziej szczegółowe mechanizmy kontroli kontrolowania dostępu do zasobów zewnętrznych.

Wymagania wstępne

Tworzenie grupy zasobów

Grupa zasobów to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Użyj następującego polecenia, aby utworzyć grupę zasobów zawierającą aplikację funkcji:

az group create --name <resource-group-name> --location <location>

Aby uzyskać więcej informacji, zobacz polecenie az group create .

Tworzenie aplikacji funkcji

Aby utworzyć aplikację funkcji, musisz najpierw utworzyć konto magazynu kopii zapasowej. Możesz użyć polecenia az storage account create .

Ważne

Każda aplikacja funkcji i konto magazynu muszą mieć unikatową nazwę.

Użyj następującego polecenia, aby utworzyć konto magazynu. Zastąp <ciąg function-app-name> nazwą aplikacji funkcji i <nazwą konta magazynu nazwą> konta magazynu.

az storage account create \
    --resource-group <resource-group-name> \
    --name <storage-account-name> \
    --location <location> \
    --sku Standard_LRS

Po utworzeniu konta magazynu użyj następującego polecenia, aby utworzyć aplikację funkcji:

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

Zanotuj zwróconą hostNames wartość, która ma format https://<your-functionapp-name>.azurewebsites.net. Użyj tej wartości w głównym adresie URL aplikacji funkcji do testowania aplikacji funkcji.

Włączanie uwierzytelniania entra firmy Microsoft

Wykonaj poniższe kroki, aby włączyć uwierzytelnianie firmy Microsoft w celu uzyskania dostępu do aplikacji funkcji.

  1. W witrynie Azure Portal przejdź do grupy zasobów, a następnie otwórz utworzoną aplikację funkcji.

  2. W okienku nawigacji wybierz pozycję Uwierzytelnianie , a następnie wybierz pozycję Dodaj dostawcę tożsamości w okienku głównym.

  3. Na stronie Dodawanie dostawcy tożsamości wybierz pozycję Microsoft z menu rozwijanego Dostawca tożsamości.

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

  4. Wybierz Dodaj.

  5. W obszarze Ustawienia Podstawowe na stronie Dodawanie dostawcy tożsamości ustaw wartość Obsługiwane typy kont na Dowolny katalog firmy Microsoft Entra — wiele dzierżaw.

  6. Ustaw nieuwierzytelnione żądania na http 401 Brak autoryzacji: zalecane dla interfejsów API. To ustawienie gwarantuje, że wszystkie nieuwierzytelnione żądania zostaną odrzucone (401 odpowiedź).

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

  7. Wybierz Dodaj.

Po dodaniu ustawień aplikacja funkcji zostanie ponownie uruchomiona, a wszystkie kolejne żądania będą monitowane o zalogowanie się za pośrednictwem identyfikatora Entra firmy Microsoft. Możesz przetestować, że żądania nieuwierzytelnione są obecnie odrzucane przy użyciu głównego adresu URL aplikacji funkcji (zwróconego w hostNames danych wyjściowych az functionapp create polecenia). Następnie powinno nastąpić przekierowanie do ekranu logowania firmy Microsoft Entra w organizacji.

Do późniejszego użycia potrzebny jest identyfikator aplikacji i identyfikator URI identyfikatora aplikacji. W witrynie Azure Portal przejdź do utworzonej aplikacji funkcji.

Aby uzyskać identyfikator aplikacji, wybierz pozycję Uwierzytelnianie w okienku nawigacji, a następnie skopiuj wartość Identyfikator aplikacji (klienta) dostawcy tożsamości, który zawiera nazwę aplikacji funkcji.

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

Aby uzyskać identyfikator URI identyfikatora aplikacji, wybierz pozycję Uwidocznij interfejs API w okienku nawigacji, a następnie skopiuj wartość identyfikatora URI identyfikatora aplikacji.

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

Tworzenie funkcji wyzwalanej przez protokół HTTP

W pustym katalogu lokalnym użyj następujących poleceń, aby utworzyć nową aplikację funkcji i dodać funkcję wyzwalaną przez protokół HTTP:

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

Domyślnie funkcje używają uwierzytelniania opartego na kluczach do zabezpieczania punktów końcowych HTTP. Aby włączyć uwierzytelnianie Microsoft Entra w celu zabezpieczenia dostępu do funkcji, ustaw authLevel klucz na anonymous w pliku function.json , jak pokazano w poniższym przykładzie:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      ...
    }
  ]
}

Aby uzyskać więcej informacji, zobacz sekcję Zabezpieczanie punktu końcowego HTTP w środowisku produkcyjnym wyzwalacza HTTP usługi Azure Functions.

Użyj następującego polecenia, aby opublikować aplikację w wystąpieniu utworzonym w poprzednim kroku:

func azure functionapp publish <function-app-name>

Dane wyjściowe polecenia publikowania powinny zawierać adres URL nowo utworzonej funkcji, jak pokazano w następujących danych wyjściowych:

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

Tworzenie wystąpienia i aplikacji usługi Azure Spring Apps

Użyj następujących poleceń, aby dodać rozszerzenie spring i utworzyć nowe wystąpienie usługi 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>

Użyj następującego polecenia, aby utworzyć aplikację o nazwie msiapp z tożsamością zarządzaną przypisaną przez system zgodnie z żądaniem parametru --assign-identity :

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

Tworzenie przykładowej aplikacji Spring Boot w celu wywołania funkcji

Ten przykład wywołuje funkcję wyzwalaną przez protokół HTTP, najpierw żądając tokenu dostępu z punktu końcowego tożsamości usługi zarządzanej i używając tego tokenu do uwierzytelniania żądania HTTP funkcji. Aby uzyskać więcej informacji, zobacz sekcję Pobieranie tokenu przy użyciu protokołu HTTP w temacie How to use managed identities for Azure resources on an Azure VM to acquire an access token (Jak używać tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej platformy Azure w celu uzyskania tokenu dostępu).

  1. Użyj następującego polecenia sklonuj przykładowy projekt:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. Użyj następującego polecenia, aby określić identyfikator URI funkcji i nazwę wyzwalacza we właściwościach aplikacji:

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. Aby użyć tożsamości zarządzanej dla aplikacji usługi Azure Spring Apps, dodaj następujące właściwości z tymi wartościami do pliku 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. Użyj następującego polecenia, aby spakować przykładową aplikację:

    mvn clean package
    
  5. Użyj następującego polecenia, aby wdrożyć aplikację w usłudze 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. Użyj następującego polecenia, aby uzyskać dostęp do publicznego punktu końcowego lub testowego punktu końcowego w celu przetestowania aplikacji:

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

    W treści odpowiedzi zostanie zwrócony następujący komunikat.

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

Następne kroki