適用於 PostgreSQL 的 Azure 資料庫 中的防火牆規則 - 單一伺服器

適用於:適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器

重要

適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器位於淘汰路徑上。 強烈建議您升級至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器。 如需移轉至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的詳細資訊,請參閱 適用於 PostgreSQL 的 Azure 資料庫 單一伺服器發生什麼事?

根據預設,適用於 PostgreSQL 的 Azure 資料庫 伺服器會防止所有資料庫伺服器的存取,直到您指定允許存取哪個IP主機為止。 此防火牆會根據每一個要求的來源 IP 位址來授與伺服器存取權。 若要設定您的防火牆,您可以建立防火牆規則,指定可接受的 IP 位址範圍。 您可以在伺服器層級建立防火牆規則。

防火牆規則:這些規則可讓用戶端存取整個 適用於 PostgreSQL 的 Azure 資料庫 伺服器,也就是相同邏輯伺服器內的所有資料庫。 您可以使用 Azure 入口網站 或使用 Azure CLI 命令來設定伺服器層級防火牆規則。 若要建立伺服器層級的防火牆規則,您必須是訂用帳戶擁有者或訂用帳戶參與者。

防火牆概觀

根據預設,防火牆會封鎖對適用於 PostgreSQL 的 Azure 資料庫伺服器的所有存取。 若要從另一部電腦/用戶端或應用程式存取您的伺服器,您必須指定一或多個伺服器層級防火牆規則,才能存取您的伺服器。 使用防火牆規則來指定允許的公用IP位址範圍。 存取 Azure 入口網站本身,並不會受到防火牆規則所影響。 從因特網進行 連線 嘗試,Azure 必須先通過防火牆,才能連線到 Postgre SQL 資料庫,如下圖所示:

防火牆運作方式的範例流程

從因特網 連線

伺服器層級防火牆規則會套用至相同 適用於 PostgreSQL 的 Azure 資料庫 伺服器上的所有資料庫。 如果要求的來源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

注意

若要從本機計算機存取 適用於 PostgreSQL 的 Azure 資料庫,請確定網路和本機計算機上的防火牆允許 TCP 連接埠 5432 上的傳出通訊。

從 Azure 連線

建議您尋找任何應用程式或服務的傳出IP位址,並明確允許存取這些個別IP位址或範圍。 例如,您可以找到 Azure App 服務 的傳出IP位址,或使用系結至虛擬機或其他資源的公用IP(請參閱下文,以取得透過服務端點與虛擬機的私人IP連線的資訊)。

如果您的 Azure 服務無法使用固定傳出 IP 位址,您可以考慮啟用來自所有 Azure 資料中心 IP 位址的連線。 您可以從 Azure 入口網站 啟用此設定,方法是從 [連線 ion 安全性] 窗格將 [允許存取 Azure 服務] 選項設定[開啟],然後按兩下 [儲存]。 從 Azure CLI 中,開頭和結束位址等於 0.0.0.0 的防火牆規則設定會執行對等作業。 如果防火牆規則拒絕連線嘗試,則不會連線到 適用於 PostgreSQL 的 Azure 資料庫 伺服器。

重要

[允許存取 Azure 服務] 選項會設定防火牆,以允許所有來自 Azure 的連線,包括來自其他客戶訂用帳戶的連線。 選取這個選項時,請確定您的登入和使用者權限會限制為只有授權的使用者才能存取。

在入口網站中設定 [允許存取 Azure 服務]

從 VNet 連線

若要從 VNet 安全地連線到 適用於 PostgreSQL 的 Azure 資料庫 伺服器,請考慮使用 VNet 服務端點

以程序設計方式管理防火牆規則

除了 Azure 入口網站 之外,您也可以使用 Azure CLI 以程式設計方式管理防火牆規則。 另請參閱使用 Azure CLI 建立和管理 適用於 PostgreSQL 的 Azure 資料庫 防火牆規則

對防火牆問題進行疑難排解

當您存取 Microsoft 適用於 PostgreSQL 的 Azure 資料庫 Server 服務時,請考慮下列幾點:

  • 允許清單的變更尚未生效:變更 適用於 PostgreSQL 的 Azure 資料庫 伺服器防火牆設定可能會有 5 分鐘的延遲才會生效。

  • 登入未獲得授權,或使用了不正確的密碼:如果登入沒有 適用於 PostgreSQL 的 Azure 資料庫 伺服器的許可權,或所使用的密碼不正確,則會拒絕與 適用於 PostgreSQL 的 Azure 資料庫 伺服器的連線。 建立防火牆設定只是讓用戶端有機會嘗試連線到您的伺服器;每個用戶端仍然必須提供必要的安全性認證。

    例如,使用 JDBC 用戶端,可能會出現下列錯誤。

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

  • 動態 IP 位址: 如果您有使用動態 IP 位址的網際網路連線,並且在通過防火牆時遇到問題,您可以嘗試下列其中一個解決方案:

    • 請向因特網服務提供者 (ISP) 要求指派給存取 適用於 PostgreSQL 的 Azure 資料庫 Server 之用戶端電腦的 IP 位址範圍,然後將 IP 位址範圍新增為防火牆規則。

    • 改為針對您的用戶端電腦取得靜態 IP 位址,然後將該靜態 IP 位址新增為防火牆規則。

  • 伺服器的IP似乎為公用:連線 至 適用於 PostgreSQL 的 Azure 資料庫 伺服器會透過可公開存取的 Azure 閘道路由傳送。 不過,實際的伺服器 IP 會受到防火牆保護。 如需詳細資訊,請瀏覽連線架構文章

  • 無法使用允許的IP從 Azure 資源連線: 檢查 是否已針對您要連線的子網啟用 Microsoft.Sql 服務端點。 如果 已啟用 Microsoft.Sql ,表示您只想要在該子網上使用 VNet 服務端點規則

    例如,如果您從已啟用 Microsoft.Sql 但沒有對應的 VNet 規則的子網中的 Azure VM 連線,您可能會看到下列錯誤:FATAL: Client from Azure Virtual Networks is not allowed to access the server

  • 防火牆規則不適用於 IPv6 格式: 防火牆規則必須是 IPv4 格式。 如果您指定 IPv6 格式的防火牆規則,將會顯示驗證錯誤。

下一步