適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的防火牆規則
適用於:適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
當您執行適用於 PostgreSQL 的 Azure 資料庫彈性伺服器時,會有兩個主要的網路選項。 選項為私人存取 (虛擬網路整合) 和公用存取 (允許的 IP 位址)。
使用公用存取,可以透過公用端點存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。 根據預設,防火牆會封鎖伺服器的所有存取。 若要指定哪些 IP 主機可以存取伺服器,您可以建立伺服器層級防火牆規則。 防火牆規則可指定允許的公用 IP 位址範圍。 此防火牆會根據每一個要求的來源 IP 位址來授與伺服器存取權。 使用私人存取時,沒有公用端點可以使用,而且只有位於相同網路的主機可以存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器。
您可以使用 Azure 入口網站或使用 Azure CLI 命令,建立防火牆規則。 您必須是訂用帳戶擁有者或訂用帳戶參與者。
伺服器層級的防火牆規則可套用至相同適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體上的所有資料庫。 這些規則不會影響 Azure 入口網站的存取。
下圖顯示來自網際網路和 Azure 的連線嘗試如何必須通過防火牆,才能到達適用於 PostgreSQL 的 Azure 資料庫彈性伺服器資料庫:
來自網際網路的連線
如果要求的來源 IP 位址在伺服器層級防火牆規則中指定的其中一個範圍內,就會允許連線。 否則會遭到拒絕。
例如,如果您的應用程式透過適用於 PostgreSQL 的 Azure 資料庫彈性伺服器的 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
注意
若要從您的本機電腦存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器,請確定您的網路和本機電腦上的防火牆允許 TCP 連接埠 5432 的傳出通訊。
從 Azure 連線
建議您尋找任何應用程式或服務的傳出 IP 位址,並明確允許存取這些個別 IP 位址或範圍。 例如,您可以尋找 Azure App Service 應用程式的傳出 IP 位址,或使用繫結至虛擬機器的公用 IP 位址。
如果您的 Azure 服務無法使用固定傳出 IP 位址,請考慮啟用來自所有 Azure 資料中心 IP 位址的連線:
- 在 Azure 入口網站的 [網路] 窗格中,選取 [允許 Azure 內的任何 Azure 服務對此伺服器進行公用存取] 核取方塊。
- 選取 [儲存]。
重要
[允許 Azure 內的任何 Azure 服務對此伺服器進行公用存取] 選項會設定防火牆,以允許所有來自 Azure 的連線,包括來自其他客戶訂用帳戶的連線。 使用此選項時,請確定您的登入和使用者權限限制為只有授權的使用者才能存取。
以程式設計方式管理防火牆規則
除了使用 Azure 入口網站外,您還可以使用 Azure CLI 透過程式設計方式來管理防火牆規則。
在 Azure CLI 中,開頭和結束位址等於 0.0.0.0 的防火牆規則設定相當於入口網站中的 [允許 Azure 內的任何 Azure 服務對此伺服器進行公用存取] 選項。 如果防火牆規則拒絕連線嘗試,則應用程式就無法連接適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。
針對防火牆問題進行疑難排解
存取適用於 PostgreSQL 的 Azure 資料庫彈性伺服器未依您的預期運作時,請考慮下列幾個可能性:
允許清單的變更尚未生效:適用於 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 資料庫彈性伺服器的用戶端電腦,取得指派的 IP 位址範圍。 然後將該 IP 位址範圍新增為防火牆規則。
改為針對您的用戶端電腦取得靜態 IP 位址,然後將該靜態 IP 位址新增為防火牆規則。
防火牆規則不適用於 IPv6 格式:防火牆規則必須是 IPv4 格式。 如果您指定 IPv6 格式的防火牆規則,將會收到驗證錯誤。