本文說明 適用於 PostgreSQL 的 Azure 資料庫 靈活伺服器的連接與網路概念。
當您建立 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器時,必須選擇以下網路選項之一:
- 私人存取 (虛擬網路整合)
- 公用存取 (允許的 IP 位址) 和私人端點
無論您選擇使用私人存取或公用存取選項,都適用下列特性:
- 來自允許 IP 位址的連線,必須使用有效的認證資料,向 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器進行驗證。
- 系統會針對您的網路流量強制執行連線加密。
- 伺服器具有完整網域名稱 (FQDN)。 關於
hostname連接字串中的屬性,請使用 FQDN 代替 IP 位址。 - 這兩個選項都會控制伺服器層級的存取,而不是資料庫層級或資料表層級。 使用 PostgreSQL 的角色屬性來控制資料庫、資料表及其他物件存取。
備註
由於 適用於 PostgreSQL 的 Azure 資料庫 服務是受控的資料庫服務,使用者沒有主機或作業系統的存取權限,因此無法檢視或修改 pg_hba.conf 等組態檔。 服務會根據網路設定自動更新檔案內容。
搭配適用於 PostgreSQL 的 Azure 資料庫使用公用存取網路功能
當你選擇公開存取方式時,你會透過網際網路上的公開端點存取你的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器。 公用端點是可公開解析的 DNS 位址。 「允許的 IP 位址」一詞指的是您選擇授與伺服器存取權的 IP 位址範圍。 這些權限稱為防火牆規則。
如果您想使用下列功能,請選擇此網路選項:
- 透過不支援虛擬網路的 Azure 資源連線。
- 從未由 VPN 或 ExpressRoute 連線的 Azure 外部資源進行連線。
- 確保 適用於 PostgreSQL 的 Azure 資料庫 靈活伺服器有一個可以透過網際網路存取的公開端點。
公用存取機制的特性包括:
只有你允許的 IP 位址有權限存取你的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器。 根據預設,不允許任何 IP 位址。 您可以在伺服器建立期間或之後新增 IP 位址。
你的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器有一個公開解析的 DNS 名稱。
你的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器不在你的 Azure 虛擬網路中。
進出您伺服器的網路流量不會通過私人網路。 流量會使用一般網際網路路徑。
防火牆規則
伺服器層級防火牆規則適用於同一台適用於 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 入口網站之外,您還可以使用 Azure CLI 以程式設計方式管理防火牆規則。 如需詳細資訊,請參閱 網路。
允許所有 Azure IP 位址
找出任何應用程式或服務的外發出 IP 位址,並明確允許存取這些個別的 IP 位址或範圍。 如果您的 Azure 服務沒有可用的固定對外 IP 位址,請考慮啟用來自 Azure 資料中心所有 IP 位址的連線。
若要從 Azure 入口網站啟用此設定,請在 [網路] 窗格上,選取 [允許 Azure 內的任何 Azure 服務對此伺服器進行公用存取] 核取方塊,然後選取 [儲存]。
這很重要
[允許從 Azure 中的 Azure 服務和資源進行公用存取] 選項會設定防火牆,以允許所有來自 Azure 的連線,包括來自其他客戶訂用帳戶的連線。 選取此選項時,請確定您的登入和使用者權限會限制為只有授權的使用者才能存取。
針對公用存取問題進行疑難排解
當 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的存取行為不如預期時,請考慮以下幾點:
允許清單的變更尚未生效。 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器防火牆設定的變更可能需要長達五分鐘才能生效。
驗證失敗。 如果使用者在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器上沒有權限,或密碼錯誤,將會拒絕與 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的連線。 建立防火牆設定只會讓用戶端有機會嘗試連接到你的伺服器。 每個用戶端必須提供必要的安全性認證。
動態用戶端 IP 位址防止存取。 如果您有使用動態 IP 位址的網際網路連線,並且在通過防火牆時遇到問題,請嘗試下列其中一項解決方案:
- 請向你的網際網路服務提供商(ISP)詢問存取 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的客戶端電腦的 IP 位址範圍。 然後將該 IP 位址範圍新增為防火牆規則。
- 改為針對您的用戶端電腦取得靜態 IP 位址。 然後,將靜態 IP 位址新增為防火牆規則。
防火牆規則不適用於 IPv6 格式。 防火牆規則必須是 IPv4 格式。 如果指定 IPv6 格式的防火牆規則,您會收到驗證錯誤。
主機名稱
無論你選擇哪種網路選項,連接 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器時,務必使用完全限定網域名稱(FQDN)作為主機名稱。 不保證伺服器的 IP 位址會保持靜態。 使用 FQDN 可協助您避免變更連接字串。
hostname = servername.postgres.database.azure.com 是使用 FQDN 做為主機名稱的範例。 請盡量避免使用 hostname = 10.0.0.4 (私人位址) 或 hostname = 40.2.45.67 (公用位址)。
防火牆設定的輸出 IP 位址
當你的 適用於 PostgreSQL 的 Azure 資料庫 靈活伺服器需要對外部服務進行外發連線(例如邏輯複寫、連接外部資源的擴充功能或外部資料來源)時,你可能需要在這些外部服務上設定防火牆規則,允許來自資料庫伺服器的流量。
尋找伺服器的 IP 位址
要查找目前分配給您 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的 IP 位址:
使用 DNS 解析:解析伺服器的 FQDN (
servername.postgres.database.azure.com) 以取得目前的 IP 位址。 使用如nslookup或dig之類的工具。nslookup servername.postgres.database.azure.com使用 Azure 入口網站:在 Azure 入口網站中,前往您的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器。 伺服器的公用 IP 位址不會直接顯示,但您可以藉由解析伺服器的 FQDN 來找到它。
使用 Azure CLI:使用 Azure CLI 取得伺服器資訊,然後解析主機名稱:
az postgres flexible-server show --resource-group myResourceGroup --name myServerName
出埠連線的重要考量
IP 位址可能會變動:你為 適用於 PostgreSQL 的 Azure 資料庫 靈活伺服器分配的公用 IP 位址並非靜態,且在維護、更新或其他營運事件中可能會改變。 盡可能使用 FQDN,並視需要定期更新外部防火牆規則。
Azure 資料中心 IP 範圍:為了讓防火牆設定更可預測,允許伺服器所在區域整個 Azure 資料中心 IP 範圍的流量。 Azure 會在 Azure IP 範圍和服務標籤 下載中發佈每個區域的 IP 範圍。
服務標籤:如果您要連線的外部服務也裝載在 Azure 中,請考慮使用 Azure 服務標籤 來取得更動態且可維護的防火牆規則。
私人端點替代方案:若要取得更穩定的連線能力,並避免公用 IP 位址,請考慮使用 私人端點 ,而不是公用存取。