移轉應用程式對 Azure Blob 儲存體使用無密碼連線

您必須使用帳戶存取金鑰或無密碼連線等設定來驗證應用程式對 Azure 服務的要求。 不過,您應該盡可能在應用程式中排定無密碼連線的優先順序。 使用密碼或祕密金鑰的傳統驗證方法會產生安全性風險和複雜度。 請造訪 Azure 服務中樞的無密碼連線 (部分機器翻譯),以深入了解移至無密碼連線的優點。

下列教學課程說明如何將現有的應用程式移轉成使用無密碼連線。 不論您是使用存取金鑰、連接字串或其他秘密型的方式,這些相同的移轉步驟都應該適用。

設定角色和使用者以支援本機開發驗證

在本機開發時,請確定存取 Blob 資料的使用者帳戶具有正確的權限。 您需要儲存體 Blob 資料參與者才能讀取和寫入 Blob 資料。 若要指派此角色給您自己,您需要被指派使用者存取管理員角色,或另一個包含 Microsoft.Authorization/roleAssignments/write 動作的角色。 您可以使用 Azure 入口網站、Azure CLI 或 Azure PowerShell,將 Azure RBAC 角色指派給使用者。 您可以在範圍概觀頁面上深入了解角色指派的可用範圍。

在此案例中,您會將權限指派給使用者帳戶 (以儲存體帳戶為範圍),以遵循最低權限原則。 此做法只為使用者提供所需的最低權限,並建立更安全的實際執行環境。

下列範例將儲存體 Blob 資料參與者角色指派給使用者帳戶,以針對儲存體帳戶中的 Blob 資料提供讀取和寫入存取權。

重要

在大部分情況下,角色指派在 Azure 中傳播只需要一兩分鐘,但在罕見情況下,可能需要長達八分鐘。 如果您第一次執行程式碼時收到驗證錯誤,請稍候片刻再試一次。

  1. 在 Azure 入口網站中,使用主要搜尋列或左側導覽找出您的儲存體帳戶。

  2. 在儲存體帳戶概觀頁面上,從左側功能表中選取 [存取控制 (IAM)]

  3. 在 [存取控制 (IAM)] 頁面上,選取 [角色指派] 索引標籤。

  4. 從頂端功能表選取 [+ 新增],然後從產生的下拉功能表中選取 [新增角色指派]

    A screenshot showing how to assign a role.

  5. 使用搜尋方塊,從結果篩選出所需的角色。 在此範例中,搜尋「儲存體 Blob 資料參與者」,選取相符的結果,然後選擇 [下一步]

  6. 在 [存取權指派對象為] 下,選取 [使用者、群組或服務主體],然後選擇 [+ 選取成員]

  7. 在對話方塊中,搜尋 Microsoft Entra 使用者名稱 (通常是您的 user@domain 電子郵件地址),然後在對話方塊底部選擇 [選取]

  8. 選取 [檢閱 + 指派] 以移至最終頁面,然後再次選取 [檢閱 + 指派] 以完成此程序。

登入並將應用程式程式碼移轉為使用無密碼連線

針對本機開發,請確定使用您指派角色的相同 Microsoft Entra 帳戶進行驗證。 您可以透過 Azure CLI 或 Azure PowerShell 這類熱門開發工具來進行驗證。 您可以用來驗證的開發工具會因語言而異。

使用下列命令透過 Azure CLI 登入 Azure:

az login

接下來,將您的程式碼更新為使用無密碼連線。

  1. 若要在 .NET 應用程式中使用 DefaultAzureCredential,請安裝 Azure.Identity 套件:

    dotnet add package Azure.Identity
    
  2. 在檔案頂端,新增下列程式碼:

    using Azure.Identity;
    
  3. 在程式碼中找出哪些位置建立 BlobServiceClient 以連線至 Azure Blob 儲存體。 將程式碼更新為符合下列範例:

    DefaultAzureCredential credential = new();
    
    BlobServiceClient blobServiceClient = new(
        new Uri($"https://{storageAccountName}.blob.core.windows.net"),
        credential);
    
  1. 請務必在 BlobServiceClient 的 URI 中更新儲存體帳戶名稱。 您可以在 Azure 入口網站的概觀頁面上找到儲存體帳戶名稱。

    Screenshot showing how to find the storage account name.

在本機執行應用程式

完成這些程式碼變更之後,請在本機執行您的應用程式。 新的組態應該會挑選您的本機認證,例如 Azure CLI、Visual Studio 或 IntelliJ。 您在 Azure 中指派給本機開發使用者的角色可讓您的應用程式在本機連線至 Azure 服務。

設定 Azure 裝載環境

一旦您的應用程式設定為使用無密碼連線並在本機執行,相同的程式碼在部署至 Azure 之後就可以向 Azure 服務進行驗證。 下列各節說明如何設定已部署的應用程式,以使用受控識別來連線至 Azure Blob 儲存體。

建立受控識別

您可以使用 Azure 入口網站或 Azure CLI 來建立使用者指派的受控識別。 您的應用程式使用身分識別向其他服務進行驗證。

  1. 在 Azure 入口網站頂端,搜尋受控識別。 選取 [受控識別] 結果。
  2. 選取 [受控識別] 概觀頁面頂端的 [+ 建立]
  3. 在 [基本] 索引標籤上,輸入下列值:
    • 訂用帳戶:選取您想要的訂用帳戶。
    • 資源群組:選取您想要的資源群組。
    • 區域:選取靠近您所在位置的區域。
    • 名稱:輸入身分識別的可辨識名稱,例如 MigrationIdentity
  4. 選取頁面底部的 [檢閱 + 建立] 。
  5. 驗證檢查完成時,請選取 [建立]。 Azure 會建立新使用者指派的身分識別。

建立資源之後,請選取 [移至資源] 以檢視受控識別的詳細資料。

A screenshot showing how to create a user assigned managed identity.

將受控識別與您的 Web 應用程式相關聯

您需要將 Web 應用程式設定為使用您所建立的受控識別。 使用 Azure 入口網站或 Azure CLI,以將身分識別指派給應用程式。

完成 Azure 入口網站中的下列步驟,以將身分識別與您的應用程式相關聯。 這些相同的步驟適用於下列 Azure 服務:

  • Azure Spring Apps
  • Azure 容器應用程式
  • Azure 虛擬機器
  • Azure Kubernetes Service
  1. 導覽至您 Web 應用程式的概觀頁面。

  2. 從左側導覽中,選取 [身分識別]

  3. 在 [身分識別] 頁面上,切換至 [使用者指派] 索引標籤。

  4. 選取 [+ 新增],以開啟 [新增使用者指派的受控識別] 飛出視窗。

  5. 選取先前用來建立身分識別的訂用帳戶。

  6. 依名稱搜尋 MigrationIdentity,然後從搜尋結果中予以選取。

  7. 選取 [新增],以將身分識別與您的應用程式相關聯。

    Screenshot showing how to create a user assigned identity.

將角色指派給受控識別

接下來,必須授權您建立的受控識別來存取儲存體帳戶。 透過將角色指派給受控識別授與權限,就像指派給本機開發使用者一樣。

  1. 瀏覽至儲存體帳戶概觀頁面,然後從左側導覽中選取 [存取控制 (IAM)]

  2. 選擇 [新增角色指派]

    Screenshot showing how to add a role to a managed identity.

  3. 在 [角色] 搜尋方塊中,搜尋「儲存體 Blob 資料參與者」,此角色常用來管理 Blob 的資料作業。 根據您的使用案例,您可以指派任何適合的角色。 從清單中選取 [儲存體 Blob 資料參與者],然後選擇 [下一步]

  4. 在 [新增角色指派] 畫面上,針對 [存取權指派對象為] 選項,選取 [受控識別]。 然後選擇 [+選取成員]

  5. 在飛出視窗中,透過名稱和從結果中選取來搜尋您建立的受控識別。 選擇 [選取] 以關閉飛出視窗功能表。

    Screenshot showing how to select the assigned managed identity.

  6. 選取幾次 [下一步],直到能夠選取 [檢閱 + 指派] 來完成角色指派為止。

更新應用程式程式碼

您需要設定應用程式程式碼,以尋找您在部署至 Azure 時所建立的特定受控識別。 在某些情況下,明確設定應用程式的受控識別也會防止意外偵測到以及自動使用其他環境身分識別。

  1. 在受控識別概觀頁面上,將用戶端識別碼值複製至剪貼簿。

  2. 套用下列語言特定變更:

    建立 DefaultAzureCredentialOptions 物件,並將其傳遞給 DefaultAzureCredential。 將 ManagedIdentityClientId 屬性設定為用戶端識別碼。

    DefaultAzureCredential credential = new(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = managedIdentityClientId
        });
    
  3. 在進行這項變更之後,將您的程式碼重新部署至 Azure,以套用設定更新。

測試應用程式

部署已變更的程式碼之後,請在瀏覽器中瀏覽至您的託管應用程式。 您的應用程式應該能夠成功連線到儲存體帳戶。 請記住,角色指派可能需要幾分鐘才會傳播到整個 Azure 環境。 您的應用程式現在已設定為在本機和實際執行環境中執行,而不需要開發人員管理應用程式本身的秘密。

下一步

在本教學課程中,您已了解如何將應用程式移轉為無密碼連線。

您可以閱讀下列資源,以更深入探索本文所討論的概念: