共用方式為


使用受控識別來存取應用程式組態

Microsoft Entra 受控識別可協助您簡化雲端應用程式的祕密管理。 透過受控識別,您的程式碼便可使用為服務主體執行所在的 Azure 服務所建立的服務主體。 您會使用受控識別,而不是使用儲存在 Azure Key Vault 中的個別認證或本機連接字串。

Azure 應用程式組態及其 .NET、.NET Framework 和 Java Spring 用戶端程式庫皆有內建的受控識別支援。 雖然您不一定要使用此功能,但受控識別可讓您不再需要含有祕密的存取權杖。 您的程式碼可以只使用服務端點來存取應用程式組態存放區。 您可將此 URL 直接內嵌在程式碼中,無須暴露任何祕密。

本文會示範如何運用受控識別來存取應用程式組態。 本文會以快速入門中介紹的 Web 應用程式作為基礎。 繼續進行之前,請先建立具有 Azure 應用程式組態的 ASP.NET Core 應用程式

本文會示範如何運用受控識別來存取應用程式組態。 本文會以快速入門中介紹的 Web 應用程式作為基礎。 繼續之前,請先建立具有 Azure 應用程式組態的 Java Spring 應用程式

重要

受控識別無法用來驗證在本機執行的應用程式。 您的應用程式必須部署至支援受控識別的 Azure 服務。 本文使用 Azure App Service 作為範例。 不過,相同的概念適用於任何其他支援受控識別的 Azure 服務。 例如,Azure Kubernetes ServiceAzure 虛擬機器Azure 容器執行個體。 如果工作負載裝載於其中一個服務中,您也可以利用服務的受控識別支援。

您可以使用任何程式碼編輯器來進行本教學課程中的步驟。 Windows、macOS 及 Linux 平台上都有提供的 Visual Studio Code 是一個絕佳的選項。

在本文中,您將學會如何:

  • 授與「應用程式組態」的受控識別存取權。
  • 設定讓應用程式在您連線到「應用程式組態」時使用受控識別。

必要條件

若要完成本教學課程,您必須具備:

如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶

新增受控識別

若要在入口網站中設定受控身分識別,您需先建立應用程式,然後再啟用此功能。

  1. Azure 入口網站中存取您的 App Service 資源。 如果您沒有現有的應用程式服務資源可供使用,請建立一個。

  2. 在左側窗格中,向下捲動到 [設定] 群組,然後選取 [身分識別]

  3. 在 [系統指派] 索引標籤上,將 [狀態] 切換成 [開啟],然後選取 [儲存]

  4. 出現提示時,請回答 [是] 以開啟系統指派的受控識別。

    如何在 App Service 中新增受控識別的螢幕擷取畫面。

授與應用程式設定的存取權

下列步驟說明如何將應用程式組態資料讀者角色指派給 App Service。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

  1. Azure 入口網站中,選取您的應用程式組態存放區。

  2. 選取 [存取控制 (IAM)]。

  3. 選取 [新增>][新增角色指派]。

    顯示存取控制 (IAM) 頁面 (其中已開啟 [新增角色指派] 功能表) 的螢幕擷取畫面。

    若您沒有指派角色的權限,則 [新增角色指派] 選項將會停用。 如需詳細資訊,請參閱 Azure 內建角色

  4. 在 [角色] 索引標籤上,選取 [應用程式組態資料讀者] 角色,然後選取 [下一步]

    顯示 [新增角色指派] 頁面 (其中已選取 [角色] 索引標籤) 的螢幕擷取畫面。

  5. 在 [成員] 索引標籤上,選取 [受控識別],然後選取 [選取成員]

    顯示 [新增角色指派] 頁面 (其中已選取 [成員] 索引標籤) 的螢幕擷取畫面。

  6. 選取您的 Azure 訂閱,針對 [受控識別] 選取 [App Service],然後選取您的 App Service 名稱。

    顯示選取受控識別頁面的螢幕擷取畫面。

  7. 在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。

建立受控識別

  1. 將參考新增至 Azure.Identity 套件:

    dotnet add package Azure.Identity
    
  2. 尋找應用程式組態存放區的端點。 此 URL 會列在 Azure 入口網站中該存放區的 [存取金鑰] 索引標籤上。

  3. 開啟 appsettings.json 檔案,然後新增下列指令碼。 以您應用程式組態存放區的 URL 取代 <service_endpoint> (包括括弧)。

    "AppConfig": {
        "Endpoint": "<service_endpoint>"
    }
    
  4. 開啟 Program.cs 檔案,並加入 Azure.Identity 命名空間的參考:

    using Azure.Identity;
    
  5. 若要存取儲存在應用程式組態中的值,請更新 Builder 組態以使用 AddAzureAppConfiguration() 方法。

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
        options.Connect(
            new Uri(builder.Configuration["AppConfig:Endpoint"]),
            new ManagedIdentityCredential()));
    

    注意

    如果您想要使用使用者指派的受控識別,請務必在建立 ManagedIdentityCredential 時指定 clientId

    new ManagedIdentityCredential("<your_clientId>")
    

    Azure 資源受控識別常見問題集中所述,有一種預設方式可解析所使用的受控識別。 在此情況下,Azure 身分識別程式庫會強制您指定所需的身分識別,以避免未來可能發生的執行階段問題。 例如,如果已新增使用者指派的受控識別,或已啟用系統指派的受控識別。 因此,即使只定義一個使用者指派的受控識別,且沒有系統指派的受控識別,您也需指定 clientId

  1. 尋找應用程式組態存放區的端點。 此 URL 會列在 Azure 入口網站中該存放區的 [概觀] 索引標籤上。

  2. 開啟 bootstrap.properties,移除連接字串屬性並將它取代為系統指派的身分識別端點:

spring.cloud.azure.appconfiguration.stores[0].endpoint=<service_endpoint>

若為使用者指派的身分識別:

spring.cloud.azure.appconfiguration.stores[0].endpoint=<service_endpoint>
spring.cloud.azure.credential.managed-identity-enabled= true
spring.cloud.azure.credential.client-id= <client_id>

注意

如需詳細資訊,請參閱 Spring Cloud Azure 驗證

部署應用程式

當您使用受控識別時,必須將您的應用程式部署至 Azure 服務。 受控識別無法用於驗證在本機執行的應用程式。 若要部署您在建立具有應用程式組態的 ASP.NET Core 應用程式快速入門中建立的 .NET Core 應用程式,並修改為使用受控識別,請遵循發佈 Web 應用程式中的指引。

使用受控識別需要您將應用程式部署至 Azure 服務。 受控識別無法用於驗證在本機執行的應用程式。 若要部署您在使用 Azure 應用程式組態建立 Java Spring 應用程式快速入門中建立的 Spring 應用程式,並修改為使用受控識別,請遵循發佈 Web 應用程式中的指引。

除了 App Service之外,許多其他 Azure 服務均支援受控識別。 如需詳細資訊,請參閱支援適用於 Azure 資源受控識別的服務

清除資源

如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。

重要

刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。

  1. 登入 Azure 入口網站,然後選取 [資源群組]
  2. 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
  3. 在結果清單中,選取資源群組名稱以查看概觀。
  4. 選取 [刪除資源群組]
  5. 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]

不久後,系統便會刪除該資源群組及其所有的資源。

下一步

在本教學課程中,您已新增 Azure 受控識別來簡化對應用程式組態的存取,並改善了應用程式的認證管理。 若要深入了解「應用程式組態」的使用方式,請繼續進行 Azure CLI 範例。