教學課程:使用受控識別從 Azure Spring Apps 應用程式叫用 Azure Functions
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於:✅ 基本/標準 ✅ 企業
本文說明如何為 Azure Spring Apps 中的託管應用程式建立受控識別,並用它來叫用由 HTTP 觸發的函式。
Azure Functions 和應用程式服務都具有 Microsoft Entra 驗證的內建支援。 藉由運用此內建驗證功能以及 Azure Spring Apps 的受控識別,您可以使用新式 OAuth 語意來叫用 RESTful 服務。 這個方法不需要在程式碼中儲存秘密,並提供更細微的控制以控制外部資源的存取。
必要條件
- Azure 訂用帳戶。 如果您沒有訂用帳戶,請先建立免費帳戶,再開始操作。
- Azure CLI 2.45.0 版或更新版本。
- Git。
- Apache Maven 3.0 版或更高版本。
- 安裝 Azure Functions Core Tools 4.0 版。
建立資源群組
資源群組是在其中部署與管理 Azure 資源的邏輯容器。 使用下列命令建立資源群組,以包含函數應用程式:
az group create --name <resource-group-name> --location <location>
如需詳細資訊,請參閱 az group create 命令。
建立函數應用程式
若要建立函數應用程式,您必須先建立支援儲存體帳戶。 您可以使用 az storage account create 命令。
重要
每個函數應用程式和儲存體帳戶都必須有唯一的名稱。
使用以下命令以建立儲存體帳戶。 以您的函數應用程式名稱取代 <function-app-name>,並以您的儲存體帳戶名稱取代 <storage-account-name>。
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location> \
--sku Standard_LRS
建立記憶體帳戶之後,請使用下列命令來建立函數應用程式:
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
記下傳回的 hostNames
值,格式如 https://<your-functionapp-name>.azurewebsites.net
。 在函數應用程式的根 URL 中,使用此值來測試函數應用程式。
啟用 Microsoft Entra 驗證
使用下列步驟啟用 Microsoft Entra 驗證,以存取您的函數應用程式。
- 在 Azure 入口網站中,瀏覽至您的資源群組,然後開啟您建立的函數應用程式。
- 在瀏覽窗格中,選取 [驗證],然後在主窗格上選取 [新增識別提供者]。
- 在 [新增識別提供者] 頁面,從 [識別提供者] 下拉式選單中選取 [Microsoft]。
- 選取 [新增]。
- 針對 [新增識別提供者] 頁面上的 [基本資料] 設定,請將 [支援的帳戶類型] 設定為 [任何 Microsoft Entra 目錄 - 多租用戶]。
- 請將 [未經驗證的要求] 設定為 [HTTP 401 未經授權: 建議用於 API]。 此設定可確保拒絕所有未經驗證的要求 (401 回應)。
- 選取 [新增]。
新增設定之後,函數應用程式會重新啟動,並提示所有後續要求透過 Microsoft Entra ID 登入。 您可以使用函數應用程式的根 URL 來測試目前是否正在拒絕未經驗證的要求 (在 az functionapp create
命令的 hostNames
輸出中傳回)。 然後,系統應該會將您重新導向至組織的 Microsoft Entra 登入畫面。
您需要應用程式識別碼和應用程式識別碼 URI,以供稍後使用。 在 Azure 入口網站中,瀏覽至您建立的函數應用程式。
若要取得應用程式識別碼,請在瀏覽窗格中選取 [驗證],然後複製 [應用程式 (用戶端) 識別碼] 值,以取得包含函數應用程式名稱的識別提供者。
若要取得應用程式識別碼 URI,請在瀏覽窗格中選取 [公開 API],然後複製 [應用程式識別碼 URI] 值。
建立由 HTTP 觸發的函式
在空白本機目錄中,使用下列命令建立新的函數應用程式,並新增由 HTTP 觸發的函式:
func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger
根據預設,函式會使用以金鑰為基礎的驗證來保護 HTTP 端點。 若要啟用 Microsoft Entra 驗證來保護函式的存取權,請將 authLevel
金鑰設定為 function.json 檔案中的 anonymous
,如下列範例所示:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...
}
]
}
如需詳細資訊,請參閱保護 Azure Functions 的安全 HTTP 端點一節。
使用下列命令將應用程式發佈至在上一個步驟中建立的執行個體:
func azure functionapp publish <function-app-name>
發佈命令的輸出應該會列出新建立函式的 URL,如以下輸出所示:
Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
HttpTrigger - [httpTrigger]
Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger
建立 Azure Spring Apps 服務執行個體和應用程式
使用下列命令新增 spring 延伸模組,並建立 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>
依 --assign-identity
參數的要求,使用下列命令建立具有系統指派的受控識別且名為 msiapp
的應用程式:
az spring app create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name "msiapp" \
--assign-endpoint true \
--assign-identity
建立範例 Spring Boot 應用程式以叫用函式
此範例會先從 MSI 端點要求存取權杖,然後使用該權杖來驗證函式 HTTP 要求,藉此叫用由 HTTP 觸發的函式。 如需詳細資訊,請參閱如何在 Azure VM 上使用 Azure 資源受控識別以取得存取權杖的使用 HTTP 取得權杖一節。
使用下列命令複製範例專案:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
在您的應用程式屬性中,使用下列命令指定您的函式 URI 和觸發程序名稱:
cd azure-spring-apps-samples/managed-identity-function vim src/main/resources/application.properties
若要使用 Azure Spring Apps 應用程式的受控識別,請將下列具有這些值的屬性新增至 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>
使用下列命令來封裝範例應用程式:
mvn clean package
使用下列命令將應用程式部署至 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
使用下列命令來存取公用端點或測試端點以測試您的應用程式:
curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
回應本文中會傳回下列訊息。
Function Response: Hello, springcloud. This HTTP triggered function executed successfully.