共用方式為


使用 Microsoft Entra ID 來驗證是否能使用「適用於 PostgreSQL 的 Azure 資料庫」

在本文中,您將設定 Microsoft Entra ID 存取權以驗證是否能使用「適用於 PostgreSQL 的 Azure 資料庫」。 您也會了解如何對「適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器」執行個體使用 Microsoft Entra 權杖。

您可以在伺服器配置過程中或稍後,為在 Azure Database for PostgreSQL 上的彈性伺服器設定 Microsoft Entra 驗證。 只有 Microsoft Entra 管理員使用者可以針對 Microsoft Entra ID 型驗證來建立或啟用使用者。 請勿將 Microsoft Entra 管理員用於一般資料庫操作,因為該角色具有更高的使用者權限(例如:CREATEDB)。

您可以有多個 Microsoft Entra 系統管理員使用者使用 Azure Database for PostgreSQL。 Microsoft Entra 管理員使用者可以是使用者、群組或服務主體。

先決條件

設定網路需求

Microsoft Entra ID 是多租用戶應用程式。 它需要輸出連線才能進行新增 Microsoft Entra 系統管理員群組等作業。

網路需求因拓撲而異:

  • 公用存取 (允許的 IP 位址):不需要額外的輸出規則。
  • 專用存取 (虛擬網路整合):
    • 新增輸出 NSG 規則,只允許流量至 AzureActiveDirectory 服務標籤。
    • 如果您使用路由表,請新增目的地為 AzureActiveDirectory 且下一個躍點為 Internet 的路由。
    • 如果您使用 Proxy,請只允許 HTTPS 流量流向 AzureActiveDirectory 服務標籤。
  • 自訂 DNS
    • 請確保下列主機名稱能公開解析:login.microsoftonline.com(驗證)和graph.microsoft.com(Microsoft Graph API)。
    • 如果解析失敗,系統管理員指派和權杖取得作業會失敗。

若要在佈建伺服器期間設定 Microsoft Entra 管理員,請遵循下列步驟:

  1. 在 Azure 入口網站中,於佈建伺服器期間,選取 [PostgreSQL 和 Microsoft Entra 驗證] 或 [僅 Microsoft Entra 驗證] 作為驗證方法。
  2. 在 [設定管理員] 索引標籤上,選取客戶租用戶中有效的 Microsoft Entra 使用者、群組、服務主體或受控識別作為 Microsoft Entra 管理員。

如果您偏好使用 PostgreSQL 和 Microsoft Entra 驗證方法,也可以選擇性地新增本機 PostgreSQL 管理員帳戶。

備註

在伺服器佈建期間,您只能新增一個 Microsoft Entra 系統管理員。 您可以在建立伺服器之後新增多個 Microsoft Entra 系統管理員使用者。

若要在伺服器建立之後設定 Microsoft Entra 管理員,請遵循下列步驟:

  1. 在 Azure 入口網站中,選取您想要為 Microsoft Entra ID 啟用的適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。
  2. 在 [安全性] 底下,選取 [驗證]。 然後根據您的需求,選擇 PostgreSQL 和 Microsoft Entra 驗證僅限 Microsoft Entra 驗證作為驗證方法。
  3. 選取 [新增 Microsoft Entra 管理員]。 然後選取客戶租用戶中有效的 Microsoft Entra 使用者、群組、服務主體或受控識別作為 Microsoft Entra 管理員。
  4. 選取 [儲存]。

這很重要

設定系統管理員時,會將具有完整系統管理員權限的新使用者新增至適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。

使用 Microsoft Entra ID 連線到適用於 PostgreSQL 的 Azure 資料庫

Microsoft Entra ID 整合可與標準 PostgreSQL 工具搭配運作 (例如 psql),但 Microsoft Entra 無法感知 psql,且在連線到 PostgreSQL 時僅支援指定使用者名稱和密碼。

我們測試了以下客戶:

  • psql 命令列:使用 PGPASSWORD 變數來傳遞權杖。
  • Azure Data Studio:使用 PostgreSQL 擴充功能。
  • 其他基於 libpq 的用戶端:範例包括常見的應用程式架構和對象關係型對應程式 (ORM)。
  • pgAdmin:在建立伺服器時,清除 [立即連線] 選項。

向 Microsoft Entra ID 進行驗證

使用下列程序,以「適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器」執行個體使用者的身分透過 Microsoft Entra ID 進行驗證。

您可以使用以下方法進行操作:

  • Azure Cloud Shell
  • Azure 虛擬機器
  • 您的本機電腦

登入 Azure

首先,使用 Azure CLI 以 Microsoft Entra ID 進行驗證。 您不需要在 Azure Cloud Shell 中執行此步驟。

az login

此命令將開啟 Microsoft Entra 驗證頁面的瀏覽器視窗。 您需要提供 Microsoft Entra 的使用者識別碼和密碼。

擷取 Microsoft Entra 存取權杖

使用 Azure CLI 取得 Microsoft Entra 驗證使用者的存取權杖,以存取適用於 PostgreSQL 的 Azure 資料庫。 以下是公用雲端的範例:

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

上述資源值必須依所示內容加以指定。 針對其他雲端,您可以使用下列命令來查閱資源值:

az cloud show

針對 Azure CLI 2.0.71 版和更新版本,您可以在下列適用於所有雲端的便利版本中指定此命令:

az account get-access-token --resource-type oss-rdbms

驗證成功之後,Microsoft Entra ID 會傳回存取權杖:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

權杖是 Base64 字串。 它會將所有關於已驗證使用者的資訊編碼,並且會以適用於 PostgreSQL 的 Azure 資料庫服務作為目標。

使用權杖做為以 psql 用戶端登入的密碼

連線時,請使用存取權杖作為PostgreSQL使用者密碼。

當您使用psql命令列客戶端時,您需要通過環境變量傳遞 PGPASSWORD 訪問令牌。 存取權杖比psql可以直接接受的密碼長度長。

以下是 Windows 範例:

set PGPASSWORD=<copy/pasted TOKEN value from step 2>
$env:PGPASSWORD='<copy/pasted TOKEN value from step 2>'

以下是 Linux 或 macOS 範例:

export PGPASSWORD=<copy/pasted TOKEN value from step 2>

您也可以使用指令取代,將步驟 2 和步驟 3 結合在一起。 您可以將權杖擷取項目置入變數,然後將其直接傳遞為 PGPASSWORD 環境變數的值。

export PGPASSWORD=$(az account get-access-token --resource-type oss-rdbms --query "[accessToken]" -o tsv)

現在連線到適用於 PostgreSQL 的 Azure 資料庫:

psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com dbname=postgres sslmode=require"

使用權杖做為以 PgAdmin 登入的密碼

若要搭配 PgAdmin 使用 Microsoft Entra 權杖進行連線,請遵循下列步驟:

  1. 開啟 PgAdmin 並選取 註冊伺服器
  2. 在 [ 一般 ] 索引標籤上,輸入連線名稱,然後清除 [立即連線]。
  3. [連線] 索引標籤上,輸入主機詳細資料。 將 [使用者名稱] 設定為您的 Microsoft Entra UPN (例如 user@tenant.onmicrosoft.com)。 儲存。
  4. 在樹狀結構中,選取伺服器,然後選擇 [連線伺服器]。
  5. 出現提示時,將存取權杖貼上為密碼。

以下是連線時的一些基本考量:

  • user@tenant.onmicrosoft.com 是 Microsoft Entra 使用者的 userPrincipalName。

  • 請務必使用 Azure 使用者的確切名稱。 Microsoft Entra 使用者和群組名稱會區分大小寫。

  • 如果名稱包含空格,請在每個空格之前使用反斜線 (\) 將其逸出。 您可以使用 Azure CLI 來取得登入的使用者,並設定 PGUSER 環境變數的值:

    export PGUSER=$(az ad signed-in-user show --query "[userPrincipalName]" -o tsv | sed 's/ /\\ /g')
    
  • 存取權杖的有效性是 5 分鐘到 60 分鐘。 建議您在要起始登入適用於 PostgreSQL 的 Azure 資料庫之前取得存取權杖。

您現在已透過 Microsoft Entra 驗證向適用於 PostgreSQL 的 Azure 資料庫伺服器進行驗證。

以群組成員身分使用 Microsoft Entra ID 進行驗證

本節說明如何使用 Microsoft Entra 群組進行連線。 您必須是群組的成員,且必須在資料庫中建立 (對應) 群組。

建立群組主體

在資料庫中建立群組主體 (角色) (視需要取代顯示名稱):

select * from  pgaadauth_create_principal('Prod DB Readonly', false, false).

如果停用群組同步,成員可以使用其存取權杖登入,並將群組名稱指定為使用者名稱。

如果已啟用群組同步處理 (透過將伺服器參數設定為 pgaadauth.enable_group_sync ON) ,成員應該使用其個別的 Entra ID 認證登入,但仍可以使用群組名稱作為使用者名稱登入。

  • 基於相容性原因,群組登入仍然可用,但可以使用以下方式停用: ALTER ROLE "ROLE_NAME" NOLOGIN;

  • 不應刪除群組角色以維持同步處理。

  • 群組每 30 分鐘自動同步一次。

  • 手動同步可以使用以下命令觸發: SELECT * FROM pgaadauth_sync_roles_for_group_members();pgaadauth.enable_group_sync param 必須為 “ON”)。

  • 群組中繼資料 (例如群組名稱) 的變更不會同步處理

  • 群組成員資格變更已同步處理

    備註

    受控身分識別和服務主體支援作為群組成員。

登入 Azure

使用 Azure CLI 向 Microsoft Entra ID 進行驗證。 您不需要在 Azure Cloud Shell 中執行此步驟。 使用者必須是 Microsoft Entra 群組的成員。

az login

擷取 Microsoft Entra 存取權杖

使用 Azure CLI 取得 Microsoft Entra 驗證使用者的存取權杖,以存取適用於 PostgreSQL 的 Azure 資料庫。 以下是公用雲端的範例:

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

您必須完全如同所示般指定初始資源值。 針對其他雲端,您可以使用下列命令來查閱資源值:

az cloud show

針對 Azure CLI 2.0.71 版和更新版本,您可以在下列適用於所有雲端的便利版本中指定此命令:

az account get-access-token --resource-type oss-rdbms

驗證成功之後,Microsoft Entra ID 會傳回存取權杖:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

使用權杖作為密碼以使用 psql 或 PgAdmin 登入

當您以群組成員身分連線時,這些考量很重要:

  • 群組名稱必須完全符合 Microsoft Entra 群組顯示名稱 (區分大小寫)。
  • 僅使用群組名稱,不要使用成員別名。
  • 在需要的地方逸出空間 (例如 Prod\ DB\ Readonly)。
  • 令牌有效期為 5-60 分鐘。 在連接之前取得它;請勿將權杖存儲在腳本中。

小提示

如果驗證失敗,請確認資料庫角色是否存在 (例如,使用 \du),並確認 pgaadauth.enable_group_sync 設定。

您現在已透過 Microsoft Entra 驗證向 PostgreSQL 伺服器進行驗證。