次の方法で共有

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 灵活服务器数据库:

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

从 Internet 连接

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

例如,如果应用程序使用适用于 Azure Database for PostgreSQL 灵活服务器的 Java 数据库连接 (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 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: 致命: 用户“yourusername”的密码身份验证失败

  • 防火墙不允许动态 IP 地址:如果具有具有动态 IP 寻址的 Internet 连接,并且无法通过防火墙,请尝试以下解决方案之一:

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

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

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