你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
创建并关联服务终结点策略
本文内容
借助服务终结点策略,可越过服务终结点筛选虚拟网络流量,将范围限制到特定的 Azure 资源。 如果不熟悉服务终结点策略,请参阅服务终结点策略概述 了解详细信息。
本教程介绍如何执行下列操作:
创建虚拟网络。
添加子网并启用 Azure 存储的服务终结点。
创建两个 Azure 存储帐户,并允许从虚拟网络中的子网对其进行网络访问。
创建服务终结点策略以只允许访问其中一个存储帐户。
将虚拟机 (VM) 部署到每个子网。
确认从子网对允许的存储账户进行访问。
确认拒绝从子网访问不允许的存储帐户。
先决条件
Azure Cloud Shell
Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 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
查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module (安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount
以创建与 Azure 的连接。
如果没有 Azure 订阅 ,请在开始之前创建一个 Azure 免费帐户 。
本文需要 Azure CLI 2.0.28 或更高版本。 如果使用 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 创建虚拟网络。 以下示例使用地址前缀“10.0.0.0/16”创建一个名为“vnet-1”的虚拟网络 。
$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-app1”。
区域
选择“美国西部 2” 。
选择“查看 + 创建” 。
选择“创建”。
创建网络安全组规则
在门户的搜索框中,输入网络安全组 。 在搜索结果中选择网络安全组 。
选择nsg-1 。
展开设置 。 选择出站安全规则 。
选择 + 添加 ,以添加新的出站安全规则。
在“添加出站安全规则”中,输入或选择以下信息。
设置
值
源
选择“服务标记”。
源服务标记
选择“VirtualNetwork ”。
源端口范围
输入 * 。
目标
选择“服务标记”。
目标服务标记
选择“存储” 。
服务
选择“自定义”。
目标端口范围
输入 * 。
协议
选择“任何” 。
操作
选择“允许” 。
优先级
输入 100 。
名称
输入allow-storage-all 。
选择 添加 。
选择 + 添加 ,以添加另一个出站安全规则。
在“添加出站安全规则”中,输入或选择以下信息。
设置
值
源
选择“服务标记”。
源服务标记
选择“VirtualNetwork ”。
源端口范围
输入 * 。
目标
选择“服务标记”。
目标服务标记
选择“Internet”。
服务
选择“自定义”。
目标端口范围
输入 * 。
协议
选择“任何” 。
操作
选择“拒绝” 。
优先级
输入 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 将默认操作更改为 Deny 。 在拒绝网络访问后,将无法从任何网络访问存储帐户。
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 。
位置
选择“美国西部 2”。
选择下一步:策略定义 。
在资源 中选择 + 添加资源 。
在添加资源 中,输入或选择以下信息:
设置
值
服务
选择“Microsoft.Storage”。
范围
选择单个帐户
订阅
选择订阅。
资源组
选择“test-rg”。
资源
选择 allowedaccount(random-number)
选择 添加 。
选择“查看 + 创建” 。
选择“创建”。
若要检索第一个(允许的)存储帐户的资源 ID,请使用 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 ,获取允许的存储帐户的资源 ID。
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”。
区域
选择“(US) 美国西部 2”。
可用性选项
选择“无需基础结构冗余”。
安全类型
选择“标准”。
映像
选择“Windows Server 2022 Datacenter - x64 Gen2”。
大小
选择一个大小。
管理员帐户
用户名
输入用户名。
Password
输入密码。
确认密码
再次输入密码。
入站端口规则
选择下一步: 磁盘 ,然后选择下一步: 网络 。
在“网络”中,输入或选择以下信息。
设置
值
网络接口
虚拟网络
选择“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 子网中创建 VM。
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
后续步骤
在本教程中,你创建了一个服务终结点策略并将其关联到了子网。 要详细了解服务终结点策略,请参阅服务终结点策略概述 。