分享方式:


教學課程:使用受控識別從 Azure Spring Apps 應用程式叫用 Azure Functions

注意

Azure Spring Apps 是 Azure Spring Cloud 服務的新名稱。 雖然服務有新的名稱,但是您暫時還是會在某些位置看到舊的名稱。我們正在致力更新螢幕擷取畫面、影片和圖表等資產。

本文適用於: ✔️ 基本/標準 ✔️ 企業

本文說明如何為 Azure Spring Apps 中的託管應用程式建立受控識別,並用它來叫用由 HTTP 觸發的函式。

Azure Functions 和應用程式服務都具有 Microsoft Entra 驗證的內建支援。 藉由運用此內建驗證功能以及 Azure Spring Apps 的受控識別,您可以使用新式 OAuth 語意來叫用 RESTful 服務。 這個方法不需要在程式碼中儲存秘密,並提供更細微的控制以控制外部資源的存取。

必要條件

建立資源群組

資源群組是在其中部署與管理 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 驗證,以存取您的函數應用程式。

  1. 在 Azure 入口網站中,瀏覽至您的資源群組,然後開啟您建立的函數應用程式。
  2. 在瀏覽窗格中,選取 [驗證],然後在主窗格上選取 [新增識別提供者]
  3. 在 [新增識別提供者] 頁面,從 [識別提供者] 下拉式選單中選取 [Microsoft]
  4. 選取 [新增]。
  5. 針對 [新增識別提供者] 頁面上的 [基本資料] 設定,請將 [支援的帳戶類型] 設定為 [任何 Microsoft Entra 目錄 - 多租用戶]
  6. 請將 [未經驗證的要求] 設定為 [HTTP 401 未經授權: 建議用於 API]。 此設定可確保拒絕所有未經驗證的要求 (401 回應)。
  7. 選取 [新增]。

新增設定之後,函數應用程式會重新啟動,並提示所有後續要求透過 Microsoft Entra ID 登入。 您可以使用函數應用程式的根 URL 來測試目前是否正在拒絕未經驗證的要求 (在 az functionapp create 命令的 hostNames 輸出中傳回)。 然後,系統應該會將您重新導向至組織的 Microsoft Entra 登入畫面。

您需要應用程式識別碼和應用程式識別碼 URI,以供稍後使用。 在 Azure 入口網站中,瀏覽至您建立的函數應用程式。

若要取得應用程式識別碼,請在瀏覽窗格中選取 [驗證],然後複製 [應用程式 (用戶端) 識別碼] 值,以取得包含函數應用程式名稱的識別提供者。

Azure 入口網站的螢幕擷取畫面,顯示函數應用程式的 [驗證] 頁面,其中函數應用程式名稱已在識別提供者中醒目提示。

若要取得應用程式識別碼 URI,請在瀏覽窗格中選取 [公開 API],然後複製 [應用程式識別碼 URI] 值。

Azure 入口網站的螢幕擷取畫面,顯示函數應用程式的 [公開 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 取得權杖一節。

  1. 使用下列命令複製範例專案:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. 在您的應用程式屬性中,使用下列命令指定您的函式 URI 和觸發程序名稱:

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. 若要使用 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>
    
  4. 使用下列命令來封裝範例應用程式:

    mvn clean package
    
  5. 使用下列命令將應用程式部署至 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. 使用下列命令來存取公用端點或測試端點以測試您的應用程式:

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

    回應本文中會傳回下列訊息。

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

下一步