Azure Database for PostgreSQL - 单一服务器中的防火墙规则

适用于:Azure Database for PostgreSQL 单一服务器

重要

Azure Database for PostgreSQL - 单一服务器即将停用。 强烈建议升级到 Azure Database for PostgreSQL - 灵活服务器。 有关迁移到 Azure Database for PostgreSQL 灵活服务器的详细信息,请参阅 Azure Database for PostgreSQL 单一服务器的最新动态?

默认情况下,在指定允许哪些 IP 主机访问数据库服务器之前,Azure Database for PostgreSQL 服务器是安全的,防火墙会阻止所有对数据库服务器的访问。 防火墙基于每个请求的起始 IP 地址授予对服务器的访问权限。 要配置防火墙,请创建防火墙规则,以指定可接受的 IP 地址的范围。 可以在服务器级别创建防火墙规则。

防火墙规则:这些规则允许客户端访问整个 Azure Database for PostgreSQL 服务器,即同一逻辑服务器内的所有数据库。 可以通过使用 Azure 门户或 Azure CLI 命令配置服务器级防火墙规则。 若要创建服务器级防火墙规则,用户必须是订阅所有者或订阅参与者。

防火墙概述

默认情况下,防火墙将阻止对 Azure Database for PostgreSQL 服务器的所有访问。 若要从另一台计算机/客户端或应用程序访问服务器,需要指定一个或多个服务器级防火墙规则以允许访问服务器。 使用防火墙规则指定允许的公共 IP 地址范围。 对 Azure 门户网站本身的访问不受防火墙规则影响。 来自 Internet 和 Azure 的连接尝试必须首先通过防火墙,才能访问 PostgreSQL 数据库,如下图中所示:

Example flow of how the firewall works

从 Internet 连接

服务器级防火墙规则适用于 Azure Database for PostgreSQL 服务器上的所有数据库。 如果该请求的源 IP 地址位于服务器级防火墙规则中指定的某个范围内,则允许进行连接;如果不在范围内,则会被拒绝。 例如,如果应用程序与 PostgreSQL 的 JDBC 驱动程序连接,则在防火墙阻止连接时尝试进行连接可能会遇到此错误。

java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "123.45.67.890", user "adminuser", database "postgresql", SSL

注意

要从本地计算机访问 Azure Database for PostgreSQL,请确保网络和本地计算机上的防火墙允许 TCP 端口 5432 上的传出通信。

从 Azure 连接

建议找到任何应用程序或服务的传出 IP 地址,并显式允许访问这些单个 IP 地址或范围。 例如,可以查找 Azure 应用服务的传出 IP 地址,或使用绑定到虚拟机或其他资源的公共 IP(请参阅下面的内容,了解如何通过服务终结点与虚拟机的专用 IP 进行连接)。

如果某个固定的传出 IP 地址不适用于 Azure 服务,可以考虑启用来自所有 Azure 数据中心 IP 地址的连接。 可以从 Azure 门户启用此设置,方法是:从“连接安全性”窗格将“允许访问 Azure 服务”选项设为“启用”并点击“保存”。 在 Azure CLI 中,起始和结束地址为 0.0.0.0 的防火墙规则设置执行等效操作。 如果系统根据防火墙规则拒绝了该次连接尝试,则该请求将不会访问 Azure Database for PostgreSQL 服务器。

重要

“允许访问 Azure 服务”选项将防火墙配置为允许来自 Azure 的所有连接,包括来自其他客户的订阅的连接。 选择该选项时,请确保登录名和用户权限将访问限制为仅允许授权用户访问。

Configure Allow access to Azure services in the portal

从 VNet 连接

若要从 VNet 安全连接到 Azure Database for PostgreSQL 服务器,请考虑使用 VNet 服务终结点

以编程方式管理防火墙规则

除了 Azure 门户外,还可使用 Azure CLI 通过编程方式管理防火墙规则。 另请参阅使用 Azure CLI 创建和管理 Azure Database for PostgreSQL 防火墙规则

排查防火墙问题

在对 Microsoft Azure Database for PostgreSQL 服务器服务的访问与期望不符时,请考虑以下几点:

  • 对允许列表的更改尚未生效:对 Azure Database for PostgreSQL 服务器防火墙配置所做的更改可能需要多达 5 分钟的延迟才可生效。

  • 登录名未授权或使用了错误的密码:如果某个登录名对 Azure Database for PostgreSQL 服务器没有权限或者使用的密码不正确,则与 Azure Database for PostgreSQL 服务器的连接会被拒绝。 创建防火墙设置,仅向客户端提供尝试连接到服务器的机会;每个客户端必须提供必需的安全凭据。

    例如,使用 JDBC 客户端可能会出现以下错误。

    java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "yourusername"

  • 动态 IP 地址:如果 Internet 连接使用动态 IP 寻址,并且在通过防火墙时遇到问题,则可以尝试以下解决方法之一:

    • 向 Internet 服务提供商 (ISP) 询问分配给客户端计算机、用于访问 Azure Database for PostgreSQL 服务器的 IP 地址范围,然后将该 IP 地址范围作为防火墙规则添加。

    • 改为获取客户端计算机的静态 IP 地址,然后将该静态 IP 地址作为防火墙规则添加。

  • 服务器 IP 似乎为公共 IP: 到 Azure Database for PostgreSQL 服务器的连接通过可公开访问的 Azure 网关进行路由。 但是,实际的服务器 IP 受防火墙保护。 有关详细信息,请参阅连接体系结构文章

  • 无法使用允许的 IP 从 Azure 资源连接: 检查是否为你连接时所在的子网启用了 Microsoft.Sql 服务终结点。 如果启用了 Microsoft.Sql,则表示你只想在该子网上使用 VNet 服务终结点规则

    例如,如果从启用了 Microsoft.Sql 的子网中的 Azure VM 进行连接,但没有相应的 VNet 规则,则可能会看到以下错误:FATAL: Client from Azure Virtual Networks is not allowed to access the server

  • 防火墙规则不适用于 IPv6 格式:防火墙规则必须采用 IPv4 格式。 如果以 IPv6 格式指定防火墙规则,则会显示验证错误。

后续步骤