Compartir a través de

Azure Database for PostgreSQL 灵活服务器中的防火墙规则

适用于: Azure Database for PostgreSQL 灵活服务器

运行 Azure Database for PostgreSQL 灵活服务器时,有两个主要的网络选项。 这两个选项是“专用访问(虚拟网络集成)”和“公共访问(允许的 IP 地址)”。

利用公共访问,可通过公共终结点访问 Azure Database for PostgreSQL 灵活服务器实例。 默认情况下,防火墙会阻止对服务器的所有访问。 若要指定哪些 IP 主机可以访问服务器,请创建服务器级防火墙规则。 防火墙规则指定允许的公共 IP 地址范围。 防火墙基于每个请求的起始 IP 地址授予对服务器的访问权限。 使用专用访问时,没有公共终结点可用,只能使用同一网络上的主机访问 Azure Database for PostgreSQL 灵活服务器。

可使用 Azure 门户或 Azure CLI 命令创建防火墙规则。 你必须是订阅所有者或订阅参与者。

服务器级防火墙规则适用于 Azure Database for PostgreSQL 灵活服务器实例上的所有数据库。 这些规则不会影响对 Azure 门户网站的访问。

以下示意图显示来自 Internet 和 Azure 的连接尝试必须首先通过防火墙,然后才能访问 Azure Database for PostgreSQL 灵活服务器数据库:

该图显示防火墙工作原理概述。

从 Internet 连接

如果该请求的源 IP 地址位于服务器级防火墙规则中指定的某个范围内,则允许进行连接, 否则,它将被拒绝。

例如,如果应用程序与 Azure Database for PostgreSQL 灵活服务器的 Java Database Connectivity (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 地址不适用于 Azure 服务,请考虑启用来自所有 Azure 数据中心 IP 地址的连接:

  1. 在 Azure 门户的“网络”窗格中,选中“允许从 Azure 内的任何 Azure 服务公开访问此服务器”复选框 。
  2. 选择“保存” 。

重要

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

屏幕截图显示用于允许访问门户中 Azure 服务的选项。

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

除了使用 Azure 门户之外,还可以使用 Azure CLI 以编程方式管理防火墙规则。

在 Azure CLI 中,起始地址和结束地址等于 0.0.0.0 的防火墙规则设置等效于门户中的“允许从 Azure 内的任何 Azure 服务公开访问此服务器”选项。 如果防火墙规则拒绝连接尝试,则应用不会访问 Azure Database for PostgreSQL 灵活服务器实例。

排查防火墙问题

在对 Azure Database for PostgreSQL 灵活服务器实例的访问与预期不符时,请考虑以下可能性:

  • 对允许列表的更改尚未生效:更改 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 地址作为防火墙规则添加。

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

后续步骤