Azure CLI - 使用 Private Link 限制受控磁碟的匯入/匯出存取

適用於:✔️ Linux VM ✔️ 彈性擴展集

您可以使用私人端點來限制受控磁碟的匯出和匯入,並透過 Azure 虛擬網路上用戶端的 Private Link 安全地存取資料。 私人端點會使用來自虛擬網路位址空間的 IP 位址來處理您的受控磁碟服務。 虛擬網路上的用戶端與受控磁碟之間的網路流量僅會流經虛擬網路和 Microsoft 骨幹網路上的私人連結,以排除公開網際網路的風險。

若要使用 Private Link 來匯出/匯入受控磁碟,請先建立一個磁碟存取資源,並藉由建立私人端點,將其連結至相同訂用帳戶中的虛擬網路。 然後,將磁碟或快照集與磁碟存取的執行個體產生關聯。 最後,將磁碟或快照集的 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 

下一步