【Tutorial】Azure Security — Private Endpoint
We’ll explore Azure Security, specifically focusing on Private Endpoint. It provides a secure way to connect resources in a virtual network without exposing them to the public internet.
今天要實測 Microsoft Azure Private Endpoint 功能(新手),設定過程與細節由 Microsoft Learn 與網路大神技術文件所整理而成。
讓您能透過 Azure 虛擬網路中的 private endpoint 存取 Azure PaaS 服務(Azure SQL, Storage Account, …),並且是由 Microsoft 骨幹網路進行連線
From Azure Document
Azure Private Link enables you to access Azure PaaS Services and Azure hosted customer-owned/partner services over a Private Endpoint in your virtual network. Traffic between your virtual network and the service traverses over the Microsoft backbone network, eliminating exposure from the public Internet.
Azure Private Endpoint 是 Azure 平台即服務(PaaS)服務的功能,可讓您以 Microsoft 骨幹網路存取各項 Azure PaaS 服務。服務或是使用的資源就不再需要向公用網際網路公開,算是提高了安全性與效能最佳化,Azure Private Endpoint 也將 PaaS 服務的存取與其他網路流量隔離開來,成本上可以降低資料傳輸成本,因為資料流量不再需要經過公共互聯網。
Architecture & Security 說明
Scenario 1 :未開啟 Private Endpoint
在此範例中,Azure 虛擬機器需要解析名為 db1.database.windows.net
的 Azure SQL 執行個體的名稱。因沒有為 Azure SQL 執行個體配置 Private Endpoint,且 VNet 配置為使用 168.63.129.16
虛擬 IP 和 Azure 提供的 DNS,解析如下:
- VM1 為
db1.database.windows.net
建立 DNS 查詢。 VM1 沒有快取項目,因此查詢將傳遞到為作業系統配置的 DNS 伺服器168.63.129.16
- Azure 提供的 DNS 服務會檢查是否有連結至虛擬網路的名為
database.windows.net
的 Azure Private DNS zone。一旦驗證不存在,就會根據 Public DNS 命名空間解析遞歸查詢,並傳回 Azure SQL 執行個體的公用 IP55.55.55.55
說明私有端點(Private Endpoint)設定後與 Private DNS 關係
Private Endpoint 可以想像是 VNet 的一個網路接口,可以走 Private Link 進行安全連接,存取相關的 Azure PaaS 服務,因這些 PaaS 基本上都是託管在 Azure 世界各地,由供應商負責管理其基礎架構和維運,透過 Azure Private Link,這些 PaaS 服務可以透過私有連接(Private Endpoint)與您的虛擬網路(VNet)安全地通訊。
配置後,Azure 會自動為您的服務在 Private DNS 上建立一個 CNAME (Canonical name)DNS 記錄。
這個 CNAME 記錄的目的是將原始服務的 Public DNS 記錄重新導向到 Private Link 的 domain name 上。
Scenario 2:DNS Pattern with Private Link Endpoint (single virtual network)
說明:Azure VM 需要解析名為 db1.database.windows.net
的 Azure SQL 執行個體名稱,已為 Azure SQL 執行個體設定 Private Endpoint(VNet 設定為使用 168.63.129.16 虛擬 IP),該虛擬 IP 將使用 Azure-provided DNS。同時間在 Private DNS zone 也建立 privatelink.database.windows.net
並與 VM 虛擬網路作連結。
📝已在 Public DNS 中建立了一個 db1.privatelink.database.windows.net
新 CNAME
查詢解析如下:
- VM1 為
db1.database.windows.net
建立 DNS 查詢 - Azure 提供的 DNS 服務會檢查是否有連結至虛擬網路名為
database.windows.net
的 Azure Private DNS zone。若驗證不存在,就會針對 Public DNS 命名空間解析遞歸查詢 - 在解析期間,將傳回
privatelink.database.windows.net
的 CNAME。 Azure 提供的 DNS 服務會檢查是否有連結至虛擬網路的名稱為privatelink.database.windows.net
的 Azure Private DNS zone,並判斷是否存在,查詢被解析為私有端點的私有 IP 位址 10.0.2.4
實作範例參考
在為了將設定流程轉化成 IaC 之前,有必要對所有流程的選項進行了解與驗證及測試,因此 Step by Step 是一個滿關鍵的工作。
👣 Step01. 建立虛擬網路和 Azure Bastion 主機
- 建立具有資源子網、Azure Bastion 子網和 Bastion 主機的虛擬網路
- 在 [ Azure Bastion ] 區段中,選取 [ 啟用 Bastion],到 時 Bastion 可使用瀏覽器,透過安全殼層 (SSH) 或遠端桌面通訊協定 (RDP) 連線到虛擬網路中的 VM
方法是使用其私人 IP 位址,意即 VM 不需要公用 IP 位址、用戶端軟體或特殊設定。
補充:Azure Bastion 是一個託管堡壘主機即服務,用戶以瀏覽器就能透過 SSL 無縫地使用 RDP 和 SSH 連接到虛擬機器,而 Azure 虛擬機器只需搭配私人 IP 位址即可使用 Bastion 以 SSH or RDP 登入管理,免除暴露在網際網路上的風險。
- 編輯子網路
👣 Step02. 建立儲存帳戶
在設定 Private Endpoint 我們直將 Storage Account 的 public network access 作 disable 的動作。
👣 Step03. 建立私人端點
- Basic
2. Resource — 指向到 PaaS 的 StorageAccount 之中,再限定項下的 blob (sub-resource 再拉升安全規格)
sub-resource
的設定可以限縮特定資源再將安全性拉升一層,而不是整個特定的 PaaS 全部開出去3. Virtual Network
- 私人端點的網路原則選取 [編輯 ] 以設定 Private Endpoint network policy,選取 [網路安全組] 和 [路由表] ,參閱 管理私人端點的網路原則
4. DNS 後都依照設定並直接建立
查看完成資訊
👣 Step04. 建立測試虛擬機器
- 在入口網站中,搜尋並選取 [虛擬機器]。
- 虛擬網路選取 [vnet-1]
- 子網路選取 [subnet-1 (10.0.0.0/24)]
- 公用 IP選取 [無]
- NIC 網路安全性群組選取進階
- 設定網路安全性群組選取 [新建] 輸入 nsg-1,並將其餘項目保留為預設值
👣 Step05. 測試對私人端點的連線能力
使用 nslookup <storage-account-name>.blob.core.windows.net
查看狀況
Storage Account 名稱會傳回 10.0.0.0.10 的 Private IP。 此為先前建立之 vnet-1 Virtual Network 的 subnet-1 子網中 ~ 🎰 Bingo 完成實作以下:
- 建立 Virtual Network 和 Bastion Server
- VM
- Storage Account and it’s Container
同樣的設計簡單來說,我們也可以設定使用 Private Endpoint 安全地連線至 Azure Web 應用程式。
假設您有一個名為 webapp-1.azurewebsites.net
的 Azure Web 應用程式,它在 Public DNS 中有一個對應的 DNS 記錄。當您啟用了 Azure Private Link 並為該應用程式配置了 Private Enpoint 時,Azure 會在您的 Private DNS 區域中建立一個 CNAME 記錄。這個 CNAME 記錄將 webapp-1.azurewebsites.net
重新導向到您為該應用程式所建立的私有端點的私有域名 webapp-1.privatelink.azurewebsites.net
,讓該應用程式在虛擬網路內解析為 Private Enpoint 而不是 Public DNS record。
Summary
Pirvate Endpoint 的功能是將你使用的 PaaS 服務的入口端點,從外部存取的端點改為內部存取的端點,當啟用這個功能的時候,原本外部的端點指派好的外部的 IP 也會被拒絕存取,如此就只能允許內部的 IP 被存取。
PaaS 服務涉及不少,要仔細留意可支援的服務等級,例如 App Service 的服務必須選擇 Basic 1 以上的服務等級,才能夠擁有資源私有端點的功能。
其次是因為需要做名稱解析,以 Azure 這邊的設計是會預設幫你做好 Private DNS Zone 產生在你的資源的群組之中,如果沒有鉤選話,之後需要自己自行新增私有的一個 Private DNS Zone,如此才能夠正常的解析到這個私有的 IP Address,當 Private Endpoint 啟用狀態都正常時,對於入口的位置就會從公有的 IP 轉換成私有的 IP address。
補充
虛擬機與 Bastion Server
- 在虛擬網路中,使用 Bastion Server 時,虛擬機不需要擁有公共 IP 地址,因 Bastion Server 會提供「公共 IP」,而虛擬機則使用「私有 IP」 在網路內進行通訊
預設的出站訪問 IP
- 對於沒有分配公共 IP 地址的 VM,或是在內部基本 Azure 負載均衡器的後端池中的 VM,Azure 會提供預設的出站訪問 IP。這個預設的出站訪問 IP 是不可配置的
- 當 VM 符合以下條件之一時,預設的出站訪問 IP 會被禁用
1. 為 VM 分配了公共 IP 地址
2. VM 被放置在標準負載均衡器的後端池中,無論是否有出站規則
3. 在 VM 的子網中指定了 Azure NAT Gateway 資源 - 而使用彈性編排模式的虛擬機規模集中的 VM 不具備預設的出站訪問。
Reference
- https://www.twblogs.net/a/5e65edd9bd9eee211685b941
- Quickstart: Create a private endpoint by using the Azure portal
- Tutorial: Connect to a storage account using an Azure Private Endpoint
- [就是不愛PublicIP之Private Endpoint]
- Azure Private Endpoint
- 👍 Journey Of The Geek — DNS in Microsoft Azure Part 5 — Private Link DNS Continued