共用方式為

使用 Microsoft Entra ID 通过 Azure Database for PostgreSQL 进行身份验证

本文将配置 Microsoft Entra ID 访问,以便通过 Azure Database for PostgreSQL 灵活服务器进行身份验证。 还将了解如何将 Microsoft Entra 令牌与 Azure Database for PostgreSQL 灵活服务器配合使用。

可以在服务器预配或更高版本期间为 Azure Database for PostgreSQL 灵活服务器配置 Microsoft Entra 身份验证。 只有Microsoft Entra 管理员用户可以创建或启用基于 entra ID 的身份验证Microsoft用户。 建议不要将 Microsoft Entra 管理员用于常规数据库作,因为该角色具有提升的用户权限(例如 CREATEDB)。

可以使用 Azure Database for PostgreSQL 灵活服务器拥有多个 Microsoft Entra 管理员用户。 Microsoft Entra 管理员用户可以是用户、组或服务主体。

先决条件

配置网络要求

Microsoft Entra ID 是一个多租户应用程序。 它需要出站连接来执行某些作,例如添加 Microsoft Entra 管理员组。 此外,还需要网络规则才能运行Microsoft Entra 连接,具体取决于网络拓扑:

  • 公共访问(允许的 IP 地址):不需要额外的网络规则。
  • 专用访问(虚拟网络集成)
  • 需要出站网络安全组 (NSG) 规则才能允许虚拟网络流量仅访问 AzureActiveDirectory 服务标记。
  • 如果使用路由表,则需要创建包含目标服务标记 AzureActiveDirectory 和下一跃点 Internet的规则。
  • (可选)如果使用代理,可以添加新的防火墙规则,以允许 HTTP/S 流量仅 AzureActiveDirectory 访问服务标记。
  • 自定义 DNS:如果在虚拟网络(VNET)中使用自定义 DNS,则还有其他注意事项。 在这种情况下,必须确保以下 终结点 解析为其相应的 IP 地址: login.partner.microsoftonline.cn:此终结点用于身份验证。 验证自定义 DNS 设置是否允许将 login.partner.microsoftonline.cn 解析为其正确的 IP 地址 microsoftgraph.chinacloudapi.cn:此终结点用于访问Microsoft图形 API。 确保自定义 DNS 设置允许将 microsoftgraph.chinacloudapi.cn 解析为正确的 IP 地址。

若要在服务器预配期间设置 Microsoft Entra 管理员,请执行以下步骤:

  1. 在 Azure 门户中,在服务器预配期间,选择 PostgreSQL 和 Microsoft Entra 身份验证 ,或 仅Microsoft Entra 身份验证 作为身份验证方法。
  2. “设置管理员 ”选项卡上,选择客户租户中的有效Microsoft Entra 用户、组、服务主体或托管标识,作为Microsoft Entra 管理员。

如果需要使用 PostgreSQL 和 Microsoft Entra 身份验证 方法,可以选择添加本地 PostgreSQL 管理员帐户。

注释

在服务器预配期间,只能添加一个 Azure 管理员用户。 创建服务器后,可以添加多个Microsoft Entra 管理员用户。

若要在创建服务器后设置 Microsoft Entra 管理员,请执行以下步骤:

  1. 在 Azure 门户中,选择要为 Microsoft Entra ID 启用的 Azure Database for PostgreSQL 灵活服务器的实例。
  2. “安全性”下,选择“ 身份验证”。 然后,根据要求,选择 PostgreSQL 和 Microsoft Entra 身份验证Microsoft Entra 身份验证 作为身份验证方法。
  3. 选择 “添加Microsoft条目管理员。 然后选择客户租户中的有效Microsoft Entra 用户、组、服务主体或托管标识,以成为 Microsoft Entra 管理员。
  4. 选择“保存”

重要

设置管理员时,将新用户添加到具有完全管理员权限的 Azure Database for PostgreSQL 灵活服务器。

使用 Microsoft Entra ID 连接到 Azure Database for PostgreSQL

以下高级关系图汇总了将 Microsoft Entra 身份验证与 Azure Database for PostgreSQL 配合使用的工作流:

Microsoft Entra 集成适用于标准 PostgreSQL 工具,如 psql,它们不Microsoft Entra 感知,并且仅支持在连接到 PostgreSQL 时指定用户名和密码。 如上图所示,Microsoft Entra 令牌作为密码传递。

我们已测试以下客户端:

  • psql 命令行:使用 PGPASSWORD 变量传递令牌。
  • Azure Data Studio:使用 PostgreSQL 扩展。
  • 其他基于 libpq 的客户端:示例包括常见的应用程序框架和对象关系映射器(ORM)。
  • PgAdmin:立即在创建服务器时清除 连接

使用 Microsoft Entra ID 进行身份验证

使用以下过程通过 Microsoft Entra ID 作为 Azure Database for PostgreSQL 灵活服务器用户进行身份验证。

登录到用户的 Azure 订阅

首先,使用 Azure CLI 通过 Microsoft Entra ID 进行身份验证。

az login

该命令将打开浏览器窗口,指向“Microsoft Entra 身份验证”页。 它要求你提供Microsoft Entra 用户 ID 和密码。

检索Microsoft Entra 访问令牌

使用 Azure CLI 获取 Microsoft Entra 身份验证的用户访问 Azure Database for PostgreSQL 的访问令牌。

az account get-access-token --resource https://ossrdbms-aad.database.chinacloudapi.cn

必须按如下所示指定上述资源值。 对于其他云,可以使用以下命令查找资源值:

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 字符串。 它将对经过身份验证的用户的所有信息进行编码,并将其定向到 Azure Database for PostgreSQL 服务。

将令牌用作使用客户端 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)

现在,可以像往常一样启动与 Azure Database for PostgreSQL 的连接:

psql "host=mydb.postgres... user=user@tenant.partner.onmschina.cn dbname=postgres sslmode=require"

将令牌用作使用 PgAdmin 登录的密码

若要将 Microsoft Entra 令牌与 PgAdmin 配合使用进行连接,请执行以下步骤:

  1. 打开 Pgadmin,然后从左侧菜单中选择“注册”,然后选择“服务器
  2. “常规 ”选项卡中,提供连接名称并清除 “立即连接 ”选项。
  3. 选择 “连接 ”选项卡,并为 主机名/地址用户名 提供 Azure Database for PostgreSQL 灵活服务器实例详细信息并保存。 用户名是Microsoft Entra ID 或电子邮件
  4. 从浏览器菜单中,选择 Azure Database for PostgreSQL 灵活服务器连接,然后选择“连接服务器
  5. 出现提示时输入 Active Directory 令牌密码。

连接时,下面是一些基本注意事项:

  • user@tenant.partner.onmschina.cn 是 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 分钟。 在启动 Azure Database for PostgreSQL 登录之前,应获取访问令牌。

现已通过 Microsoft Entra 身份验证向 Azure Database for PostgreSQL 服务器进行身份验证。

使用Microsoft Entra ID 作为组成员进行身份验证

在 Azure Database for PostgreSQL 灵活服务器中创建Microsoft Entra 组

若要启用Microsoft Entra 组以访问数据库,请使用用于用户的相同机制,但请改为指定组名称。 例如:

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

当组成员登录时,他们使用其访问令牌,但将组名称指定为用户名。

注释

Azure Database for PostgreSQL 灵活服务器支持托管标识和服务主体作为组成员。

登录到用户的 Azure 订阅

使用 Azure CLI 使用 Microsoft Entra ID 进行身份验证。 用户必须是 Microsoft Entra 组的成员。

az login

检索Microsoft Entra 访问令牌

使用 Azure CLI 获取 Microsoft Entra 身份验证的用户访问 Azure Database for PostgreSQL 的访问令牌。

az account get-access-token --resource https://ossrdbms-aad.database.chinacloudapi.cn

必须完全按所示指定初始资源值。 对于其他云,可以使用以下命令查找资源值:

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 分钟。 建议在启动 Azure Database for PostgreSQL 登录之前获取访问令牌。

现已通过 Microsoft Entra 身份验证向 PostgreSQL 服务器进行身份验证。