Share via


教學課程:使用受控識別和 SQL 繫結將函mgp 應用程式連線至 Azure SQL

Azure Functions 提供受控識別,這是用於保護 Azure SQL Database 和其他 Azure 服務存取權的周全解決方案。 受控識別可藉由從應用程式刪除祕密 (例如連接字串中的認證),讓應用程式更加安全。 在本教學課程中,您會將受控識別新增至利用 Azure SQL 繫結的 Azure Function。 待辦事項後端範例中提供具有 SQL 繫結的 Azure Function 專案範例。

當您完成本教學課程時,Azure Function 會連線到 Azure SQL 資料庫,而不需要使用者名稱和密碼。

您將採取的步驟概觀:

將資料庫存取權授與 Microsoft Entra 使用者

首先,將 Microsoft Entra 使用者指派為伺服器的 Active Directory 管理員,啟用對 SQL 資料庫的 Microsoft Entra 驗證。 此使用者與您用來註冊 Azure 訂用帳戶的 Microsoft 帳戶不同。 這必須是您已在 Microsoft Entra ID 中建立、匯入、同步處理或受邀加入的使用者。 若要進一步了解允許的 Microsoft Entra 使用者,請參閱 SQL Database 中的 Microsoft Entra 功能和限制

您可以透過 Azure 入口網站、PowerShell 或 Azure CLI 來完成啟用 Microsoft Entra 驗證。 Azure CLI 的指示如下,您可以在 Microsoft Entra 驗證的 Azure SQL 文件中取得透過 Azure 入口網站完成這項作業的資訊。

  1. 如果您的 Microsoft Entra 租用戶還沒有使用者,請依照使用 Microsoft Entra ID 新增或刪除使用者中的步驟建立一個。

  2. 使用 az ad user list 尋找 Microsoft Entra 使用者的物件識別碼,並取代 <user-principal-name>。 結果會儲存到變數中。

    針對 Azure CLI 2.37.0 和更新版本:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    針對舊版的 Azure CLI:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)
    

    提示

    若要在 Microsoft Entra 中查看所有使用者主體名稱的清單,請執行 az ad user list --query [].userPrincipalName

  3. 在 Cloud Shell 中使用 az sql server ad-admin create 命令,將此 Microsoft Entra 使用者新增為 Active Directory 管理員。 在下列命令中,將 <server-name> 取代為 伺服器名稱 (不含 .database.windows.net 尾碼)。

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

如需關於新增 Active Directory 管理員的詳細資訊,請參閱為伺服器佈建 Microsoft Entra 管理員

在 Azure Function 上啟用系統指派的受控識別

在此步驟中,我們會將系統指派的身分識別新增至 Azure Function。 在後續步驟中,此身分識別會獲得 SQL 資料庫的存取權。

若要在 Azure 入口網站中啟用系統指派的受控識別:

  1. 像平常一樣在入口網站中建立應用程式。 在入口網站中瀏覽至該應用程式。
  2. 在左側導覽中,向下捲動到 [設定] 群組。
  3. 選取 [身分識別]。
  4. 在 [系統指派] 索引標籤內,將 [狀態] 切換為 [開啟]。 按一下 [檔案] 。

Turn on system assigned identity for Function app

如需透過 Azure CLI 或 PowerShell 啟用系統指派受控識別的相關資訊,請參閱搭配使用受控識別與 Azure Functions 的詳細資訊。

提示

針對使用者指派的受控識別,切換至 [使用者指派] 索引標籤。按一下 [新增],然後選取受控識別。 如需如何建立使用者指派的受控識別的詳細資訊,請參閱管理使用者指派的受控識別

將 SQL Database 存取權授與受控識別

在此步驟中,我們將使用 Microsoft Entra 使用者帳戶連線到 SQL 資料庫,並將受控識別存取權授與資料庫。

  1. 開啟您慣用的 SQL 工具並使用 Microsoft Entra 使用者帳戶登入 (例如我們指派為系統管理員的 Microsoft Entra 使用者)。 這可以在 Cloud Shell 中使用 SQLCMD 命令完成。

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. 在您所需資料庫的 SQL 提示字元中執行下列命令,以授與您函數的權限。 例如,

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> 是 Microsoft Entra ID 中的受控識別名稱。 如果身分識別是由系統指派的,則名稱一律會與您函數應用程式名稱相同。

設定 Azure Function SQL 連接字串

在最後一個步驟中,我們將設定 Azure Function SQL 連接字串以使用 Microsoft Entra 受控識別驗證。

連接字串設定名稱會在函數程式碼中識別為繫結屬性「ConnectionStringSetting」,如 SQL 輸入繫結屬性和註釋所示。

在函數應用程式的應用程式設定中,應該更新 SQL 連接字串設定,以遵循下列格式:

Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Database=testdb

testdb 是我們要連線的資料庫名稱, demo.database.windows.net 是我們連線的伺服器名稱。

提示

如需使用者指派的受控識別,請使用Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; User Id=ClientIdOfManagedIdentity; Database=testdb

下一步