使用 Azure Cosmos DB for PostgreSQL 进行 Microsoft Entra ID 和 PostgreSQL 身份验证

适用对象:PostgreSQL 的 Azure Cosmos DB (由 PostgreSQL 的 Citus 数据库扩展提供支持)

Azure Cosmos DB for PostgreSQL 支持 PostgreSQL 身份验证并与 Microsoft Entra ID 集成。 每个 Azure Cosmos DB for PostgreSQL 群集都是在启用本机 PostgreSQL 身份验证和内置名为 citus 的 PostgreSQL 角色的情况下创建的。 完成群集预配后,可添加更多的本机 PostgreSQL 角色。

除了 PostgreSQL 身份验证方法外,还可以在群集上启用 Microsoft Entra ID(以前称为 Azure Active Directory)身份验证,或者改用它。 可以在每个 Azure Cosmos DB for PostgreSQL 群集上独立配置身份验证方法。 如果需要更改身份验证方法,可以在群集预配完成后随时执行此操作。 更改身份验证方法不需要重启群集。

PostgreSQL 身份验证

PostgreSQL 引擎使用角色来控制对数据库对象的访问。 新创建的 Azure Cosmos DB for PostgreSQL 群集附带了多个预定义的角色:

由于 Azure Cosmos DB for PostgreSQL 是托管的 PaaS 服务,因此只有 Microsoft 才能使用 postgres 超级用户角色登录。 对于受限管理访问权限,Azure Cosmos DB for PostgreSQL 提供了 citus 角色。

托管服务需要将所有 PostgreSQL 角色复制到群集中的所有节点。 为满足此要求,需要使用 Azure Cosmos DB for PostgreSQL 管理功能创建所有其他 PostgreSQL 角色。

Citus 角色

citus 角色的权限:

  • 读取所有配置变量,甚至包括通常只有超级用户才能看到的变量。
  • 读取所有 pg_stat_* 视图,并使用各种统计信息相关的扩展,甚至包括通常只有超级用户才能看到的视图和扩展。
  • 执行可能对表使用 ACCESS SHARE 锁定的监视函数,可能需要很长时间。
  • 创建 PostgreSQL 扩展

特别要注意的是,citus 角色有一些限制:

  • 不能创建文件
  • 不能创建数据库

无法删除 citus 角色,但如果在群集上选择了“仅限 Microsoft Entra ID 身份验证”身份验证方法,则会禁用它。

Microsoft Entra ID 身份验证

Microsoft Entra ID(以前称为 Azure Active Directory)身份验证是一种使用 Microsoft Entra ID 中定义的标识连接到 Azure Cosmos DB for PostgreSQL 的机制。 通过 Microsoft Entra ID 身份验证,可以在一个中心位置集中管理数据库用户标识和其他 Microsoft 服务,从而简化权限管理。

使用 Microsoft Entra ID 的优势包括:

  • 以统一的方式跨 Azure 服务对用户进行身份验证
  • 在统一的位置管理密码策略和密码轮换
  • Microsoft Entra ID 支持多种形式的身份验证,无需存储密码
  • Microsoft Entra ID 身份验证使用 PostgreSQL 数据库角色在数据库级别对标识进行身份验证
  • 支持对连接到 Azure Cosmos DB for PostgreSQL 的应用程序进行基于令牌的身份验证

管理 Microsoft Entra ID 主体的 PostgreSQL 访问

启用 Microsoft Entra ID 身份验证并添加 Microsoft Entra ID 主体作为 Microsoft Entra ID 管理员后,帐户将获得与 citus 角色相同的权限。 Microsoft Entra ID 管理员登录名可以是 Microsoft Entra ID 用户、服务主体或托管标识。 可以随时配置多个 Microsoft Entra ID 管理员,并且可以选择禁用针对 Azure Cosmos DB for PostgreSQL 群集的 PostgreSQL(密码)身份验证,以便进一步满足审核和合规性需求。

此外,启用 Microsoft Entra ID 身份验证后,可以随时将任意数量的非管理员 Microsoft Entra 角色添加到群集。 非管理员 Microsoft Entra ID 角色的数据库权限的托管方式与常规角色类似。

使用 Microsoft Entra ID 标识进行连接

Microsoft Entra ID 身份验证支持使用 Microsoft Entra ID 标识连接到数据库的以下方法:

  • Microsoft Entra ID 密码
  • 已集成的 Microsoft Entra ID
  • 使用 MFA 的 Microsoft Entra ID Universal
  • 使用 Microsoft Entra ID 应用程序证书或客户端密码
  • 托管标识

执行 Microsoft Entra ID 身份验证后,即可检索令牌。 此令牌是用于登录的密码。

其他注意事项

  • 可随时将多个 Microsoft Entra ID 主体(用户、服务主体或托管标识)配置为 Azure Cosmos DB for PostgreSQL 群集的 Microsoft Entra ID 管理员。
  • 如果从 Microsoft Entra ID 服务中删除了某个 Microsoft Entra ID 主体,它仍会是群集上的 PostgreSQL 角色,但再也无法获取新的访问令牌。 在这种情况下,尽管匹配的角色仍存在于 Postgres 数据库中,它无法向群集节点进行身份验证。 数据库管理员需要手动转让所有权并删除此类角色。

注意

在令牌到期前(自令牌颁发起最长 90 分钟后到期),仍可以使用已删除的 Microsoft Entra ID 用户进行登录。 如果你还从 Azure Cosmos DB for PostgreSQL 群集中删除了用户,此访问权限会立即撤销。

  • Azure Cosmos DB for PostgreSQL 使用用户的唯一 Microsoft Entra ID 用户 ID(而不是用户名),将访问令牌与数据库角色进行匹配。 如果你删除了一个 Microsoft Entra ID 用户,然后新建了一个同名用户,那么 Azure Cosmos DB for PostgreSQL 会认为这是一个不同的用户。 因此,如果你从 Microsoft Entra ID 中删除了一个用户,然后添加了一个同名的新用户,那么新用户将无法使用现有角色进行连接。

后续步骤