共用方式為


Azure CLI - 使用私人連結限制受控磁碟的匯入/匯出存取權

適用於:✔️ Linux 虛擬機 ✔️ 彈性規模設定

您可以使用 私人端點 來限制受控磁碟的匯出和匯入,並透過 Azure 虛擬網路上的用戶端透過 Private Link 安全地存取資料。 您的受管磁碟服務的私人端點會使用虛擬網路位址空間中的 IP 位址。 在其虛擬網路上,用戶端與受控磁碟之間的網路流量僅透過該虛擬網路和 Microsoft 骨幹網路上的私有連結進行傳輸,避免暴露於公用互聯網。

若要使用私人連結匯出/匯入受控磁碟,請先建立磁碟存取資源,並藉由建立私人端點,將它連結至相同訂用帳戶中的虛擬網路。 然後,將磁碟或快照與磁碟存取執行個體建立關聯。 最後,將磁碟或快照集的 NetworkAccessPolicy 屬性設定為 AllowPrivate。 這會限制對虛擬網路的存取。

您可以將 NetworkAccessPolicy 屬性設定為 , DenyAll 以防止任何人匯出磁碟或快照集的資料。 NetworkAccessPolicy 屬性的預設值為 AllowAll

局限性

  • 您無法使用相同的磁碟存取資源同時匯入或匯出超過 100 個磁碟或快照
  • 您無法上傳到同時具有磁碟存取資源和磁碟加密集的磁碟
  • 除了套用至個別磁碟的縮放目標之外,磁碟存取資源還有更多以資料輸入/輸出為中心的縮放目標。 這些限制會累積套用至與磁碟存取資源相關聯的所有磁碟。 詳情請參見 此處

登入您的訂閱並設定變數

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 

後續步驟