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

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

可以使用 专用终结点 来限制托管磁盘的导出和导入,并通过 Azure 虚拟网络上的客户端通过 专用链接 安全地访问数据。 专用终结点为托管磁盘服务使用虚拟网络地址空间中的 IP 地址。 其虚拟网络上的客户端与托管磁盘之间的网络流量仅通过虚拟网络和Microsoft主干网络上的专用链接进行遍历,从而消除了来自公共 Internet 的暴露。

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

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

局限性

  • 不能使用相同的磁盘访问资源同时导入或导出 100 多个磁盘或快照
  • 不能将数据上传到同时具有磁盘访问资源和磁盘加密集的磁盘
  • 除了应用于单个磁盘的缩放目标外,磁盘访问资源还具有更多的缩放目标,这些目标以数据入口/出口为中心。 这些限制累积应用于与磁盘访问资源关联的所有磁盘。 有关详细信息,请参阅 此处

登录到订阅并设置变量

subscriptionId=yourSubscriptionId
resourceGroupName=yourResourceGroupName
region=chinanorth2
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 cloud set -n AzureChinaCloud
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.chinacloudapi.cn"

az network private-dns link vnet create --resource-group $resourceGroupName \
    --zone-name "privatelink.blob.core.chinacloudapi.cn" \
    --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.chinacloudapi.cn" \
   --zone-name disks
resourceGroupName=yourResourceGroupName
region=chinanorth2
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=chinanorth2
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 

后续步骤