建立並關聯服務端點原則
在此文章
服務端點原則可讓您透過服務端點來篩選特定 Azure 資源的虛擬網路流量。 如果您不熟悉服務端點原則,請參閱服務端點原則概觀 以深入了解。
在本教學課程中,您會了解如何:
建立虛擬網路。
新增子網路,並啟用 Azure 儲存體的服務端點。
建立兩個 Azure 儲存體帳戶,並允許從虛擬網路中的子網路對其進行網路存取。
建立服務端點原則,只允許存取其中一個儲存體帳戶。
將虛擬機器 (VM) 部署至子網路。
確認可以從子網路存取允許的儲存體帳戶。
確認拒絕從子網路存取不允許的儲存體帳戶。
必要條件
具有有效訂用帳戶的 Azure 帳戶。 您可以免費建立帳戶 。
具有有效訂用帳戶的 Azure 帳戶。 您可以免費建立帳戶 。
Azure Cloud Shell
Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。
要啟動 Azure Cloud Shell:
選項
範例/連結
選取程式碼或命令區塊右上角的 [試試看] 。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。
請前往 https://shell.azure.com ,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。
選取 Azure 入口網站 右上方功能表列上的 [Cloud Shell] 按鈕。
若要使用 Azure Cloud Shell:
啟動 Cloud Shell。
選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。
透過在 Windows 和 Linux 上選取 Ctrl +Shift +V ;或在 macOS 上選取 Cmd +Shift +V ,將程式碼或命令貼到 Cloud Shell 工作階段中。
選取 Enter 鍵執行程式碼或命令。
如果您選擇在本機安裝和使用 PowerShell,本文會要求使用 Azure PowerShell 模組 1.0.0 版或更新版本。 執行 Get-Module -ListAvailable Az
以尋找安裝的版本。 如果您需要升級,請參閱安裝 Azure PowerShell 模組 。 如果正在本機執行 PowerShell,也需要執行 Connect-AzAccount
,以建立與 Azure 的連線。
如果您沒有 Azure 訂閱 ,請在開始之前,先建立 Azure 免費帳戶 。
本文需要 2.0.28 版或更新版本的 Azure CLI。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。
建立虛擬網路並啟用服務端點
建立虛擬網路,以包含您在本教學課程中建立的資源。
在入口網站的搜尋方塊中,輸入虛擬網路 。 選取搜尋結果中的 [虛擬網路] 。
選取 [+ 建立] 以建立新的虛擬網路。
在 [建立虛擬網路] 的 [基本資料] 索引標籤中,輸入或選取下列資訊。
設定
值
專案詳細資料
訂用帳戶
選取您的訂用帳戶。
資源群組
選取 [新建] 在 [名稱] 中輸入 test-rg 。 選取 [確定 ]。
名稱
輸入 vnet-1 。
區域
選取 [美國西部 2] 。
選取 [下一步]。
選取 [下一步]。
在 [IP 位址] 索引標籤的 [子網路] 中,選取 [預設] 子網路。
在 [編輯子網路] 中,輸入或選取下列資訊。
設定
值
名稱
輸入 subnet-1 。
服務端點
服務
在下拉式功能表中,選取 [Microsoft.Storage] 。
選取 [儲存]。
選取 [檢閱 + 建立] 。
選取 建立 。
建立虛擬網路之前,您必須為虛擬網路以及在本文中建立的所有其他資源,建立資源群組。 使用 New-AzResourceGroup 來建立資源群組。 下列範例會建立名為 test-rg 的資源群組:
$rg = @{
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzResourceGroup @rg
使用 New-AzVirtualNetwork 建立虛擬網路。 以下範例會建立一個名為 vnet-1 且位址首碼為 10.0.0.0/16 的虛擬網路。
$vnet = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
使用 New-AzVirtualNetworkSubnetConfig 建立子網路組態,然後使用 Set-AzVirtualNetwork 將子網路組態寫入至虛擬網路。 以下範例會將名為 subnet-1 的子網路新增至虛擬網路中,並為 Microsoft.Storage 建立服務端點。
$subnet = @{
Name = "subnet-1"
VirtualNetwork = $virtualNetwork
AddressPrefix = "10.0.0.0/24"
ServiceEndpoint = "Microsoft.Storage"
}
Add-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
建立虛擬網路之前,您必須為虛擬網路以及在本文中建立的所有其他資源,建立資源群組。 使用 az group create 來建立資源群組。 下列範例會在 westus2 位置建立名為 test-rg 的資源群組。
az group create \
--name test-rg \
--location westus2
使用 az network vnet create 建立具有一個子網路的虛擬網路。
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefix 10.0.0.0/24
在此範例中,系統會針對子網路 subnet-1 建立 Microsoft.Storage
的服務端點:
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--address-prefix 10.0.0.0/24 \
--service-endpoints Microsoft.Storage
限制子網路的網路存取
建立網路安全性群組和限制子網路網路存取的規則。
建立網路安全性群組
在入口網站的搜尋方塊中,輸入網路安全性群組 。 在搜尋結果中選取 [網路安全性群組] 。
選取 [+ 建立] 以建立新的網路安全性群組。
在 [建立網路安全性群組] 的 [基本資料] 索引標籤中,輸入或選取下列資訊。
設定
值
專案詳細資料
訂用帳戶
選取您的訂用帳戶。
資源群組
選取 [test-rg] 。
名稱
輸入 nsg-1 。
區域
選取 [美國西部 2] 。
選取 [檢閱 + 建立] 。
選取 建立 。
建立網路安全性群組規則
在入口網站的搜尋方塊中,輸入網路安全性群組 。 在搜尋結果中選取 [網路安全性群組] 。
選取 nsg-1 。
展開設定 。 選取 [輸出安全性規則] 。
選取 [+ 新增] 來新增輸出安全性規則。
在 [新增輸出安全性規則] 中輸入或選取以下資訊。
設定
值
來源
選取 [服務標記] 。
來源服務標籤
選取 [VirtualNetwork] 。
來源連接埠範圍
輸入 * 。
Destination
選取 [服務標記] 。
目的地服務標籤
選取儲存體 。
服務
選取自訂 。
目的地連接埠範圍
輸入 * 。
通訊協定
選取 [任何] 。
動作
選取允許 。
優先順序
輸入 100 。
名稱
輸入 allow-storage-all 。
選取 [新增]。
選取 [+ 新增] 來新增另一個輸出安全性規則。
在 [新增輸出安全性規則] 中輸入或選取以下資訊。
設定
值
來源
選取 [服務標記] 。
來源服務標籤
選取 [VirtualNetwork] 。
來源連接埠範圍
輸入 * 。
Destination
選取 [服務標記] 。
目的地服務標籤
選取 [網際網路] 。
服務
選取自訂 。
目的地連接埠範圍
輸入 * 。
通訊協定
選取 [任何] 。
動作
選取 [拒絕] 。
優先順序
輸入 110 。
名稱
輸入 deny-internet-all 。
選取 [新增]。
展開設定 。 選取 [子網路] 。
選取 [+ 建立關聯] 。
在 [已建立關聯的子網路] 中,輸入或選取下列資訊。
設定
值
虛擬網路
選取 [vnet-1 (test-rg)] 。
子網路
選取 [subnet-1] 。
選取 [確定]。
使用 New-AzNetworkSecurityRuleConfig 建立網路安全性群組安全性規則。 下列規則允許對指派給 Azure 儲存體服務之公用 IP 位址的輸出存取:
$r1 = @{
Name = "Allow-Storage-All"
Access = "Allow"
DestinationAddressPrefix = "Storage"
DestinationPortRange = "*"
Direction = "Outbound"
Priority = 100
Protocol = "*"
SourceAddressPrefix = "VirtualNetwork"
SourcePortRange = "*"
}
$rule1 = New-AzNetworkSecurityRuleConfig @r1
下列規則會拒絕對所有公用 IP 位址的存取。 上一個規則會因其具有較高優先順序而覆寫這項規則,從而允許對 Azure 儲存體之公用 IP 位址的存取。
$r2 = @{
Name = "Deny-Internet-All"
Access = "Deny"
DestinationAddressPrefix = "Internet"
DestinationPortRange = "*"
Direction = "Outbound"
Priority = 110
Protocol = "*"
SourceAddressPrefix = "VirtualNetwork"
SourcePortRange = "*"
}
$rule2 = New-AzNetworkSecurityRuleConfig @r2
使用 New-AzNetworkSecurityGroup 建立網路安全性群組。 下列範例會建立名為 nsg-1 的網路安全性群組。
$securityRules = @($rule1, $rule2)
$nsgParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "nsg-1"
SecurityRules = $securityRules
}
$nsg = New-AzNetworkSecurityGroup @nsgParams
使用 Set-AzVirtualNetworkSubnetConfig 將網路安全性群組與 subnet-1 子網路建立關聯,然後將子網路設定寫入虛擬網路。 以下範例將 nsg-1 網路安全性群組與 subnet-1 子網路建立關聯:
$subnetConfig = @{
VirtualNetwork = $VirtualNetwork
Name = "subnet-1"
AddressPrefix = "10.0.0.0/24"
ServiceEndpoint = "Microsoft.Storage"
NetworkSecurityGroup = $nsg
}
Set-AzVirtualNetworkSubnetConfig @subnetConfig
$virtualNetwork | Set-AzVirtualNetwork
使用 az network nsg create 建立網路安全性群組。 下列範例會建立名為 nsg-1 的網路安全性群組。
az network nsg create \
--resource-group test-rg \
--name nsg-1
請使用 az network vnet subnet update 將網路安全性群組與 subnet-1 子網路建立關聯。 以下範例將 nsg-1 網路安全性群組與 subnet-1 子網路建立關聯:
az network vnet subnet update \
--vnet-name vnet-1 \
--name subnet-1 \
--resource-group test-rg \
--network-security-group nsg-1
使用 az network nsg rule create 來建立安全性規則。 下列規則允許對指派給 Azure 儲存體服務之公用 IP 位址的輸出存取:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-Storage-All \
--access Allow \
--protocol "*" \
--direction Outbound \
--priority 100 \
--source-address-prefix "VirtualNetwork" \
--source-port-range "*" \
--destination-address-prefix "Storage" \
--destination-port-range "*"
每個網路安全性群組均包含數個預設的安全性規則 。 隨後的規則會覆寫允許對所有公用 IP 位址進行輸出存取的預設安全性規則。 destination-address-prefix "Internet"
選項會拒絕對所有公用 IP 位址的輸出存取。 上一個規則會因其具有較高優先順序而覆寫這項規則,從而允許對 Azure 儲存體之公用 IP 位址的存取。
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Deny-Internet-All \
--access Deny \
--protocol "*" \
--direction Outbound \
--priority 110 \
--source-address-prefix "VirtualNetwork" \
--source-port-range "*" \
--destination-address-prefix "Internet" \
--destination-port-range "*"
限制對 Azure 儲存體帳戶的網路存取
如果資源是透過已針對服務端點啟用的 Azure 服務建立,則限制其網路存取的必要步驟會因為服務而有所差異。 請參閱個別服務的文件,以取得每個服務的特定步驟。 本文的其餘部分包含限制 Azure 儲存體帳戶網路存取的步驟 (以範例形式說明)。
建立兩個儲存體帳戶
在入口網站的搜尋方塊中,輸入儲存體帳戶 。 選取搜尋結果中的儲存體帳戶 。
選取 [+ 建立] 以建立新的儲存體帳戶。
在 [建立儲存體帳戶] 中,輸入或選取下列資訊。
設定
值
專案詳細資料
訂用帳戶
選取您的訂用帳戶。
資源群組
選取 [test-rg] 。
[執行個體詳細資料]
儲存體帳戶名稱
輸入 allowedaccount(random-number) 。注意:儲存體帳戶名稱必須是唯一的。在名稱 allowedaccount
末尾新增亂數。
區域
選取 [美國西部 2] 。
效能
選取 [標準]。
備援性
選取 [本地備援儲存體 (LRS)] 。
選取 [下一步] ,直至到達 [資料保護] 索引標籤。
在 [復原] 中,取消選取所有選項。
選取 [檢閱 + 建立] 。
選取 建立 。
重複前面的步驟,使用以下資訊建立另一個儲存體帳戶。
設定
值
儲存體帳戶名稱
輸入 deniedaccount(random-number) 。
使用 New-AzStorageAccount 建立允許的 Azure 儲存體帳戶。
$storageAcctParams = @{
Location = 'westus2'
Name = 'allowedaccount'
ResourceGroupName = 'test-rg'
SkuName = 'Standard_LRS'
Kind = 'StorageV2'
}
New-AzStorageAccount @storageAcctParams
使用相同的命令建立遭拒絕的 Azure 儲存體帳戶,但將名稱變更為 deniedaccount
。
$storageAcctParams = @{
Location = 'westus2'
Name = 'deniedaccount'
ResourceGroupName = 'test-rg'
SkuName = 'Standard_LRS'
Kind = 'StorageV2'
}
New-AzStorageAccount @storageAcctParams
使用 az storage account create 建立兩個 Azure 儲存體帳戶。
storageAcctName1="allowedaccount"
az storage account create \
--name $storageAcctName1 \
--resource-group test-rg \
--sku Standard_LRS \
--kind StorageV2
使用相同的命令建立遭拒絕的 Azure 儲存體帳戶,但將名稱變更為 deniedaccount
。
storageAcctName2="deniedaccount"
az storage account create \
--name $storageAcctName2 \
--resource-group test-rg \
--sku Standard_LRS \
--kind StorageV2
建立檔案共用
在入口網站的搜尋方塊中,輸入儲存體帳戶 。 選取搜尋結果中的儲存體帳戶 。
選取 [allowedaccount(random-number)] 。
展開 [資料儲存體] 區段,然後選取 [檔案共用] 。
選取 [+ 檔案共用] 。
在 [新檔案共用] 中,輸入或選取下列資訊。
將其餘設定維持為預設值,然後選取 [檢閲 + 建立] 。
選取 建立 。
重複前面的步驟,在 [deniedaccount(random-number)] 中建立檔案共用。
建立允許的儲存體帳戶檔案共用
使用 Get-AzStorageAccountKey 取得允許的儲存體帳戶之儲存體帳戶金鑰。 在下一步中,您將使用此金鑰在允許的儲存體帳戶中建立檔案共用。
$storageAcctName1 = "allowedaccount"
$storageAcctParams1 = @{
ResourceGroupName = "test-rg"
AccountName = $storageAcctName1
}
$storageAcctKey1 = (Get-AzStorageAccountKey @storageAcctParams1).Value[0]
使用 New-AzStorageContext 建立儲存體帳戶和金鑰的內容。 內容包含儲存體帳戶名稱和帳戶金鑰。
$storageContext1 = New-AzStorageContext $storageAcctName1 $storageAcctKey1
使用 New-AzStorageShare 建立檔案共用。
$share1 = New-AzStorageShare file-share -Context $storageContext1
建立遭拒絕的儲存體帳戶檔案共用
使用 Get-AzStorageAccountKey 取得允許的儲存體帳戶之儲存體帳戶金鑰。 在下一步中,您將使用此金鑰在遭拒絕的儲存體帳戶中建立檔案共用。
$storageAcctName2 = "deniedaccount"
$storageAcctParams2 = @{
ResourceGroupName = "test-rg"
AccountName = $storageAcctName2
}
$storageAcctKey2 = (Get-AzStorageAccountKey @storageAcctParams2).Value[0]
使用 New-AzStorageContext 建立儲存體帳戶和金鑰的內容。 內容包含儲存體帳戶名稱和帳戶金鑰。
$storageContext2= New-AzStorageContext $storageAcctName2 $storageAcctKey2
使用 New-AzStorageShare 建立檔案共用。
$share2 = New-AzStorageShare file-share -Context $storageContext2
建立允許的儲存體帳戶檔案共用
請使用 az storage account show-connection-string 將儲存體帳戶的連接字串擷取至變數中。 在稍後步驟中,會使用連接字串來建立檔案共用。
saConnectionString1=$(az storage account show-connection-string \
--name $storageAcctName1 \
--resource-group test-rg \
--query 'connectionString' \
--out tsv)
使用 az storage share create 在儲存體帳戶中建立檔案共用。 在稍後步驟中,會裝載此檔案共用,以確認其網路存取。
az storage share create \
--name file-share \
--quota 2048 \
--connection-string $saConnectionString1 > /dev/null
建立遭拒絕的儲存體帳戶檔案共用
請使用 az storage account show-connection-string 將儲存體帳戶的連接字串擷取至變數中。 在稍後步驟中,會使用連接字串來建立檔案共用。
saConnectionString2=$(az storage account show-connection-string \
--name $storageAcctName2 \
--resource-group test-rg \
--query 'connectionString' \
--out tsv)
使用 az storage share create 在儲存體帳戶中建立檔案共用。 在稍後步驟中,會裝載此檔案共用,以確認其網路存取。
az storage share create \
--name file-share \
--quota 2048 \
--connection-string $saConnectionString2 > /dev/null
拒絕所有對儲存體帳戶的網路存取
根據預設,儲存體帳戶會接受來自任何網路用戶端的網路連線。 若要限制對儲存體帳戶的網路存取,可以將儲存體帳戶設定為僅接受來自特定網路的連線。 在此範例中,您將儲存體帳戶設定為僅接受來自先前建立的虛擬網路子網路的連線。
在入口網站的搜尋方塊中,輸入儲存體帳戶 。 選取搜尋結果中的儲存體帳戶 。
選取 [allowedaccount(random-number)] 。
展開 [安全性 + 網路] 並選取 [網路] 。
在 [防火牆與虛擬網路] 索引標籤中,在 [公用網路存取] 中,選取 [已從選取的虛擬網路和 IP 位址啟用] 。
在 [虛擬網路] 中,選取 [+ 新增現有的虛擬網路] 。
在 [新增網路] 中,輸入或選取下列資訊。
設定
值
訂用帳戶
選取您的訂用帳戶。
虛擬網路
選取 [vnet-1] 。
子網路
選取 [subnet-1] 。
選取 [新增]。
選取 [儲存]。
重複前面的步驟,拒絕對 deniedaccount(random-number) 的網路存取。
使用 Update-AzStorageAccountNetworkRuleSet 拒絕對您先前建立之虛擬網路和子網路以外的儲存體帳戶的存取。 網路存取遭拒絕後,就無法從任何網路存取儲存體帳戶。
$storageAcctParams1 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName1
DefaultAction = "Deny"
}
Update-AzStorageAccountNetworkRuleSet @storageAcctParams1
$storageAcctParams2 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName2
DefaultAction = "Deny"
}
Update-AzStorageAccountNetworkRuleSet @storageAcctParams2
僅啟用來自虛擬網路子網路的網路存取
使用 Get-AzVirtualNetwork 擷取已建立的虛擬網路,然後使用 Get-AzVirtualNetworkSubnetConfig 將私人子網路物件擷取至變數:
$privateSubnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-1"
}
$privateSubnet = Get-AzVirtualNetwork @privateSubnetParams | Get-AzVirtualNetworkSubnetConfig -Name "subnet-1"
使用 Add-AzStorageAccountNetworkRule 允許 subnet-1 子網路對儲存體帳戶進行網路存取。
$networkRuleParams1 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName1
VirtualNetworkResourceId = $privateSubnet.Id
}
Add-AzStorageAccountNetworkRule @networkRuleParams1
$networkRuleParams2 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName2
VirtualNetworkResourceId = $privateSubnet.Id
}
Add-AzStorageAccountNetworkRule @networkRuleParams2
根據預設,儲存體帳戶會接受來自任何網路用戶端的網路連線。 若要限制對選取網路的存取,請使用 az storage account update 將預設動作變更為「拒絕」 。 網路存取遭拒絕後,就無法從任何網路存取儲存體帳戶。
az storage account update \
--name $storageAcctName1 \
--resource-group test-rg \
--default-action Deny
az storage account update \
--name $storageAcctName2 \
--resource-group test-rg \
--default-action Deny
僅啟用來自虛擬網路子網路的網路存取
使用 az storage account network-rule add 允許從 subnet-1 子網路對儲存體帳戶的網路存取。
az storage account network-rule add \
--resource-group test-rg \
--account-name $storageAcctName1 \
--vnet-name vnet-1 \
--subnet subnet-1
az storage account network-rule add \
--resource-group test-rg \
--account-name $storageAcctName2 \
--vnet-name vnet-1 \
--subnet subnet-1
套用原則以允許存取有效的儲存體帳戶
您可以建立服務端點原則。 原則可確保虛擬網路中的使用者只能存取安全且允許的 Azure 儲存體帳戶。 此原則包含套用至透過服務端點連線至儲存體的虛擬網路子網路的已允許儲存體帳戶清單。
建立服務端點原則
本節會使用允許透過服務端點存取的資源清單,以建立原則定義。
在入口網站的搜尋方塊中,輸入服務端點原則 。 在搜尋結果中,選取 [服務端點原則] 。
選取 [+ 建立] 以建立新的服務端點原則。
在 [建立服務端點原則] 的 [基本資料] 索引標籤中,輸入或選取下列資訊。
設定
值
專案詳細資料
訂用帳戶
選取您的訂用帳戶。
資源群組
選取 [test-rg] 。
[執行個體詳細資料]
名稱
輸入 service-endpoint-policy 。
Location
選取 [美國西部 2] 。
選取 [下一步:原則定義] 。
在 [資源] 中選取 [+ 新增資源] 。
在 [新增資源] 中,輸入或選取下列資訊:
設定
值
服務
選取 Microsoft.Storage 。
範圍
選取 [單一帳戶]
訂用帳戶
選取您的訂用帳戶。
資源群組
選取 [test-rg] 。
資源
選取 [allowedaccount(random-number)]
選取 [新增]。
選取 [檢閱 + 建立] 。
選取 建立 。
若要擷取第一個 (允許的) 儲存體帳戶之資源識別碼,請使用 Get-AzStorageAccount 。
$storageAcctParams1 = @{
ResourceGroupName = "test-rg"
Name = $storageAcctName1
}
$resourceId = (Get-AzStorageAccount @storageAcctParams1).id
若要建立允許先前資源的原則定義,請使用 New-AzServiceEndpointPolicyDefinition 。
$policyDefinitionParams = @{
Name = "policy-definition"
Description = "Service Endpoint Policy Definition"
Service = "Microsoft.Storage"
ServiceResource = $resourceId
}
$policyDefinition = New-AzServiceEndpointPolicyDefinition @policyDefinitionParams
使用 New-AzServiceEndpointPolicy 建立具有原則定義的服務端點原則。
$sepolicyParams = @{
ResourceGroupName = "test-rg"
Name = "service-endpoint-policy"
Location = "westus2"
ServiceEndpointPolicyDefinition = $policyDefinition
}
$sepolicy = New-AzServiceEndpointPolicy @sepolicyParams
服務端點原則會套用至所有服務端點。 首先建立服務端點原則。 然後在此原則下為要為此子網路核准的 Azure 儲存體帳戶建立原則定義
使用 az storage account show 取得允許的儲存體帳戶之資源識別碼。
serviceResourceId=$(az storage account show --name allowedaccount --query id --output tsv)
建立服務端點原則
az network service-endpoint policy create \
--resource-group test-rg \
--name service-endpoint-policy \
--location westus2
建立並新增允許先前的 Azure 儲存體帳戶加入服務端點原則之原則定義
az network service-endpoint policy-definition create \
--resource-group test-rg \
--policy-name service-endpoint-policy \
--name policy-definition \
--service "Microsoft.Storage" \
--service-resources $serviceResourceId
將服務端點原則建立關聯至子網路
建立服務端點原則之後,您會將其與目標子網路建立關聯,並使用 Azure 儲存體的服務端點設定。
在入口網站的搜尋方塊中,輸入服務端點原則 。 在搜尋結果中,選取 [服務端點原則] 。
選取 [service-endpoint-policy] 。
展開 [設定] 並選取 [已建立關聯的子網路] 。
選取 [+ 編輯子網路關聯] 。
在 [編輯子網路關聯] 中,選取 [vnet-1] 和 [subnet-1] 。
選取套用 。
使用 Set-AzVirtualNetworkSubnetConfig 將服務端點原則與子網路相關聯。
$subnetConfigParams = @{
VirtualNetwork = $VirtualNetwork
Name = "subnet-1"
AddressPrefix = "10.0.0.0/24"
NetworkSecurityGroup = $nsg
ServiceEndpoint = "Microsoft.Storage"
ServiceEndpointPolicy = $sepolicy
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
$virtualNetwork | Set-AzVirtualNetwork
使用 az network vnet subnet update 將服務端點原則與子網路相關聯。
az network vnet subnet update \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--service-endpoints Microsoft.Storage \
--service-endpoint-policy service-endpoint-policy
警告
將原則與指定子網路建立關聯之前,請確認從子網路存取的所有資源已新增至原則定義。 一旦與原則相關聯,服務端點上只會允許存取列為允許 的資源。
請確保將與服務端點原則建立關聯的子網路中,不存在任何受控 Azure 服務。
根據此子網路的服務端點原則,在所有區域中存取 Azure 儲存體資源將會受到限制。
驗證對 Azure 儲存體帳戶的存取限制
若要測試對儲存體帳戶的網路存取,請將 VM 部署至子網路。
部署虛擬機器
在入口網站的搜尋方塊中,輸入虛擬機器 。 在搜尋結果中,選取 [虛擬機器 ]。
在 [建立虛擬機器] 的 [基本] 索引標籤中,輸入或選取下列資訊:
設定
值
專案詳細資料
訂用帳戶
選取您的訂用帳戶。
資源群組
選取 [test-rg] 。
[執行個體詳細資料]
虛擬機器名稱
輸入 vm-1 。
區域
選取 [(美國) 美國西部 2] 。
可用性選項
選取 [不需要基礎結構備援] 。
安全性類型
選取 [標準]。
映像
選取 [Windows Server 2022 Datacenter - x64 Gen2] 。
大小
選取大小。
系統管理員帳戶
使用者名稱
輸入使用者名稱。
密碼
輸入密碼。
確認密碼
再次輸入密碼。
輸入連接埠規則
選取 [下一步:磁碟] ,然後選取 [下一步:網路] 。
在 [網路] 索引標籤中,輸入或選取以下資訊。
設定
值
網路介面
虛擬網路
選取 [vnet-1] 。
子網路
選取 [subnet-1 (10.0.0.0/24)] 。
公用 IP
選取 [無]。
NIC 網路安全性群組
選取 [無]。
將其餘設定維持為預設值,然後選取 [檢閱 + 建立] 。
選取 建立 。
使用 New-AzVM 在 subnet-1 子網路中建立虛擬機器。 執行接下來的命令時,系統會提示您輸入認證。 您輸入的值會設定為 VM 的使用者名稱和密碼。
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
Name = "vm-1"
}
New-AzVm @vmParams
使用 az vm create 在 subnet-1 子網路中建立虛擬機器。
az vm create \
--resource-group test-rg \
--name vm-1 \
--image Win2022Datacenter \
--admin-username azureuser \
--vnet-name vnet-1 \
--subnet subnet-1
等候虛擬機器完成部署,再繼續進行後續步驟。
確認存取允許的 儲存體帳戶。
登入 Azure 入口網站 。
在入口網站的搜尋方塊中,輸入儲存體帳戶 。 選取搜尋結果中的儲存體帳戶 。
選取 [allowedaccount(random-number)] 。
展開 [安全性 + 網路] 並選取 [存取金鑰] 。
複製 [key1] 值。 您可以使用此金鑰將磁碟機對應至先前建立的虛擬機器中的儲存體帳戶。
在入口網站的搜尋方塊中,輸入虛擬機器 。 在搜尋結果中,選取 [虛擬機器 ]。
選取 [vm-1] 。
展開 [作業] 。 選取 [執行命令] 。
選取 [RunPowerShellScript] 。
在 [執行命令指令碼] 中貼上下列指令碼。
## Enter the storage account key for the allowed storage account that you recorded earlier.
$storageAcctKey1 = (pasted from procedure above)
$acctKey = ConvertTo-SecureString -String $storageAcctKey1 -AsPlainText -Force
## Replace the login account with the name of the storage account you created.
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList ("Azure\allowedaccount"), $acctKey
## Replace the storage account name with the name of the storage account you created.
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\allowedaccount.file.core.windows.net\file-share" -Credential $credential
選取執行 。
如果磁碟機對應成功,則 [輸出] 方塊中的輸出類似於以下範例:
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Z FileSystem \\allowedaccount.file.core.windows.net\fil..
確認拒絕存取 [已拒絕] 的儲存體帳戶
在入口網站的搜尋方塊中,輸入儲存體帳戶 。 選取搜尋結果中的儲存體帳戶 。
選取 [deniedaccount(random-number)] 。
展開 [安全性 + 網路] 並選取 [存取金鑰] 。
複製 [key1] 值。 您可以使用此金鑰將磁碟機對應至先前建立的虛擬機器中的儲存體帳戶。
在入口網站的搜尋方塊中,輸入虛擬機器 。 在搜尋結果中,選取 [虛擬機器 ]。
選取 [vm-1] 。
展開 [作業] 。 選取 [執行命令] 。
選取 [RunPowerShellScript] 。
在 [執行命令指令碼] 中貼上下列指令碼。
## Enter the storage account key for the denied storage account that you recorded earlier.
$storageAcctKey2 = (pasted from procedure above)
$acctKey = ConvertTo-SecureString -String $storageAcctKey2 -AsPlainText -Force
## Replace the login account with the name of the storage account you created.
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList ("Azure\deniedaccount"), $acctKey
## Replace the storage account name with the name of the storage account you created.
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\deniedaccount.file.core.windows.net\file-share" -Credential $credential
選取執行 。
您在 [輸出] 方塊中收到以下錯誤訊息:
New-PSDrive : Access is denied
At line:1 char:1
+ New-PSDrive -Name Z -PSProvider FileSystem -Root "\\deniedaccount8675 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Z:PSDriveInfo) [New-PSDrive], Win32Exception
+ FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand
磁碟機對應遭拒絕,因為服務端點原則限制了對儲存體帳戶的存取。
當完成了使用您所建立的資源時,您可以刪除資源群組及其所有資源。
在 Azure 入口網站中,搜尋並選取 [資源群組]。
在 [資源群組] 頁面上,選取 [test-rg] 資源群組。
在 [test-rg] 頁面上,選取 [刪除資源群組] 。
在 [輸入資源群組名稱以確認刪除] 中輸入 test-rg ,然後選取 [刪除] 。
您可以使用 Remove-AzResourceGroup 來移除不再需要的資源群組,以及其所包含的所有資源:
$params = @{
Name = "test-rg"
Force = $true
}
Remove-AzResourceGroup @params
請使用 az group delete 來移除不再需要的資源群組以及其所包含的所有資源。
az group delete \
--name test-rg \
--yes \
--no-wait
下一步
在本教學課程中,您已建立服務端點原則,並將其與子網路產生關聯。 若要深入了解服務端點原則,請參閱服務端點原則概觀 。