伺服器安全性考量

假設您是使用內部部署 PostgreSQL 資料庫。 您要管理所有安全性層面,並已使用標準的 PostgreSQL 伺服器層級防火牆規則,鎖定所有對伺服器進行的存取。 現在您想要確定您可以在 Azure 中設定相同的伺服器層級防火牆規則。

伺服器安全性考量和連線方法

您有許多選項可限制對於「適用於 PostgreSQL 的 Azure 資料庫」伺服器和資料庫的存取。 您可以在網路、伺服器或資料庫層級限制網路存取。 您可以使用下列任何選項:

  • 使用者帳戶,以限制資料庫存取
  • 虛擬網路,以限制網路存取
  • 防火牆規則,以限制伺服器存取

驗證和授權

「適用於 PostgreSQL 的 Azure 資料庫」伺服器支援原生的 PostgreSQL 驗證。 您可以利用伺服器的系統管理員登入來與伺服器連線和驗證。 您也會建立只能連線至特定資料庫的使用者,以限制存取權。

什麼是虛擬網路?

虛擬網路是在 Azure 網路內建立的邏輯隔離網路。 您可以使用虛擬網路來控制哪些 Azure 資源可以連線至其他資源。

假設您所執行的 Web 應用程式連線到某個資料庫。 您會使用子網路來隔離網路的不同部分。 子網路是網路的一部分,而且以某個範圍的 IP 位址為基礎。

若要設定這些子網路,您需要建立虛擬網路,再將網路細分為子網路。 Web 應用程式會在其中一個子網路上運作,資料庫則在另一個子網路上運作。 每個子網路在與其他網路通訊時,都會有自己的傳出和傳入規則。 這些規則可讓您限制資料庫對 Web 應用程式的存取。

什麼是防火牆?

防火牆是一個服務,會根據每一個要求的原始 IP 位址來授與伺服器存取權。 您可以建立指定 IP 位址範圍的防火牆規則。 只有來自這些已授與之 IP 位址的用戶端才能存取伺服器。 一般而言,防火牆規則也包括特定網路通訊協定與連接埠資訊。 例如,PostgreSQL 伺服器依預設會接聽連接埠 5432 上的 TCP 要求。

適用於 PostgreSQL 的 Azure 資料庫伺服器防火牆

「適用於 PostgreSQL 的 Azure 資料庫」伺服器防火牆會防止對您資料庫伺服器進行的所有存取,直到您指定哪些電腦擁有權限為止。 防火牆組態可讓您指定允許連線至伺服器的 IP 位址範圍。 伺服器一律會使用預設的 PostgreSQL 連線資訊。

顯示「適用於 PostgreSQL 的 Azure 資料庫」伺服器防火牆正在掃描所有連入要求 IP 位址的圖例。 只會將來自預先定義之有效 IP 位址範圍的要求轉送到資料庫

適用於 PostgreSQL 的 Azure 資料庫伺服器 SSL 連線

「適用於 PostgreSQL 的 Azure 資料庫」會希望您的用戶端應用程式使用安全通訊端層 (SSL) 來連線到 PostgreSQL 服務。 在資料庫伺服器和您的用戶端應用程式之間強制使用 SSL 連線,可將伺服器與用戶端之間的資料加密,而有助於抵禦「攔截式」攻擊和類似的攻擊。 若要啟用 SSL,用戶端與伺服器之間必須交換金鑰並有嚴格的驗證機制,連線才能運作。 使用 SSL 的詳細資訊不在此學習課程模組的討論範圍內。

設定連線安全性

讓我們看一下您可以用來設定「適用於 PostgreSQL 的 Azure 資料庫」伺服器防火牆的決定和步驟。 您也會了解如何連線至您稍早建立的伺服器。

使用您啟用沙箱時所用的相同帳戶來登入 Azure 入口網站。 瀏覽至您要為其建立防火牆規則的伺服器資源。

接著,您必須選取 [連線安全性] 選項來開啟右側的 [連線安全性] 刀鋒視窗。

Azure 入口網站的螢幕擷取畫面,其中顯示 [PostgreSQL 資料庫資源] 刀鋒視窗的 [連線安全性] 區段

在此畫面上,您有數個選項。 您可以:

  • 按一下 [新增用戶端 IP] 按鈕,新增您用來存取入口網站的 IP 位址以作為防火牆項目。
  • 允許存取 Azure 服務。 根據預設,所有 Azure 服務都不會擁有 PostgreSQL 伺服器的存取權。
  • 輸入 IP 位址範圍來新增防火牆規則。
  • 強制使用 SSL 連線。 此選項會強制您的用戶端使用 SSL 憑證來連線到伺服器。

進行變更之後,請務必按一下項目欄位上方的 [儲存] 圖示來儲存更新後的設定。

允許存取 Azure 服務

若要使用 Azure Cloud Shell 來存取或設定伺服器,請務必啟用 [允許存取 Azure 服務]。 此步驟會在伺服器設定中新增防火牆規則,以允許來自 Cloud Shell 的存取要求。 此規則不會顯示為您新增的其中一個自訂規則。

您還必須停用 [強制執行 SSL 連線]。 如果需要使用 SSL 才能進行用戶端連線,PowerShell 就無法連線至伺服器。

如果未正確設定,上述兩個選項都會導致命令列上顯示錯誤訊息。

例如,如果未允許存取 Azure 服務,又啟用 [強制執行 SSL 連線],則當防火牆封鎖存取時,您會看到與此錯誤類似的內容:

psql: FATAL: no pg_hba.conf entry for host "123.45.67.89", user "adminuser", database "postgres", SSL on FATAL:  SSL connection is required. Please specify SSL options and retry.

使用入口網站建立防火牆規則

假設您想要建立防火牆規則,以允許來自任何 IP 位址的存取要求。

警告

建立此防火牆規則將會讓網際網路上的任何 IP 位址都能夠嘗試連線到您的伺服器。 儘管用戶端無法在沒有使用者名稱與密碼的情況下存取伺服器,但在啟用此規則時請務必小心,並確定您已了解其安全性含意。

您可以在有標籤的欄位中輸入下列資料,以建立新的防火牆規則:

  • 規則名稱:AllowAll
  • 起始 IP:0.0.0.0
  • 結束 IP:255.255.255.255

若要移除防火牆規則,請按一下所要刪除規則結尾的省略符號 (...)。 按一下 [刪除] 按鈕以刪除規則。

按一下項目欄位上方的 [儲存] 圖示,以認可要刪除規則。

使用 Azure CLI 建立防火牆規則

您可以使用 Azure CLI 以 az postgres server firewall-rule create 命令將防火牆規則新增到您的伺服器。 以下是建立上述規則的範例。

az postgres server firewall-rule create \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --server <server-name> \
  --name AllowAll \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 255.255.255.255

您可以使用 az postgres server firewall-rule delete 命令將防火牆規則從伺服器移除。 以下是範例:

az postgres server firewall-rule delete \
  --name AllowAll \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --server-name <server-name>

連線到您的伺服器

和新式資料庫一樣,PostgreSQL 也需要定期進行伺服器系統管理,才能達到最佳效能。 您有許多選項可用來連線和管理「適用於 PostgreSQL 的 Azure 資料庫」伺服器。 我們會使用 psql 來連線至伺服器。

什麼是 psql?

稱為 psql 的命令列工具是用來執行 PostgreSQL 伺服器與資料庫作業的 PostgreSQL 分散式互動終端機。 Azure Cloud Shell 隨附 psql,且其與「適用於 PostgreSQL 的 Azure 資料庫」搭配運作的方式,和與任何其他 PostgreSQL 實作搭配運作的方式相同。 psql 工具可讓您管理資料庫,以及針對這些資料庫執行結構查詢。

要使用 psql,就必須成功連線至 PostgreSQL 伺服器。 在使用 psql 時,有幾個命令列參數可供使用。

  • --host - 您要連線的目標主機。
  • --username - 用來連線的使用者名稱/識別碼。
  • --dbname - 您要連線的目標資料庫名稱。

提示

在管理伺服器存取和資料庫設定時,您通常要連線到 postgres 管理資料庫。

完整命令如下:

psql --host=<server-name>.postgres.database.azure.com \
  --username=<admin-user>@<server-name> \
  --dbname=<database>

連線之後,您會看到命令提示字元,並可對伺服器和資料庫執行命令。

您現在已了解設定「適用於 PostgreSQL 的 Azure 資料庫」安全性設定時所採取的步驟。 在下一個單元中,您將會了解如何設定「適用於 PostgreSQL 的 Azure 資料庫」安全性設定。 您也會使用 Cloud Shell 來連線到伺服器。