Azure Files와 Azure 파일 동기화는 Azure 파일 공유에 액세스하기 위한 다음과 같은 두 가지 기본 유형의 엔드포인트를 제공합니다.
퍼블릭 엔드포인트 - 공용 IP 주소를 사용하며 전 세계 어디서나 액세스할 수 있습니다.
프라이빗 엔드포인트 - 가상 네트워크 내에 존재하며 해당 가상 네트워크의 주소 공간 내에서 개인 IP 주소를 사용합니다.
Azure Files와 Azure 파일 동기화 모두 Azure 관리 개체(스토리지 계정 및 스토리지 동기화 서비스)는 퍼블릭 엔드포인트와 프라이빗 엔드포인트를 모두 제어합니다. 스토리지 계정은 Blob 또는 큐와 같은 다른 스토리지 리소스뿐만 아니라 여러 파일 공유를 배포할 수 있는 공유 스토리지 풀을 나타내는 관리 구문입니다. 스토리지 동기화 서비스는 등록된 서버를 나타내는 관리 구문입니다. 이 등록된 서버는 Azure 파일 동기화와 신뢰 관계가 설정된 Windows 파일 서버와 동기화 관계의 토폴로지를 정의하는 동기화 그룹으로 구성되어 있습니다.
이 문서에서는 Azure Files 및 Azure 파일 동기화의 네트워킹 엔드포인트를 구성하는 방법을 중점적으로 설명합니다. Azure 파일 동기화로 온-프레미스 캐싱을 사용하는 대신 Azure 파일 공유에 직접 액세스하도록 네트워킹 엔드포인트를 구성하는 방법에 대한 자세한 정보는 Azure Files 네트워크 엔드포인트 구성을 참조하세요.
이 방법 가이드를 읽기 전에 Azure 파일 동기화 네트워킹 고려 사항을 읽는 것이 좋습니다.
필수 조건
이 문서에서는 다음을 가정합니다.
Azure 구독이 있습니다. Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
온-프레미스에서 연결하려는 스토리지 계정에 Azure 파일 공유를 이미 만들었습니다. Azure 파일 공유를 만드는 방법을 알아보려면 Azure 파일 공유 만들기를 참조하세요.
프라이빗 엔드포인트: 스토리지 계정 또는 스토리지 동기화 서비스의 프라이빗 엔드포인트를 나타내는 Azure 리소스입니다. Azure 리소스와 네트워크 인터페이스를 연결하는 리소스라고 생각하면 됩니다.
NIC(네트워크 인터페이스): 지정된 가상 네트워크/서브넷 내에서 개인 IP 주소를 유지 관리하는 네트워크 인터페이스입니다. VM(가상 머신)을 배포할 때 배포되는 것과 정확히 동일한 리소스이지만, VM에 할당되는 것이 아니라 프라이빗 엔드포인트의 소유입니다.
프라이빗 DNS 영역: 이전에 이 가상 네트워크에 대한 프라이빗 엔드포인트를 한 번도 배포하지 않은 경우 가상 네트워크에 대한 새 프라이빗 DNS 영역이 배포됩니다. 이 DNS 영역의 Azure 리소스에 대한 DNS A 레코드도 생성됩니다. 이 가상 네트워크에 프라이빗 엔드포인트를 이미 배포했으면 Azure 리소스에 대한 새로운 A 레코드가 기존 DNS 영역에 추가됩니다. DNS 영역 배포는 선택 사항이지만 필요한 DNS 관리를 간소화하기 위해 적극 권장됩니다.
참고 항목
이 문서에서는 Azure 공용 지역에 DNS 접미사를 사용하며 스토리지 계정에는 core.windows.net, 스토리지 동기화 서비스에는 afs.azure.net을 사용합니다. 이는 Azure 미국 정부 클라우드와 같은 Azure 소버린 클라우드에도 적용됩니다. 사용자 환경에 적합한 접미사를 대체하기만 하면 됩니다.
프라이빗 엔드포인트를 만들려는 스토리지 계정으로 이동합니다. 서비스 메뉴의 보안 + 네트워킹 아래에서 네트워킹, 프라이빗 엔드포인트 연결을 선택한 다음+ 프라이빗 엔드포인트를 선택하여 새 프라이빗 엔드포인트를 만듭니다.
그 결과로 마법사에는 완료할 페이지가 여러 개 있습니다.
기본 사항 블레이드에서 프라이빗 엔드포인트에 원하는 구독, 리소스 그룹, 이름, 네트워크 인터페이스 이름 및 지역을 선택합니다. 이러한 항목은 원하는 대로 지정할 수 있지만 어쨌든 간에 스토리지 계정과 일치할 필요는 없습니다. 그러나 프라이빗 엔드포인트는 해당 프라이빗 엔드포인트를 만들려는 가상 네트워크와 동일한 지역에 만들어야 합니다. 그런 다음, 다음: 리소스를 선택합니다.
리소스 블레이드에서 대상 하위 리소스에 대한 파일을 선택합니다. 그런 다음 , 다음: 가상 네트워크를 선택합니다.
Virtual Network 블레이드에서는 프라이빗 엔드포인트를 추가할 가상 네트워크 및 서브넷을 선택할 수 있습니다. 새 프라이빗 엔드포인트에 대한 동적 또는 고정 IP 주소 할당을 선택합니다. 정적을 선택하는 경우 이름과 개인 IP 주소도 제공해야 합니다. 필요에 따라 애플리케이션 보안 그룹을 지정할 수도 있습니다. 완료되면 다음: DNS를 선택합니다.
DNS 블레이드에는 프라이빗 엔드포인트를 프라이빗 DNS 영역과 통합하기 위한 정보가 포함되어 있습니다. 구독 및 리소스 그룹이 올바른지 확인한 후, 다음: 태그를 선택합니다.
모든 테스트 리소스에 환경이라는 이름과 테스트 값을 적용하는 것과 같이 필요에 따라 태그를 적용하여 리소스를 분류할 수 있습니다. 원하는 경우 이름/값 쌍을 입력하고 다음: 검토 + 만들기를 선택합니다.
만들기를 선택하여 프라이빗 엔드포인트를 만듭니다.
가상 네트워크 내에 VM이 있거나 Azure Files에 대한 DNS 전달 구성에 설명된 대로 DNS 전달을 구성한 경우 PowerShell, 명령줄 또는 터미널(Windows, Linux 또는 macOS에서 작동)에서 다음 명령을 실행하여 프라이빗 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다. 다음과 같이 <storage-account-name>을 적절한 스토리지 계정 이름으로 바꿔야 합니다.
스토리지 계정의 프라이빗 엔드포인트를 만들려면 먼저 프라이빗 엔드포인트를 추가하려는 스토리지 계정과 가상 네트워크 서브넷의 참조를 가져와야 합니다. 다음과 같이 <storage-account-resource-group-name>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> 및 <vnet-subnet-name>을 바꿉니다.
$storageAccountResourceGroupName = "<storage-account-resource-group-name>"
$storageAccountName = "<storage-account-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<vnet-subnet-name>"
# Get storage account reference, and throw error if it doesn't exist
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-ErrorAction SilentlyContinue
if ($null -eq $storageAccount) {
$errorMessage = "Storage account $storageAccountName not found "
$errorMessage += "in resource group $storageAccountResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Get virtual network reference, and throw error if it doesn't exist
$virtualNetwork = Get-AzVirtualNetwork `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $virtualNetworkName `
-ErrorAction SilentlyContinue
if ($null -eq $virtualNetwork) {
$errorMessage = "Virtual network $virtualNetworkName not found "
$errorMessage += "in resource group $virtualNetworkResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Get reference to virtual network subnet, and throw error if it doesn't exist
$subnet = $virtualNetwork | `
Select-Object -ExpandProperty Subnets | `
Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
Write-Error `
-Message "Subnet $subnetName not found in virtual network $virtualNetworkName." `
-ErrorAction Stop
}
프라이빗 엔드포인트를 만들려면 스토리지 계정에 대한 프라이빗 링크 서비스 연결을 만들어야 합니다. 프라이빗 링크 서비스 연결은 프라이빗 엔드포인트를 만들기 위한 입력입니다.
# 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를 통해 액세스하려면 명시적으로 필요합니다.
# 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
}
이제 프라이빗 DNS 영역에 대한 참조가 생겼으므로 스토리지 계정에 대한 A 레코드를 만들어야 합니다.
모든 항목이 성공적으로 작동하는 경우 가상 네트워크에 있는 192.168.0.5 프라이빗 엔드포인트의 개인 IP 주소인 다음 출력이 표시됩니다.
Name Type TTL Section NameHost
---- ---- --- ------- --------
storageaccount.file.core.windows CNAME 60 Answer storageaccount.privatelink.file.core.windows.net
.net
Name : storageaccount.privatelink.file.core.windows.net
QueryType : A
TTL : 600
Section : Answer
IP4Address : 192.168.0.5
스토리지 계정의 프라이빗 엔드포인트를 만들려면 먼저 프라이빗 엔드포인트를 추가하려는 스토리지 계정과 가상 네트워크 서브넷의 참조를 가져와야 합니다. 다음과 같이 <storage-account-resource-group-name>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> 및 <vnet-subnet-name>을 바꿉니다.
storageAccountResourceGroupName="<storage-account-resource-group-name>"
storageAccountName="<storage-account-name>"
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<vnet-subnet-name>"
# Get storage account ID
storageAccount=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" | \
tr -d '"')
# Get virtual network ID
virtualNetwork=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "id" | \
tr -d '"')
# Get subnet ID
subnet=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "id" | \
tr -d '"')
프라이빗 엔드포인트를 만들려면 먼저 서브넷의 프라이빗 엔드포인트 네트워크 정책을 해제해야 합니다. 그런 다음, az network private-endpoint create 명령을 사용하여 프라이빗 엔드포인트를 만들 수 있습니다.
Azure 프라이빗 DNS 영역을 만들면 스토리지 계정의 원래 이름(예: storageaccount.file.core.windows.net)이 가상 네트워크 내부의 개인 IP로 확인됩니다. 프라이빗 엔드포인트 만들기의 관점에서는 선택 사항이지만, AD 사용자 계정을 사용하여 Azure 파일 공유를 탑재하거나 REST API를 통해 액세스하려면 명시적으로 필요합니다.
# 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 $possibleDnsZones
do
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 ]
then
echo "1" > /dev/null
else
dnsZoneResourceGroup=$possibleResourceGroupName
dnsZone=$possibleDnsZone
break
fi
done
if [ -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=$virtualNetworkResourceGroupName
fi
이제 프라이빗 DNS 영역에 대한 참조가 생겼으므로 스토리지 계정에 대한 A 레코드를 만들어야 합니다.
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
가상 네트워크 내에 VM이 있거나 Azure Files에 대한 DNS 전달 구성에 설명된 대로 DNS 전달을 구성한 경우 다음 명령을 사용하여 프라이빗 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다.
Azure Portal 상단의 검색 창에 Private Link를 입력하여 Private Link 센터로 이동합니다. Private Link 센터의 목차에서 프라이빗 엔드포인트를 선택한 다음, + 추가를 선택하여 새 프라이빗 엔드포인트를 만듭니다.
그 결과로 마법사에는 완료할 페이지가 여러 개 있습니다.
기본 사항 블레이드에서 프라이빗 엔드포인트에 원하는 리소스 그룹, 이름 및 지역을 선택합니다. 이러한 항목은 원하는 대로 지정할 수 있지만 스토리지 동기화 서비스와 일치할 필요는 없습니다. 그러나 프라이빗 엔드포인트는 프라이빗 엔드포인트를 만들 가상 네트워크와 동일한 지역에 만들어야 합니다.
리소스 블레이드에서 내 디렉터리에서 Azure 리소스에 연결 라디오 단추를 선택합니다. 리소스 종류 아래에서 리소스 종류에 대해 Microsoft.StorageSync/storageSyncServices를 선택합니다.
구성 블레이드에서는 프라이빗 엔드포인트를 추가할 가상 네트워크 및 서브넷을 선택할 수 있습니다. 위의 스토리지 계정에 사용한 것과 동일한 가상 네트워크를 선택합니다. 구성 블레이드에는 프라이빗 DNS 영역을 만들거나 업데이트하기 위한 정보도 포함되어 있습니다.
검토 + 만들기를 선택하여 프라이빗 엔드포인트를 만듭니다.
다음 PowerShell 명령을 실행하여 프라이빗 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다.
모든 항목이 올바르게 작동하는 경우 프라이빗 엔드포인트에 할당된 개인 IP 주소인 192.168.1.5192.168.1.6192.168.1.7 다음 출력192.168.1.4이 표시됩니다.
Name : mysssmanagement.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : mysssmanagement.westus2.privatelink.afs.azure.net
Name : mysssmanagement.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.4
Name : myssssyncp.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : myssssyncp.westus2.privatelink.afs.azure.net
Name : myssssyncp.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.5
Name : myssssyncs.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : myssssyncs.westus2.privatelink.afs.azure.net
Name : myssssyncs.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.6
Name : mysssmonitoring.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : mysssmonitoring.westus2.privatelink.afs.azure.net
Name : mysssmonitoring.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.7
스토리지 동기화 서비스에 대한 프라이빗 엔드포인트를 만들려면 먼저 스토리지 동기화 서비스에 대한 참조를 가져와야 합니다. <storage-sync-service-resource-group> 및 <storage-sync-service>를 사용자 환경에 적합한 값으로 바꿔야 합니다. 다음 PowerShell 명령은 가상 네트워크 정보를 이미 채웁니다.
$storageSyncServiceResourceGroupName = "<storage-sync-service-resource-group>"
$storageSyncServiceName = "<storage-sync-service>"
$storageSyncService = Get-AzStorageSyncService `
-ResourceGroupName $storageSyncServiceResourceGroupName `
-Name $storageSyncServiceName `
-ErrorAction SilentlyContinue
if ($null -eq $storageSyncService) {
$errorMessage = "Storage Sync Service $storageSyncServiceName not found "
$errorMessage += "in resource group $storageSyncServiceResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
프라이빗 엔드포인트를 만들려면 스토리지 동기화 서비스에 대한 프라이빗 링크 서비스 연결을 만들어야 합니다. 프라이빗 링크 연결은 프라이빗 엔드포인트를 만들기 위한 입력입니다.
# 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 "$storageSyncServiceName-Connection" `
-PrivateLinkServiceId $storageSyncService.ResourceId `
-GroupId "Afs" `
-ErrorAction Stop
# Create a new private endpoint.
$privateEndpoint = New-AzPrivateEndpoint `
-ResourceGroupName $storageSyncServiceResourceGroupName `
-Name "$storageSyncServiceName-PrivateEndpoint" `
-Location $virtualNetwork.Location `
-Subnet $subnet `
-PrivateLinkServiceConnection $privateEndpointConnection `
-ErrorAction Stop
Azure 프라이빗 DNS 영역을 만들면 mysssmanagement.westus2.afs.azure.net과 같은 스토리지 동기화 서비스의 호스트 이름이 가상 네트워크 안의 스토리지 동기화 서비스에 대한 올바른 개인 IP로 확인될 수 있습니다. 프라이빗 엔드포인트를 만드는 관점에서는 선택 사항이지만 Azure 파일 동기화 에이전트가 스토리지 동기화 서비스에 액세스하려면 명시적으로 필요합니다.
# Get the desired Storage Sync Service suffix (afs.azure.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
$azureEnvironment = Get-AzContext | `
Select-Object -ExpandProperty Environment | `
Select-Object -ExpandProperty Name
switch($azureEnvironment) {
"AzureCloud" {
$storageSyncSuffix = "afs.azure.net"
}
"AzureUSGovernment" {
$storageSyncSuffix = "afs.azure.us"
}
"AzureChinaCloud" {
$storageSyncSuffix = "afs.azure.cn"
}
default {
Write-Error
-Message "The Azure environment $_ is not currently supported by Azure File Sync." `
-ErrorAction Stop
}
}
# For public cloud, this will generate the following DNS suffix:
# privatelink.afs.azure.net
$dnsZoneName = "privatelink.$storageSyncSuffix"
# 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
}
이제 프라이빗 DNS 영역에 대한 참조가 생겼으므로 스토리지 동기화 서비스에 대한 A 레코드를 만들어야 합니다.
스토리지 동기화 서비스에 대한 프라이빗 엔드포인트를 만들려면 먼저 스토리지 동기화 서비스에 대한 참조를 가져와야 합니다. <storage-sync-service-resource-group> 및 <storage-sync-service>를 사용자 환경에 적합한 값으로 바꿔야 합니다. 다음 CLI 명령은 가상 네트워크 정보를 이미 채웁니다.
Azure 프라이빗 DNS 영역을 만들면 mysssmanagement.westus2.afs.azure.net과 같은 스토리지 동기화 서비스의 호스트 이름이 가상 네트워크 안의 스토리지 동기화 서비스에 대한 올바른 개인 IP로 확인될 수 있습니다. 프라이빗 엔드포인트를 만드는 관점에서는 선택 사항이지만 Azure 파일 동기화 에이전트가 스토리지 동기화 서비스에 액세스하려면 명시적으로 필요합니다.
# Get the desired storage account suffix (afs.azure.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
azureEnvironment=$(az cloud show \
--query "name" |
tr -d '"')
storageSyncSuffix=""
if [ $azureEnvironment == "AzureCloud" ]
then
storageSyncSuffix="afs.azure.net"
elif [ $azureEnvironment == "AzureUSGovernment" ]
then
storageSyncSuffix="afs.azure.us"
else
echo "Unsupported Azure environment $azureEnvironment."
fi
# For public cloud, this will generate the following DNS suffix:
# privatelinke.afs.azure.net.
dnsZoneName="privatelink.$storageSyncSuffix"
# 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 $possibleDnsZones
do
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 ]
then
echo "1" > /dev/null
else
dnsZoneResourceGroup=$possibleResourceGroupName
dnsZone=$possibleDnsZone
break
fi
done
if [ -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=$virtualNetworkResourceGroupName
fi
이제 프라이빗 DNS 영역에 대한 참조가 생겼으므로 스토리지 동기화 서비스에 대한 A 레코드를 만들어야 합니다.
privateEndpointNIC=$(az network private-endpoint show \
--ids $privateEndpoint \
--query "networkInterfaces[0].id" | \
tr -d '"')
privateIpAddresses=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[].privateIpAddress" \
--output tsv)
hostNames=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[].privateLinkConnectionProperties.fqdns[]" \
--output tsv)
i=0
for privateIpAddress in $privateIpAddresses
do
j=0
targetHostName=""
for hostName in $hostNames
do
if [ $i == $j ]
then
targetHostName=$hostName
break
fi
j=$(expr $j + 1)
done
endpointName=$(echo $targetHostName | \
cut -c1-$(expr $(expr index $targetHostName ".") - 1))
az network private-dns record-set a create \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--name "$endpointName.$storageSyncServiceRegion" \
--output none
az network private-dns record-set a add-record \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--record-set-name "$endpointName.$storageSyncServiceRegion" \
--ipv4-address $privateIpAddress \
--output none
i=$(expr $i + 1)
done
퍼블릭 엔드포인트에 대한 액세스 제한
스토리지 계정 및 스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 액세스를 제한할 수 있습니다. 공용 엔드포인트에 대한 액세스를 제한하면 네트워크 패킷이 승인된 위치에서만 허용되도록 하여 추가 보안을 제공합니다.
스토리지 계정 퍼블릭 엔드포인트에 대한 액세스 제한
퍼블릭 엔드포인트에 대한 액세스 제한은 스토리지 계정 방화벽 설정을 사용하여 이루어집니다. 일반적으로 스토리지 계정에 대한 대부분의 방화벽 정책은 하나 이상의 가상 네트워크에 대한 네트워킹 액세스를 제한합니다. 스토리지 계정에 대한 액세스를 가상 네트워크로 제한하는 두 가지 방법은 다음과 같습니다.
스토리지 계정에 대한 하나 이상의 프라이빗 엔드포인트를 만들고 퍼블릭 엔드포인트에 대한 액세스를 사용하지 않도록 설정합니다. 이렇게 하면 원하는 가상 네트워크 내에서 시작된 트래픽만 스토리지 계정 내의 Azure 파일 공유에 액세스할 수 있습니다.
퍼블릭 엔드포인트를 하나 이상의 가상 네트워크로 제한합니다. 이는 서비스 엔드포인트라는 가상 네트워크의 기능을 사용하여 작동합니다. 서비스 엔드포인트를 통해 스토리지 계정으로 트래픽을 제한하는 경우 공용 IP 주소를 통해 스토리지 계정에 계속 액세스합니다.
참고 항목
신뢰할 수 있는 서비스 목록의 Azure 서비스에서 이 스토리지 계정에 액세스하도록 허용 예외를 스토리지 계정에서 선택해야 Azure File Sync와 같은 신뢰할 수 있는 자사 Microsoft 서비스에서 스토리지 계정에 액세스할 수 있습니다. 더 자세히 알아보려면 신뢰할 수 있는 Azure 서비스에 액세스 권한 부여를 참조하세요.
신뢰할 수 있는 Azure 서비스에 대한 액세스 권한 부여 및 스토리지 계정 퍼블릭 엔드포인트에 대한 액세스 사용 안 함
퍼블릭 엔드포인트에 대한 모든 액세스가 제한된 경우에도 프라이빗 엔드포인트를 통해 스토리지 계정에 액세스할 수 있습니다. 그렇지 않으면 스토리지 계정의 퍼블릭 엔드포인트에 대한 유효한 요청이 거부됩니다.
퍼블릭 엔드포인트에 대한 모든 액세스를 제한하려는 스토리지 계정으로 이동합니다. 스토리지 계정의 목차에서 네트워킹을 선택합니다.
페이지 맨 위에서 선택한 가상 네트워크 및 IP 주소에서 사용 라디오 단추를 선택합니다. 그러면 퍼블릭 엔드포인트의 제한을 제어할 수 있는 여러 설정이 표시됩니다. 신뢰할 수 있는 서비스 목록의 Azure 서비스에서 이 스토리지 계정에 액세스하도록 허용을 선택하여 Azure File Sync와 같은 신뢰할 수 있는 자사 Microsoft 서비스에서 스토리지 계정에 액세스할 수 있도록 합니다.
다음 PowerShell 명령은 스토리지 계정의 퍼블릭 엔드포인트에 대한 모든 트래픽을 거부합니다. 이 명령의 -Bypass 매개 변수는 AzureServices로 설정되었습니다. 이렇게 설정하면 Azure 파일 동기화와 같은 신뢰할 수 있는 자사 서비스에서 퍼블릭 엔드포인트를 통해 스토리지 계정에 액세스할 수 있습니다.
# 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
다음 CLI 명령은 스토리지 계정의 퍼블릭 엔드포인트에 대한 모든 트래픽을 거부합니다. 이 명령의 -bypass 매개 변수는 AzureServices로 설정되었습니다. 이렇게 설정하면 Azure 파일 동기화와 같은 신뢰할 수 있는 자사 서비스에서 퍼블릭 엔드포인트를 통해 스토리지 계정에 액세스할 수 있습니다.
# 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
신뢰할 수 있는 Azure 서비스에 대한 액세스 권한을 부여하고 스토리지 계정 퍼블릭 엔드포인트에 대한 액세스를 특정 가상 네트워크로 제한
스토리지 계정을 특정 가상 네트워크로 제한하면 지정된 가상 네트워크 내에서 퍼블릭 엔드포인트에 요청하는 것을 허용하는 것입니다. 이는 서비스 엔드포인트라는 가상 네트워크의 기능을 사용하여 작동합니다. 이 방법에 프라이빗 엔드포인트를 사용해도 되고 사용하지 않아도 됩니다.
퍼블릭 엔드포인트를 특정 가상 네트워크로 제안하려는 스토리지 계정으로 이동합니다. 스토리지 계정의 목차에서 네트워킹을 선택합니다.
페이지 맨 위에서 선택한 가상 네트워크 및 IP 주소에서 사용 라디오 단추를 선택합니다. 그러면 퍼블릭 엔드포인트의 제한을 제어할 수 있는 여러 설정이 표시됩니다. +기존 가상 네트워크 추가를 선택하여 퍼블릭 엔드포인트를 통해 스토리지 계정에 액세스할 수 있도록 허용해야 하는 가상 네트워크를 선택합니다. 가상 네트워크와 해당 가상 네트워크에 대한 서브넷을 선택한 다음, 사용을 선택합니다.
신뢰할 수 있는 서비스 목록의 Azure 서비스에서 이 스토리지 계정에 액세스하도록 허용을 선택하여 Azure File Sync와 같은 신뢰할 수 있는 자사 Microsoft 서비스에서 스토리지 계정에 액세스할 수 있도록 합니다.
서비스 엔드포인트를 사용하여 스토리지 계정의 퍼블릭 엔드포인트에 대한 액세스를 특정 가상 네트워크로 제한하려면 먼저 스토리지 계정 및 가상 네트워크에 대한 정보를 수집해야 합니다. 이 정보를 수집하기 위해 <storage-account-resource-group>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> 및 <subnet-name>을 입력합니다.
스토리지 계정 퍼블릭 엔드포인트로 이동하기 위해 가상 네트워크의 트래픽을 Azure 네트워크 패브릭에서 허용하려면 가상 네트워크 서브넷의 Microsoft.Storage 서비스 엔드포인트가 공개되어야 합니다. 다음 PowerShell 명령은 서브넷에 Microsoft.Storage 서비스 엔드포인트가 아직 추가되지 않은 경우 이 서비스 엔드포인트를 추가합니다.
서비스 엔드포인트를 사용하여 스토리지 계정의 퍼블릭 엔드포인트에 대한 액세스를 특정 가상 네트워크로 제한하려면 먼저 스토리지 계정 및 가상 네트워크에 대한 정보를 수집해야 합니다. 이 정보를 수집하기 위해 <storage-account-resource-group>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> 및 <subnet-name>을 입력합니다.
스토리지 계정 퍼블릭 엔드포인트로 이동하기 위해 가상 네트워크의 트래픽을 Azure 네트워크 패브릭에서 허용하려면 가상 네트워크 서브넷의 Microsoft.Storage 서비스 엔드포인트가 공개되어야 합니다. 다음 CLI 명령은 서브넷에 Microsoft.Storage 서비스 엔드포인트가 아직 추가되지 않은 경우 이 서비스 엔드포인트를 추가합니다.
serviceEndpoints=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "serviceEndpoints[].service" \
--output tsv)
foundStorageServiceEndpoint=false
for serviceEndpoint in $serviceEndpoints
do
if [ $serviceEndpoint = "Microsoft.Storage" ]
then
foundStorageServiceEndpoint=true
fi
done
if [ $foundStorageServiceEndpoint = false ]
then
serviceEndpointList=""
for serviceEndpoint in $serviceEndpoints
do
serviceEndpointList+=$serviceEndpoint
serviceEndpointList+=" "
done
serviceEndpointList+="Microsoft.Storage"
az network vnet subnet update \
--ids $subnet \
--service-endpoints $serviceEndpointList \
--output none
fi
트래픽을 스토리지 계정으로 제한하기 위한 마지막 단계는 네트워킹 규칙을 만들어서 스토리지 계정의 네트워크 규칙 세트에 추가하는 것입니다.
Azure 파일 동기화를 사용하면 특정 가상 네트워크에 대한 액세스를 프라이빗 엔드포인트를 통해서만 가능하도록 제한할 수 있습니다. Azure 파일 동기화는 퍼블릭 엔드포인트에 대한 액세스를 특정 가상 네트워크로 제한하기 위한 서비스 엔드포인트를 지원하지 않습니다. 즉 스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 두 가지 상태가 사용 및 사용 안 함입니다.
Important
퍼블릭 엔드포인트에 대한 액세스를 사용하지 않도록 설정하기 전에 프라이빗 엔드포인트를 만들어야 합니다. 프라이빗 엔드포인트가 구성되지 않고 퍼블릭 엔드포인트를 사용할 수 없으면 동기화할 수 없습니다.
스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 액세스를 사용하지 않도록 설정하려면 스토리지 동기화 서비스에서 incomingTrafficPolicy 속성을 AllowVirtualNetworksOnly로 설정합니다. 스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 액세스를 사용하도록 설정하려면 incomingTrafficPolicy를 AllowAllTraffic으로 설정합니다. <storage-sync-service-resource-group> 및 <storage-sync-service>를 사용자 고유의 값으로 바꾸어야 합니다.
Azure CLI는 스토리지 동기화 서비스에서 속성 설정을 incomingTrafficPolicy 지원하지 않습니다. 스토리지 동기화 서비스 퍼블릭 엔드포인트를 사용하지 않도록 설정하는 방법에 대한 지침을 보려면 Azure PowerShell 탭을 선택하세요.
Azure Policy
Azure Policy는 조직의 표준을 적용하고 대규모로 이러한 표준에 대한 준수를 평가하는 데 도움이 됩니다. Azure Files 및 Azure File 동기화는 배포를 모니터링하고 자동화하는 데 도움이 되는 몇 가지 유용한 감사 및 수정 네트워크 정책을 노출합니다.
정책은 사용자 환경을 감사하고 스토리지 계정 또는 스토리지 동기화 서비스가 정의된 동작에서 벗어나는 경우 사용자에게 알립니다. 예를 들어 퍼블릭 엔드포인트를 사용하지 않도록 설정하는 정책이 설정된 경우 퍼블릭 엔드포인트를 사용합니다. 정책 수정/배포는 한 단계 더 나아가 리소스(예: 스토리지 동기화 서비스)를 사전에 수정하거나 정책에 맞게 리소스(예: 프라이빗 엔드포인트)를 배포합니다.
Azure Files 및 Azure File 동기화에 대해 다음과 같은 미리 정의된 정책을 사용할 수 있습니다.
프라이빗 엔드포인트 배포 정책을 설정하려면 Azure Portal로 이동하여 정책을 검색합니다. Azure Policy 센터가 상위 결과로 나타납니다. 정책 센터의 목차에서 작성>정의로 이동합니다. 결과 정의 창에는 모든 Azure 서비스에 대해 미리 정의된 정책이 포함됩니다. 특정 정책을 찾으려면 범주 필터에서 스토리지 범주를 선택하거나 프라이빗 엔드포인트를 사용하여 Azure 파일 동기화 구성을 검색합니다. ...를 선택하고 할당을 선택하여 정의에서 새 정책을 만듭니다.
정책 할당 마법사의 기본 블레이드를 사용하여 범위, 리소스 또는 리소스 그룹 제외 목록을 설정하고 정책을 구분하는 데 도움이 되는 친숙한 이름을 지정할 수 있습니다. 정책이 작동하도록 하기 위해 이러한 작업을 수정할 필요는 없지만 수정하고자 하는 경우 수정할 수는 있습니다. 다음을 선택하여 매개 변수 페이지로 이동합니다.
매개 변수 블레이드에서 privateEndpointSubnetId 드롭다운 목록 옆에 있는 ...를 선택하여 스토리지 동기화 서비스 리소스의 프라이빗 엔드포인트를 배포할 가상 네트워크 및 서브넷을 선택합니다. 결과로 생성된 마법사는 구독에서 사용 가능한 가상 네트워크를 로드하는 데 몇 초 정도 걸릴 수 있습니다. 사용자 환경에 적합한 가상 네트워크/서브넷을 선택하고 선택을 클릭합니다. 다음을 선택하여 수정 블레이드로 이동합니다.
프라이빗 엔드포인트 없이 스토리지 동기화 서비스를 식별하는 경우 프라이빗 엔드포인트를 배포하려면 수정 페이지에서 수정 작업 만들기를 선택해야 합니다. 마지막으로 검토 + 만들기를 선택하여 정책 할당을 검토하고 만들기를 선택합니다.