網路介面 (NIC):維護指定虛擬網路/子網路中私人 IP 位址的網路介面。 這是當您部署虛擬機 (VM) 時所部署的完全相同資源,但是不是指派給 VM,而是由私人端點所擁有。
私人功能變數名稱系統 (DNS) 區域:如果您之前尚未為此虛擬網路部署私人端點,則會為您的虛擬網路部署新的私人 DNS 區域。 同時也會為此 DNS 區域中的儲存體帳戶建立 DNS A 記錄。 如果您已在此虛擬網路中部署私人端點,新的儲存體帳戶 A 記錄將會新增至現有 DNS 區域。 部署 DNS 區域是選擇性的。 不過,強烈建議您使用AD服務主體或使用FileREST API掛接 Azure 檔案共用,而且這是必要專案。
# Disable private endpoint network policies$subnet.PrivateEndpointNetworkPolicies = "Disabled"$virtualNetwork = $virtualNetwork | `
Set-AzVirtualNetwork -ErrorAction Stop
# Create a private link service connection to the storage account.$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
-Name"$storageAccountName-Connection" `
-PrivateLinkServiceId$storageAccount.Id `
-GroupId"file" `
-ErrorAction Stop
# Create a new private endpoint.$privateEndpoint = New-AzPrivateEndpoint `
-ResourceGroupName$storageAccountResourceGroupName `
-Name"$storageAccountName-PrivateEndpoint" `
-Location$virtualNetwork.Location `
-Subnet$subnet `
-PrivateLinkServiceConnection$privateEndpointConnection `
-ErrorAction Stop
建立 Azure 私人 DNS 區域可讓儲存體帳戶的原始名稱 (例如 storageaccount.file.core.windows.net) 解析為虛擬網路內的私人 IP。 雖然從建立私人端點的角度來看,這是選擇性項目,但直接使用 AD 使用者主體來掛接 Azure 檔案共用或透過 REST API 來存取時,這確實是必要項目。
PowerShell
# Get the desired storage account suffix (core.windows.net for public cloud).# This is done like this so this script will seamlessly work for non-public Azure.$storageAccountSuffix = Get-AzContext | `
Select-Object -ExpandProperty Environment | `
Select-Object -ExpandProperty StorageEndpointSuffix
# For public cloud, this will generate the following DNS suffix:# privatelink.file.core.windows.net.$dnsZoneName = "privatelink.file.$storageAccountSuffix"# Find a DNS zone matching desired name attached to this virtual network.$dnsZone = Get-AzPrivateDnsZone | `
Where-Object { $_.Name -eq$dnsZoneName } | `
Where-Object {
$privateDnsLink = Get-AzPrivateDnsVirtualNetworkLink `
-ResourceGroupName$_.ResourceGroupName `
-ZoneName$_.Name `
-ErrorAction SilentlyContinue
$privateDnsLink.VirtualNetworkId -eq$virtualNetwork.Id
}
if ($null -eq$dnsZone) {
# No matching DNS zone attached to virtual network, so create new one.$dnsZone = New-AzPrivateDnsZone `
-ResourceGroupName$virtualNetworkResourceGroupName `
-Name$dnsZoneName `
-ErrorAction Stop
$privateDnsLink = New-AzPrivateDnsVirtualNetworkLink `
-ResourceGroupName$virtualNetworkResourceGroupName `
-ZoneName$dnsZoneName `
-Name"$virtualNetworkName-DnsLink" `
-VirtualNetworkId$virtualNetwork.Id `
-ErrorAction Stop
}
建立 Azure 私人 DNS 區域可讓儲存體帳戶的原始名稱 (例如 storageaccount.file.core.windows.net) 解析為虛擬網路內的私人 IP。 雖然從建立私人端點的角度來看,這是選擇性項目,但使用 AD 使用者主體來掛接 Azure 檔案共用或透過 REST API 來存取時,這確實是必要項目。
Bash
# Get the desired storage account suffix (core.windows.net for public cloud).# This is done like this so this script will seamlessly work for non-public Azure.
storageAccountSuffix=$(az cloud show \
--query "suffixes.storageEndpoint" | \
tr -d '"')
# For public cloud, this will generate the following DNS suffix:# privatelink.file.core.windows.net.
dnsZoneName="privatelink.file.$storageAccountSuffix"# Find a DNS zone matching desired name attached to this virtual network.
possibleDnsZones=""
possibleDnsZones=$(az network private-dns zone list \
--query "[?name == '$dnsZoneName'].id" \
--output tsv)
dnsZone=""
possibleDnsZone=""for possibleDnsZone in$possibleDnsZonesdo
possibleResourceGroupName=$(az resource show \
--ids $possibleDnsZone \
--query "resourceGroup" | \
tr -d '"')
link=$(az network private-dns link vnet list \
--resource-group $possibleResourceGroupName \
--zone-name $dnsZoneName \
--query "[?virtualNetwork.id == '$virtualNetwork'].id" \
--output tsv)
if [ -z $link ]
thenecho"1" > /dev/null
else
dnsZoneResourceGroup=$possibleResourceGroupName
dnsZone=$possibleDnsZonebreakfidoneif [ -z $dnsZone ]
then# No matching DNS zone attached to virtual network, so create a new one
dnsZone=$(az network private-dns zone create \
--resource-group $virtualNetworkResourceGroupName \
--name $dnsZoneName \
--query "id" | \
tr -d '"')
az network private-dns link vnet create \
--resource-group $virtualNetworkResourceGroupName \
--zone-name $dnsZoneName \
--name "$virtualNetworkName-DnsLink" \
--virtual-network $virtualNetwork \
--registration-enabled false \
--output none
dnsZoneResourceGroup=$virtualNetworkResourceGroupNamefi
現在您已有私人 DNS 區域的參考,接下來您必須為儲存體帳戶建立 A 記錄。
Azure CLI
privateEndpointNIC=$(az network private-endpoint show \
--ids$privateEndpoint \
--query"networkInterfaces[0].id" | \
tr -d'"')
privateEndpointIP=$(az network nic show \
--ids$privateEndpointNIC \
--query"ipConfigurations[0].privateIPAddress" | \
tr -d'"')
az network private-dns record-set a create \
--resource-group$dnsZoneResourceGroup \
--zone-name$dnsZoneName \
--name$storageAccountName \
--output none
az network private-dns record-set a add-record \
--resource-group$dnsZoneResourceGroup \
--zone-name$dnsZoneName \
--record-set-name$storageAccountName \
--ipv4-address$privateEndpointIP \
--output none
# This assumes $storageAccount is still defined from the beginning of this of this guide.$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
# This assumes $storageAccountResourceGroupName and $storageAccountName # are still defined from the beginning of this guide.az storage account update \
--resource-group$storageAccountResourceGroupName \
--name$storageAccountName \
--bypass"AzureServices" \
--default-action"Deny" \
--output none