限制 Azure 中的跨租使用者私人端點連線
客戶越來越多地在其租使用者中使用私人端點,以私下且安全地連線到其 Azure 平臺即服務 (PaaS) 服務。 私人端點可以連線到跨 Microsoft Entra 租用戶的服務。 為了符合安全性與合規性,您可能需要封鎖私人端點上的跨Microsoft Entra 租用戶連線。 本指南說明建議的設定選項,以限制或防止跨租使用者私人端點連線。 這些選項可協助您在 Azure 環境中建立數據外洩防護 (DLP) 控制項。
私人端點簡介
使用私人端點,使用現有的網路周邊來控制 Azure 環境內的流量。 但在某些情況下,您必須只在公司Microsoft Entra 租使用者內保留私人端點連線。 下列範例顯示可能會造成安全性風險的連線。
- 線上 A: Rogue 系統管理員會在客戶虛擬網路上建立私人端點。 這些端點會連結至裝載於客戶環境外部的服務,例如另一個Microsoft Entra 租使用者。
- 連線 B: Rogue 系統管理員會在其他Microsoft Entra 租使用者中建立私人端點,以連結到客戶Microsoft Entra 租用戶中裝載的服務。
圖 1:私人端點跨租使用者案例的圖例。
針對這兩種情況,您會指定服務的資源標識符,並手動核准私人端點連線。 使用者也需要角色型訪問控制 (RBAC) 存取權來執行這些動作。
圖 1 中的連線 C 和 D 顯示客戶通常想要允許的案例。 私人端點聯機會保留在公司Microsoft Entra 租使用者中。 它們不代表安全性風險,因此本文並未涵蓋這兩種案例。
下列資訊可讓您選擇防止跨 Microsoft Entra 租使用者布建私人端點。
拒絕連結到其他租用戶服務的私人端點
案例一:惡意系統管理員需要客戶Microsoft Entra 租用戶中訂用帳戶中的下列許可權。
- Microsoft.Network/virtualNetworks/join/action rights on a subnet with privateEndpointNetworkPolicies set to Disabled.
- Microsoft.Network/privateEndpoints/write 存取客戶環境中的資源群組。
透過這些許可權,Rogue 系統管理員可以在客戶的 Microsoft Entra 租使用者中建立私人端點。 此私人端點會連結到個別訂用帳戶中的服務,Microsoft Entra 租使用者。 圖 1 將此案例顯示為連線 A。
在此案例中,用戶會設定外部Microsoft Entra 租使用者和 Azure 訂用帳戶。 接下來,他們會手動指定服務的資源標識符,在客戶環境中建立私人端點。 最後,Rogue 系統管理員會在外部Microsoft Entra 租用戶中裝載的連結服務上核准私人端點,以允許透過連線的流量。
在流氓系統管理員核准私人端點連線之後,公司數據可以從公司虛擬網路複製到外部Microsoft Entra 租使用者的 Azure 服務。 只有在使用 Azure RBAC 授與存取權時,才會發生此安全性風險。
案例一的風險降低
使用下列 Azure 原則,自動封鎖在連結到外部 Azure 服務的公司Microsoft Entra 租使用者中建立私人端點的能力。
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Network/privateEndpoints"
},
{
"anyOf": [
{
"count": {
"field": "Microsoft.Network/privateEndpoints/manualprivateLinkServiceConnections[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/privateEndpoints/manualprivateLinkServiceConnections[*].privateLinkServiceId",
"notEquals": ""
},
{
"value": "[split(concat(first(field('Microsoft.Network/privateEndpoints/manualprivateLinkServiceConnections[*].privateLinkServiceId')), '//'), '/')[2]]",
"notEquals": "[subscription().subscriptionId]"
}
]
}
},
"greaterOrEquals": 1
},
{
"count": {
"field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].privateLinkServiceId",
"notEquals": ""
},
{
"value": "[split(concat(first(field('Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].privateLinkServiceId')), '//'), '/')[2]]",
"notEquals": "[subscription().subscriptionId]"
}
]
}
},
"greaterOrEquals": 1
}
]
}
]
},
"then": {
"effect": "Deny"
}
此原則會拒絕在鏈接服務訂用帳戶外部建立的任何私人端點,例如連線 A 和 D。此原則也提供使用 manualPrivateLinkServiceConnections
和 privateLinkServiceConnections
的彈性。
您可以更新此原則,讓私人端點只會在一組特定訂用帳戶中建立。 您可以藉由新增 list
參數並使用 建構來進行 "notIn": "[parameters('allowedSubscriptions')]"
這項變更。 但不建議使用此方法,因為這表示您必須持續維護此原則的訂用帳戶清單。 每當租使用者內建立新的訂用帳戶時,都必須將訂用帳戶標識元新增至 參數。
請改為將原則指派給最上層管理群組,然後在需要時使用豁免。
案例一的考慮
此原則會封鎖建立與服務本身不同訂用帳戶的私人端點的能力。 如果某些使用案例需要這些端點,請使用原則豁免。 為 Data Factory 和 Azure Synapse 建立更多原則,以確保受控虛擬網路上裝載的受控私人端點只能連線到您Microsoft Entra 租用戶內裝載的服務。
拒絕從其他租使用者中建立的私人端點連線
案例二:惡意系統管理員需要客戶環境中應建立私人端點的服務寫入許可權。
透過此許可權,Rogue 系統管理員可以在外部Microsoft Entra 租使用者和訂用帳戶中建立私人端點。 此端點會連結到客戶Microsoft Entra 租使用者中的服務。 圖 1 將此案例顯示為連線 B。
在此案例中,Rogue 系統管理員必須先設定外部私人Microsoft Entra 租使用者和 Azure 訂用帳戶。 接下來,他們會在環境中手動指定公司Microsoft Entra 租用戶中服務的資源標識碼和群組標識符,以在其環境中建立私人端點。 最後,他們會核准連結服務上的私人端點,以允許跨 Microsoft Entra 租使用者的連線流量。
在 Rogue 系統管理員或服務擁有者核准私人端點之後,會從外部虛擬網路存取數據。
案例 2 的風險降低
使用服務特定原則來防止整個客戶租用戶發生此案例。 私人端點連線是個別服務的子資源,並顯示在其屬性區段底下。 使用下列 原則定義來拒絕不符合規範的連線:
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts/privateEndpointConnections"
},
{
"field": "Microsoft.Storage/storageAccounts/privateEndpointConnections/privateLinkServiceConnectionState.status",
"equals": "Approved"
},
{
"anyOf": [
{
"field": "Microsoft.Storage/storageAccounts/privateEndpointConnections/privateEndpoint.id",
"exists": false
},
{
"value": "[split(concat(field('Microsoft.Storage/storageAccounts/privateEndpointConnections/privateEndpoint.id'), '//'), '/')[2]]",
"notEquals": "[subscription().subscriptionId]"
}
]
}
]
},
"then": {
"effect": "Deny"
}
此原則會顯示 Azure 儲存體 的範例。 針對其他服務複寫相同的原則定義,例如 金鑰保存庫、Azure AI Services 和 SQL Server。
若要進一步改善管理性,請將服務特定原則組合成方案。 此原則會拒絕對個別服務訂用帳戶外部裝載的私人端點私人端點連線核准。 它不會拒絕拒絕或移除私人端點連線,這是客戶想要的行為。 自動核准工作流程,例如連線 C,不受此原則影響。
但入口網站內相容私人端點連線的核准會遭到使用此方法封鎖。 之所以發生此區塊,是因為入口網站 UI 不會在其承載中傳送連線私人端點的資源識別碼。 建議您使用 Azure Resource Manager、 Azure PowerShell 或 Azure CLI 來核准私人端點連線。
此外,將原則指派給最上層管理群組,並在需要時使用豁免。
案例 2 的考慮
Azure Synapse Analytics 和 Azure Data Factory 提供受控虛擬網路和受控私人端點。 由於這些新功能,原則會封鎖這些服務的安全和私用。
建議您在案例兩種風險降低的原則定義中使用稽核效果,而不是拒絕效果。 這項變更可協助您追蹤在不同訂用帳戶和租使用者中建立的私人端點。 您也可以針對個別的數據平臺範圍使用原則豁免。
Azure Data Factory
若要克服 Azure Data Factory 受控虛擬網路上的案例, 請使用下列 原則定義:
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints"
},
{
"anyOf": [
{
"field": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints/privateLinkResourceId",
"exists": false
},
{
"value": "[split(field('Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints/privateLinkResourceId'), '/')[2]]",
"notEquals": "[subscription().subscriptionId]"
}
]
}
]
},
"then": {
"effect": "[parameters('effect')]"
}
此原則會拒絕連結到 Data Factory 訂用帳戶外部之服務的受控私人端點。 您可以變更此原則,以允許連線到一組訂用帳戶中裝載的服務,方法是新增 list
參數,以及使用 "notIn": "[parameters('allowedSubscriptions')]"
建構。 針對具有受控虛擬網路和受控私人端點的服務廣泛使用的租用戶或環境內的數據平臺範圍,建議您進行這項變更。
建議您將此原則指派給最上層管理群組,並視需要使用豁免。 針對數據平台,進行這些變更,並將原則指派給一組數據平臺訂用帳戶。
Azure Synapse
Azure Synapse 也會使用受控虛擬網路。 我們建議將類似的原則套用至案例一的 Data Factory 原則。 Azure Synapse 不提供受控私人端點的原則別名。 但是有一個數據外洩防護功能,可以使用下列原則針對工作區強制執行此功能:
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Synapse/workspaces"
},
{
"anyOf": [
{
"field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.preventDataExfiltration",
"exists": false
},
{
"field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.preventDataExfiltration",
"notEquals": true
},
{
"count": {
"field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.allowedAadTenantIdsForLinking[*]",
"where": {
"field": "Microsoft.Synapse/workspaces/managedVirtualNetworkSettings.allowedAadTenantIdsForLinking[*]",
"notEquals": "[subscription().tenantId]"
}
},
"greaterOrEquals": 1
}
]
}
]
},
"then": {
"effect": "Deny"
}
此原則會強制使用 Azure Synapse 的數據外洩功能。 使用 Azure Synapse,您可以拒絕來自客戶租使用者外部所裝載之服務的任何私人端點。 您也可以拒絕裝載在一組指定租使用者標識碼之外的任何私人端點。 此原則只允許建立連結至客戶租用戶中裝載之服務的受控私人端點。
這些原則現在可供內建使用。
Azure Synapse 工作區應該只允許輸出數據流量進入已核准的目標。
定義識別碼:
/providers/Microsoft.Authorization/policyDefinitions/3484ce98-c0c5-4c83-994b-c5ac24785218
Azure Synapse 受控私人端點只能連線到已核准Microsoft Entra 租使用者中的資源。
定義識別碼:
/providers/Microsoft.Authorization/policyDefinitions/3a003702-13d2-4679-941b-937e58c443f0
建議您將原則指派給最上層管理群組,並在需要時使用豁免。
下一步
請務必瞭解對公用因特網進行輸入和輸出連線的建議連線模型。 下一篇文章會檢閱設計考慮、設計建議和建議內容,以供進一步閱讀。