你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure CLI - 使用专用链接限制对托管磁盘的导入/导出访问

适用于:✔️ Linux VM ✔️ 灵活规模集

可以使用专用终结点来限制托管磁盘的导出和导入,并通过专用链接从 Azure 虚拟网络上的客户端安全地访问数据。 专用终结点将虚拟网络地址空间中的 IP 地址用于托管磁盘服务。 虚拟网络上客户端与托管磁盘之间的网络流量仅穿过虚拟网络以及 Microsoft 主干网络上的专用链接,因此不会从公共 Internet 公开。

若要使用专用链接导出/导入托管磁盘,首先要创建磁盘访问资源,并通过创建专用终结点将其链接到同一订阅中的虚拟网络。 然后,将磁盘或快照与磁盘访问的实例相关联。 最后,将磁盘或快照的 NetworkAccessPolicy 属性设置为 AllowPrivate。 这将限制对虚拟网络的访问。

可以将 NetworkAccessPolicy 属性设置为 DenyAll,以防止任何人导出磁盘或快照的数据。 NetworkAccessPolicy 属性的默认值为 AllowAll

限制

  • 同一磁盘访问对象不能同时导入或导出超过 5 个磁盘或快照。
  • 不能上传到同时具有磁盘访问对象和磁盘加密集的磁盘。

登录到订阅并设置变量

subscriptionId=yourSubscriptionId
resourceGroupName=yourResourceGroupName
region=northcentralus
diskAccessName=yourDiskAccessForPrivateLinks
vnetName=yourVNETForPrivateLinks
subnetName=yourSubnetForPrivateLinks
privateEndPointName=yourPrivateLinkForSecureMDExportImport
privateEndPointConnectionName=yourPrivateLinkConnection

#The name of an existing disk which is the source of the snapshot
sourceDiskName=yourSourceDiskForSnapshot

#The name of the new snapshot which will be secured via Private Links
snapshotNameSecuredWithPL=yourSnapshotNameSecuredWithPL

az login

az account set --subscription $subscriptionId

使用 Azure CLI 创建磁盘访问

az disk-access create -n $diskAccessName -g $resourceGroupName -l $region

diskAccessId=$(az disk-access show -n $diskAccessName -g $resourceGroupName --query [id] -o tsv)

创建虚拟网络

专用终结点不支持网络安全组 (NSG) 等网络策略。 若要在给定的子网上部署专用终结点,需要在该子网上显式配置禁用设置。

az network vnet create --resource-group $resourceGroupName \
    --name $vnetName \
    --subnet-name $subnetName

禁用子网专用终结点策略

Azure 会将资源部署到虚拟网络中的子网,因此,你需要更新子网,以禁用专用终结点网络策略。

az network vnet subnet update --resource-group $resourceGroupName \
    --name $subnetName  \
    --vnet-name $vnetName \
    --disable-private-endpoint-network-policies true

为磁盘访问对象创建专用终结点

az network private-endpoint create --resource-group $resourceGroupName \
    --name $privateEndPointName \
    --vnet-name $vnetName  \
    --subnet $subnetName \
    --private-connection-resource-id $diskAccessId \
    --group-ids disks \
    --connection-name $privateEndPointConnectionName

配置专用 DNS 区域

创建存储 blob 域的专用 DNS 区域,创建与虚拟网络关联的链接,并创建 DNS 区域组以将专用终结点与专用 DNS 区域相关联。

az network private-dns zone create --resource-group $resourceGroupName \
    --name "privatelink.blob.core.windows.net"

az network private-dns link vnet create --resource-group $resourceGroupName \
    --zone-name "privatelink.blob.core.windows.net" \
    --name yourDNSLink \
    --virtual-network $vnetName \
    --registration-enabled false 

az network private-endpoint dns-zone-group create \
   --resource-group $resourceGroupName \
   --endpoint-name $privateEndPointName \
   --name yourZoneGroup \
   --private-dns-zone "privatelink.blob.core.windows.net" \
   --zone-name disks
resourceGroupName=yourResourceGroupName
region=northcentralus
diskAccessName=yourDiskAccessName
diskName=yourDiskName
diskSkuName=Standard_LRS
diskSizeGB=128

diskAccessId=$(az resource show -n $diskAccessName -g $resourceGroupName --namespace Microsoft.Compute --resource-type diskAccesses --query [id] -o tsv)

az disk create -n $diskName \
-g $resourceGroupName \
-l $region \
--size-gb $diskSizeGB \
--sku $diskSkuName \
--network-access-policy AllowPrivate \
--disk-access $diskAccessId 
resourceGroupName=yourResourceGroupName
region=northcentralus
diskAccessName=yourDiskAccessName
sourceDiskName=yourSourceDiskForSnapshot
snapshotNameSecuredWithPL=yourSnapshotName

diskId=$(az disk show -n $sourceDiskName -g $resourceGroupName --query [id] -o tsv)

diskAccessId=$(az resource show -n $diskAccessName -g $resourceGroupName --namespace Microsoft.Compute --resource-type diskAccesses --query [id] -o tsv)

az snapshot create -n $snapshotNameSecuredWithPL \
-g $resourceGroupName \
-l $region \
--source $diskId \
--network-access-policy AllowPrivate \
--disk-access $diskAccessId 

后续步骤