Share via


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

適用於:適用於 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 資料庫 彈性伺服器擁有多個 Microsoft Entra 系統管理員使用者。 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 系統管理員使用者。

Screenshot that shows selections for setting a Microsoft Entra admin during server provisioning.]

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

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

Screenshot that shows selections for setting a Microsoft Entra admin after server creation.

重要

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

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

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

Diagram of authentication flow between Microsoft Entra ID, the user's computer, and the server.

Microsoft Entra 整合適用於標準 PostgreSQL 工具,例如 psql,這不是 Microsoft Entra 感知,且僅支援在連線到 PostgreSQL 時指定使用者名稱和密碼。 如上圖所示,Microsoft Entra 令牌會以密碼的形式傳遞。

我們已測試下列用戶端:

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

使用 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"

使用令牌作為使用 Pg 登入的密碼 管理員

若要搭配 Pg 管理員 使用 Microsoft Entra 令牌進行連線,請遵循下列步驟:

  1. 開啟 Pgadmin,然後按兩下左側功能表中的 [ 註冊 ],然後選取 [ 伺服器]
  2. 在 [一般] 索引標籤中提供連線名稱,並清除 [立即 連線] 選項。
  3. 按兩下 [連線 ion] 索引標籤,並提供您的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例詳細數據,以取得主機名/位址使用者名稱和儲存。 username 是您 Microsoft Entra 識別碼或電子郵件
  4. 從瀏覽器功能表中,選取您的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器連線,然後按兩下 [連線 伺服器]
  5. 出現提示時,請輸入您的 Active Directory 令牌密碼。

Screenshot that shows login process using PG admin.

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

  • user@tenant.onmicrosoft.com 是 Microsoft Entra 使用者的顯示名稱。
  • 請務必使用 Azure 使用者拼字的確切方式。 Microsoft Entra 使用者和組名會區分大小寫。
  • 如果名稱包含空格,請在每個空格之前使用反斜杠 (\) 來逸出它。 您可以使用 Azure CLI 來取得登入的使用者,並設定環境變數的值 PGUGSER
    export PGUSER=$(az ad signed-in-user show --query "[displayName]" -o tsv | sed 's/ /\\ /g')
    
  • 存取令牌的有效性是 5 分鐘到 60 分鐘。 您應該先取得存取令牌,再起始登入 適用於 PostgreSQL 的 Azure 資料庫。

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

以 Microsoft Entra 識別碼作為群組成員進行驗證

在 適用於 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 或 Pg 登入的密碼 管理員

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

  • 組名是您嘗試連線的 Microsoft Entra 群組名稱。
  • 請務必使用確切的 Microsoft Entra 組名拼字方式。 Microsoft Entra 使用者和組名會區分大小寫。
  • 當您以群組身分連線時,只使用組名,而不是群組成員的別名。
  • 如果名稱包含空格,請在每個空格之前使用反斜杠 (\) 來逸出它。
  • 存取令牌的有效性是 5 分鐘到 60 分鐘。 建議您先取得存取令牌,再起始登入 適用於 PostgreSQL 的 Azure 資料庫。

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

下一步