共用方式為


搭配適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器使用 Microsoft Entra ID 進行驗證

適用於: 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器

在本文中,您會設定 Microsoft Entra ID 存取,以使用 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器進行驗證。 您也將瞭解如何搭配 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器使用Microsoft Entra 令牌。

您可以在伺服器布建或更新版本期間,為 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器設定Microsoft Entra 驗證。 只有 Microsoft Entra 管理員使用者可以建立或啟用適用於 Microsoft Entra ID 型驗證的使用者。 建議您不要將 Microsoft Entra 系統管理員用於一般資料庫作業,因為該角色具有較高的用戶權力(例如 CREATEDB)。

您可以有多個具有 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的 Entra 系統管理員使用者Microsoft。 Microsoft Entra 系統管理員使用者可以是使用者、群組或服務主體。

必要條件

設定網路需求

Microsoft Entra ID 是多租用戶應用程式。 它需要輸出連線才能執行特定作業,例如新增Microsoft Entra 系統管理員群組。 此外,視您的網路拓撲而定,您需要Microsoft Entra 連線的網路規則才能運作:

  • 公用存取(允許的IP位址):不需要額外的網路規則。

  • 私人存取 (虛擬網路整合):

    • 您需要輸出網路安全組 (NSG) 規則,才能允許虛擬網路流量只連線到 AzureActiveDirectory 服務標籤。
    • 如果您使用路由表,則必須使用目的地服務標籤 AzureActiveDirectory 和下一個躍點 Internet來建立規則。
    • 或者,如果您使用 Proxy,您可以新增防火牆規則,以允許 HTTP/S 流量只 AzureActiveDirectory 連線到服務標籤。
  • 自定義 DNS:如果您在 虛擬網絡 (VNET) 中使用自定義 DNS,還有其他考慮。 在這種情況下,請務必確保下列 端點 解析為其對應的IP位址: login.microsoftonline.com:此端點用於驗證。 確認您的自定義 DNS 設定可讓您將 login.microsoftonline.com 解析為正確的 IP 位址 graph.microsoft.com:此端點是用來存取 Microsoft Graph API。 請確定您的自定義 DNS 設定允許解析 graph.microsoft.com 到正確的 IP 位址。

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

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

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

注意

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

此螢幕快照顯示在伺服器布建期間設定 Microsoft Entra 管理員的選項。]

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

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

此螢幕快照顯示伺服器建立後設定 Microsoft Entra 管理員的選項。

重要

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

使用 Microsoft Entra 識別符連線到 適用於 PostgreSQL 的 Azure 資料庫

下列高階圖表摘要說明搭配使用 Microsoft Entra 驗證搭配適用於 PostgreSQL 的 Azure 資料庫的工作流程:

Microsoft Entra ID、使用者的電腦和伺服器之間的驗證流程圖。

Microsoft Entra 整合適用於標準 PostgreSQL 工具,例如 psql,這些工具不會Microsoft Entra 感知,而且只有在連線到 PostgreSQL 時才支援指定使用者名稱和密碼。 如上圖所示,Microsoft Entra 令牌會傳遞為密碼。

我們已測試下列用戶端:

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

使用 Microsoft Entra 識別碼驗證

使用下列程式,以Microsoft Entra ID 作為 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器用戶進行驗證。 您可以在 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. 單擊 [連線] 索引標籤,並提供您的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例詳細數據,以取得 [主機名/位址] 和 [使用者名稱],然後儲存。 username 是您Microsoft Entra ID 或電子郵件
  4. 從瀏覽器功能表中,選取您的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器連線,然後按兩下 [連接伺服器]
  5. 出現提示時,請輸入您的 Active Directory 令牌密碼。

顯示使用PG系統管理員登入程式的螢幕快照。

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

  • user@tenant.onmicrosoft.com 是 Microsoft Entra 使用者的 userPrincipalName。
  • 請務必使用 Azure 使用者的確切名稱。 Microsoft Entra 使用者和組名會區分大小寫。
  • 如果名稱包含空格,請在每個空格之前使用反斜線 (\) 將其逸出。 您可以使用 Azure CLI 來取得登入的使用者,並設定環境變數的值 PGUGSER
    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 進行驗證

在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中建立Microsoft Entra 群組

若要啟用Microsoft Entra 群組來存取您的資料庫,請使用您用於使用者的相同機制,但請改為指定組名。 例如:

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

當群組成員登入時,他們會使用其存取令牌,但將組名指定為用戶名稱。

注意

適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器支援受控識別和服務主體作為群組成員。

登入使用者的 Azure 訂用帳戶

使用 Azure CLI 向 Microsoft Entra 識別碼進行驗證。 您不需要在 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 群組的名稱。
  • 請務必使用拼字Microsoft Entra 組名的確切方式。 Microsoft Entra 使用者和組名會區分大小寫。
  • 當您以群組身分連線時,只使用組名,而不是群組成員的別名。
  • 如果名稱包含空格,請在每個空格之前使用反斜線 (\) 將其逸出。
  • 存取令牌的有效性是 5 分鐘到 60 分鐘。 建議您先取得存取令牌,再起始登入 適用於 PostgreSQL 的 Azure 資料庫。

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

下一步