Samouczek: wywoływanie usługi Azure Functions z aplikacji Azure Spring Apps przy użyciu tożsamości zarządzanej
Uwaga
Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.
Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.
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
- Subskrypcja platformy Azure. Jeśli nie masz subskrypcji, przed rozpoczęciem utwórz bezpłatne konto .
- Interfejs wiersza polecenia platformy Azure w wersji 2.45.0 lub nowszej.
- Git.
- Apache Maven w wersji 3.0 lub nowszej.
- Zainstaluj narzędzia Azure Functions Core Tools w wersji 4.x.
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.
- W witrynie Azure Portal przejdź do grupy zasobów, a następnie otwórz utworzoną aplikację funkcji.
- W okienku nawigacji wybierz pozycję Uwierzytelnianie , a następnie wybierz pozycję Dodaj dostawcę tożsamości w okienku głównym.
- Na stronie Dodawanie dostawcy tożsamości wybierz pozycję Microsoft z menu rozwijanego Dostawca tożsamości.
- Wybierz Dodaj.
- 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.
- Ustaw nieuwierzytelnione żądania na http 401 Brak autoryzacji: zalecane dla interfejsów API. To ustawienie gwarantuje, że wszystkie nieuwierzytelnione żądania zostaną odrzucone (401 odpowiedź).
- 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.
Aby uzyskać identyfikator URI identyfikatora aplikacji, wybierz pozycję Uwidocznij interfejs API w okienku nawigacji, a następnie skopiuj wartość identyfikatora URI identyfikatora aplikacji.
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 punktów końcowych HTTP w temacie Zabezpieczanie 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).
Użyj następującego polecenia sklonuj przykładowy projekt:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
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
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>
Użyj następującego polecenia, aby spakować przykładową aplikację:
mvn clean package
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
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.