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 리소스의 프라이빗 엔드포인트를 만들 때 배포되는 리소스는 다음과 같습니다.
-
프라이빗 엔드포인트: 스토리지 계정 또는 스토리지 동기화 서비스의 프라이빗 엔드포인트를 나타내는 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 US Government 클라우드와 같은 Azure 소버린 클라우드에도 적용됩니다. 사용자 환경에 적절한 접미사로 바꾸기만 하면 됩니다.
스토리지 계정 프라이빗 엔드포인트 만들기
프라이빗 엔드포인트를 만들려는 스토리지 계정으로 이동합니다. 서비스 메뉴의 보안 + 네트워킹에서 네트워킹, 프라이빗 엔드포인트 연결을 선택한 다음 + 프라이빗 엔드포인트를 선택하여 새 프라이빗 엔드포인트를 만듭니다.
그 결과로 마법사에는 완료할 페이지가 여러 개 있습니다.
기본 사항 블레이드에서 프라이빗 엔드포인트에 원하는 구독, 리소스 그룹, 이름, 네트워크 인터페이스 이름 및 지역을 선택합니다. 이러한 항목은 원하는 대로 지정할 수 있지만 어쨌든 간에 스토리지 계정과 일치할 필요는 없습니다. 그러나 프라이빗 엔드포인트는 해당 프라이빗 엔드포인트를 만들려는 가상 네트워크와 동일한 지역에 만들어야 합니다. 그런 다음, 다음: 리소스를 선택합니다.
리소스 블레이드에서 대상 하위 리소스에 대한 파일을 선택합니다. 그런 다음 , 다음: 가상 네트워크를 선택합니다.
Virtual Network 블레이드에서는 프라이빗 엔드포인트를 추가할 가상 네트워크 및 서브넷을 선택할 수 있습니다. 새 프라이빗 엔드포인트에 대한 동적 또는 고정 IP 주소 할당을 선택합니다. 정적을 선택하는 경우 이름과 개인 IP 주소도 제공해야 합니다. 필요에 따라 애플리케이션 보안 그룹을 지정할 수도 있습니다. 완료되면 다음: DNS를 선택합니다.
DNS 블레이드에는 프라이빗 엔드포인트를 프라이빗 DNS 영역과 통합하기 위한 정보가 포함되어 있습니다. 구독 및 리소스 그룹이 올바른지 확인한 후, 다음: 태그를 선택합니다.
모든 테스트 리소스에 환경이라는 이름과 테스트 값을 적용하는 것과 같이 필요에 따라 태그를 적용하여 리소스를 분류할 수 있습니다. 원하는 경우 이름/값 쌍을 입력하고 다음: 검토 + 만들기를 선택합니다.
만들기를 선택하여 프라이빗 엔드포인트를 만듭니다.
가상 네트워크 내에 VM이 있거나 Azure Files에 대한 DNS 전달 구성에 설명된 대로 DNS 전달을 구성한 경우 PowerShell, 명령줄 또는 터미널(Windows, Linux 또는 macOS에서 작동)에서 다음 명령을 실행하여 프라이빗 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다. 다음과 같이 <storage-account-name>을 적절한 스토리지 계정 이름으로 바꿔야 합니다.
nslookup <storage-account-name>.file.core.windows.net
모든 것이 성공적으로 작동하면 다음과 같은 출력이 표시됩니다. 여기서 192.168.0.5는 가상 네트워크의 프라이빗 엔드포인트의 개인 IP 주소입니다(Windows의 출력 참조).
Server: UnKnown
Address: 10.2.4.4
Non-authoritative answer:
Name: storageaccount.privatelink.file.core.windows.net
Address: 192.168.0.5
Aliases: storageaccount.file.core.windows.net
스토리지 계정의 프라이빗 엔드포인트를 만들려면 먼저 프라이빗 엔드포인트를 추가하려는 스토리지 계정과 가상 네트워크 서브넷의 참조를 가져와야 합니다. 다음과 같이 <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 레코드를 만들어야 합니다.
$privateEndpointIP = $privateEndpoint | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object @{
Name = "NetworkInterfaces";
Expression = { Get-AzNetworkInterface -ResourceId $_.Id }
} | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object -ExpandProperty IpConfigurations | `
Select-Object -ExpandProperty PrivateIpAddress
$privateDnsRecordConfig = New-AzPrivateDnsRecordConfig `
-IPv4Address $privateEndpointIP
New-AzPrivateDnsRecordSet `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $storageAccountName `
-RecordType A `
-ZoneName $dnsZoneName `
-Ttl 600 `
-PrivateDnsRecords $privateDnsRecordConfig `
-ErrorAction Stop | `
Out-Null
가상 네트워크 내에 VM이 있거나 Azure Files에 대한 DNS 전달 구성에 설명된 대로 DNS 전달을 구성한 경우 다음 명령을 사용하여 프라이빗 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다.
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
모든 것이 성공적으로 작동하면 다음과 같은 출력이 표시됩니다. 여기서 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 명령을 사용하여 프라이빗 엔드포인트를 만들 수 있습니다.
# Disable private endpoint network policies
az network vnet subnet update \
--ids $subnet \
--disable-private-endpoint-network-policies \
--output none
# Get virtual network location
region=$(az network vnet show \
--ids $virtualNetwork \
--query "location" | \
tr -d '"')
# Create a private endpoint
privateEndpoint=$(az network private-endpoint create \
--resource-group $storageAccountResourceGroupName \
--name "$storageAccountName-PrivateEndpoint" \
--location $region \
--subnet $subnet \
--private-connection-resource-id $storageAccount \
--group-id "file" \
--connection-name "$storageAccountName-Connection" \
--query "id" | \
tr -d '"')
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 전달을 구성한 경우 다음 명령을 사용하여 프라이빗 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다.
httpEndpoint=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "primaryEndpoints.file" | \
tr -d '"')
hostName=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint) | tr -d "/")
nslookup $hostName
모든 것이 성공적으로 작동하면 다음과 같은 출력이 표시됩니다. 여기서 192.168.0.5는 가상 네트워크의 프라이빗 엔드포인트의 개인 IP 주소입니다.
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
storageaccount.file.core.windows.net canonical name = storageaccount.privatelink.file.core.windows.net.
Name: storageaccount.privatelink.file.core.windows.net
Address: 192.168.0.5
스토리지 동기화 서비스 프라이빗 엔드포인트 만들기
Azure Portal 상단의 검색 창에 Private Link를 입력하여 Private Link 센터로 이동합니다. Private Link 센터의 목차에서 프라이빗 엔드포인트를 선택한 다음, + 추가를 선택하여 새 프라이빗 엔드포인트를 만듭니다.
그 결과로 마법사에는 완료할 페이지가 여러 개 있습니다.
기본 사항 블레이드에서 프라이빗 엔드포인트에 원하는 리소스 그룹, 이름 및 지역을 선택합니다. 이러한 항목은 원하는 대로 지정할 수 있지만 스토리지 동기화 서비스와 일치할 필요는 없습니다. 그러나 프라이빗 엔드포인트는 프라이빗 엔드포인트를 만들 가상 네트워크와 동일한 지역에 만들어야 합니다.
리소스 블레이드에서 내 디렉터리에서 Azure 리소스에 연결 라디오 단추를 선택합니다.
리소스 종류 아래에서 리소스 종류에 대해 Microsoft.StorageSync/storageSyncServices를 선택합니다.
구성 블레이드에서는 프라이빗 엔드포인트를 추가할 가상 네트워크 및 서브넷을 선택할 수 있습니다. 위의 스토리지 계정에 사용한 것과 동일한 가상 네트워크를 선택합니다. 구성 블레이드에는 프라이빗 DNS 영역을 만들거나 업데이트하기 위한 정보도 포함되어 있습니다.
검토 + 만들기를 선택하여 프라이빗 엔드포인트를 만듭니다.
다음 PowerShell 명령을 실행하여 프라이빗 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다.
$privateEndpointResourceGroupName = "<your-private-endpoint-resource-group>"
$privateEndpointName = "<your-private-endpoint-name>"
Get-AzPrivateEndpoint `
-ResourceGroupName $privateEndpointResourceGroupName `
-Name $privateEndpointName `
-ErrorAction Stop | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object -ExpandProperty Id | `
ForEach-Object { Get-AzNetworkInterface -ResourceId $_ } | `
Select-Object -ExpandProperty IpConfigurations | `
Select-Object -ExpandProperty PrivateLinkConnectionProperties | `
Select-Object -ExpandProperty Fqdns | `
ForEach-Object { Resolve-DnsName -Name $_ } | `
Format-List
모든 것이 올바르게 작동하면 다음과 같은 출력이 표시됩니다. 여기서 192.168.1.4, 192.168.1.5, 192.168.1.6, 192.168.1.7은 프라이빗 엔드포인트에 할당된 개인 IP 주소입니다.
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 레코드를 만들어야 합니다.
$privateEndpointIpFqdnMappings = $privateEndpoint | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object -ExpandProperty Id | `
ForEach-Object { Get-AzNetworkInterface -ResourceId $_ } | `
Select-Object -ExpandProperty IpConfigurations | `
ForEach-Object {
$privateIpAddress = $_.PrivateIpAddress;
$_ | `
Select-Object -ExpandProperty PrivateLinkConnectionProperties | `
Select-Object -ExpandProperty Fqdns | `
Select-Object `
@{
Name = "PrivateIpAddress";
Expression = { $privateIpAddress }
}, `
@{
Name = "FQDN";
Expression = { $_ }
}
}
foreach($ipFqdn in $privateEndpointIpFqdnMappings) {
$privateDnsRecordConfig = New-AzPrivateDnsRecordConfig `
-IPv4Address $ipFqdn.PrivateIpAddress
$dnsEntry = $ipFqdn.FQDN.Substring(0,
$ipFqdn.FQDN.IndexOf(".", $ipFqdn.FQDN.IndexOf(".") + 1))
New-AzPrivateDnsRecordSet `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $dnsEntry `
-RecordType A `
-ZoneName $dnsZoneName `
-Ttl 600 `
-PrivateDnsRecords $privateDnsRecordConfig `
-ErrorAction Stop | `
Out-Null
}
스토리지 동기화 서비스에 대한 프라이빗 엔드포인트를 만들려면 먼저 스토리지 동기화 서비스에 대한 참조를 가져와야 합니다.
<storage-sync-service-resource-group> 및 <storage-sync-service>를 사용자 환경에 적합한 값으로 바꿔야 합니다. 다음 CLI 명령은 가상 네트워크 정보를 이미 입력했다고 가정합니다.
storageSyncServiceResourceGroupName="<storage-sync-service-resource-group>"
storageSyncServiceName="<storage-sync-service>"
storageSyncService=$(az resource show \
--resource-group $storageSyncServiceResourceGroupName \
--name $storageSyncServiceName \
--resource-type "Microsoft.StorageSync/storageSyncServices" \
--query "id" | \
tr -d '"')
storageSyncServiceRegion=$(az resource show \
--resource-group $storageSyncServiceResourceGroupName \
--name $storageSyncServiceName \
--resource-type "Microsoft.StorageSync/storageSyncServices" \
--query "location" | \
tr -d '"')
프라이빗 엔드포인트를 만들려면 먼저 서브넷의 프라이빗 엔드포인트 네트워크 정책을 해제해야 합니다. 그런 다음, az network private-endpoint create 명령을 사용하여 프라이빗 엔드포인트를 만들 수 있습니다.
# Disable private endpoint network policies
az network vnet subnet update \
--ids $subnet \
--disable-private-endpoint-network-policies \
--output none
# Get virtual network location
region=$(az network vnet show \
--ids $virtualNetwork \
--query "location" | \
tr -d '"')
# Create a private endpoint
privateEndpoint=$(az network private-endpoint create \
--resource-group $storageSyncServiceResourceGroupName \
--name "$storageSyncServiceName-PrivateEndpoint" \
--location $region \
--subnet $subnet \
--private-connection-resource-id $storageSyncService \
--group-id "Afs" \
--connection-name "$storageSyncServiceName-Connection" \
--query "id" | \
tr -d '"')
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>을 입력합니다.
$storageAccountResourceGroupName = "<storage-account-resource-group>"
$storageAccountName = "<storage-account-name>"
$restrictToVirtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$restrictToVirtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-ErrorAction Stop
$virtualNetwork = Get-AzVirtualNetwork `
-ResourceGroupName $restrictToVirtualNetworkResourceGroupName `
-Name $restrictToVirtualNetworkName `
-ErrorAction Stop
$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 $restrictToVirtualNetworkName." `
-ErrorAction Stop
}
스토리지 계정 퍼블릭 엔드포인트로 이동하기 위해 가상 네트워크의 트래픽을 Azure 네트워크 패브릭에서 허용하려면 가상 네트워크 서브넷의 Microsoft.Storage 서비스 엔드포인트가 공개되어야 합니다. 다음 PowerShell 명령은 서브넷에 Microsoft.Storage 서비스 엔드포인트가 아직 추가되지 않은 경우 이 서비스 엔드포인트를 추가합니다.
$serviceEndpoints = $subnet | `
Select-Object -ExpandProperty ServiceEndpoints | `
Select-Object -ExpandProperty Service
if ($serviceEndpoints -notcontains "Microsoft.Storage") {
if ($null -eq $serviceEndpoints) {
$serviceEndpoints = @("Microsoft.Storage")
} elseif ($serviceEndpoints -is [string]) {
$serviceEndpoints = @($serviceEndpoints, "Microsoft.Storage")
} else {
$serviceEndpoints += "Microsoft.Storage"
}
$virtualNetwork = $virtualNetwork | Set-AzVirtualNetworkSubnetConfig `
-Name $subnetName `
-AddressPrefix $subnet.AddressPrefix `
-ServiceEndpoint $serviceEndpoints `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Set-AzVirtualNetwork `
-ErrorAction Stop
}
트래픽을 스토리지 계정으로 제한하기 위한 마지막 단계는 네트워킹 규칙을 만들어서 스토리지 계정의 네트워크 규칙 세트에 추가하는 것입니다.
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule `
-VirtualNetworkResourceId $subnet.Id `
-ErrorAction Stop
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
서비스 엔드포인트를 사용하여 스토리지 계정의 퍼블릭 엔드포인트에 대한 액세스를 특정 가상 네트워크로 제한하려면 먼저 스토리지 계정 및 가상 네트워크에 대한 정보를 수집해야 합니다. 이 정보를 수집하기 위해 <storage-account-resource-group>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name> 및 <subnet-name>을 입력합니다.
storageAccountResourceGroupName="<storage-account-resource-group>"
storageAccountName="<storage-account-name>"
restrictToVirtualNetworkResourceGroupName="<vnet-resource-group-name>"
restrictToVirtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
storageAccount=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" | \
tr -d '"')
virtualNetwork=$(az network vnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--name $restrictToVirtualNetworkName \
--query "id" | \
tr -d '"')
subnet=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "id" | \
tr -d '"')
스토리지 계정 퍼블릭 엔드포인트로 이동하기 위해 가상 네트워크의 트래픽을 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
트래픽을 스토리지 계정으로 제한하기 위한 마지막 단계는 네트워킹 규칙을 만들어서 스토리지 계정의 네트워크 규칙 세트에 추가하는 것입니다.
az storage account network-rule add \
--resource-group $storageAccountResourceGroupName \
--account-name $storageAccountName \
--subnet $subnet \
--output none
az storage account update \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--bypass "AzureServices" \
--default-action "Deny" \
--output none
스토리지 동기화 서비스 퍼블릭 엔드포인트에 대한 액세스 사용 안 함
Azure 파일 동기화를 사용하면 특정 가상 네트워크에 대한 액세스를 프라이빗 엔드포인트를 통해서만 가능하도록 제한할 수 있습니다. Azure 파일 동기화는 퍼블릭 엔드포인트에 대한 액세스를 특정 가상 네트워크로 제한하기 위한 서비스 엔드포인트를 지원하지 않습니다. 즉 스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 두 가지 상태가 사용 및 사용 안 함입니다.
중요
퍼블릭 엔드포인트에 대한 액세스를 사용하지 않도록 설정하기 전에 프라이빗 엔드포인트를 만들어야 합니다. 프라이빗 엔드포인트가 구성되지 않고 퍼블릭 엔드포인트를 사용할 수 없으면 동기화할 수 없습니다.
스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 액세스를 사용하지 않도록 설정하려면 다음 단계를 수행합니다.
-
Azure Portal에 로그인합니다.
- 스토리지 동기화 서비스로 이동하고 왼쪽 탐색 영역에서 설정>네트워크를 선택합니다.
-
다음에서 액세스 허용에서 프라이빗 엔드포인트만을 선택합니다.
-
프라이빗 엔드포인트 연결 목록에서 프라이빗 엔드포인트를 선택합니다.
스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 액세스를 사용하지 않도록 설정하려면 스토리지 동기화 서비스에서 incomingTrafficPolicy 속성을 AllowVirtualNetworksOnly로 설정합니다. 스토리지 동기화 서비스의 퍼블릭 엔드포인트에 대한 액세스를 사용하도록 설정하려면 incomingTrafficPolicy를 AllowAllTraffic으로 설정합니다.
<storage-sync-service-resource-group> 및 <storage-sync-service>을 고유한 값으로 바꾸어야 합니다.
$storageSyncServiceResourceGroupName = "<storage-sync-service-resource-group>"
$storageSyncServiceName = "<storage-sync-service>"
Set-AzStorageSyncService `
-ResourceGroupName $storageSyncServiceResourceGroupName `
-Name $storageSyncServiceName `
-IncomingTrafficPolicy AllowVirtualNetworksOnly
Azure CLI는 스토리지 동기화 서비스에서 incomingTrafficPolicy 속성을 설정하는 것을 지원하지 않습니다. 스토리지 동기화 서비스 퍼블릭 엔드포인트를 사용하지 않도록 설정하는 방법에 대한 지침을 보려면 Azure PowerShell 탭을 선택하세요.
Azure Policy
Azure Policy는 조직의 표준을 적용하고 대규모로 이러한 표준에 대한 준수를 평가하는 데 도움이 됩니다. Azure Files 및 Azure File 동기화는 배포를 모니터링하고 자동화하는 데 도움이 되는 몇 가지 유용한 감사 및 수정 네트워크 정책을 노출합니다.
정책은 사용자 환경을 감사하고 스토리지 계정 또는 스토리지 동기화 서비스가 정의된 동작에서 벗어나는 경우 사용자에게 알립니다. 예를 들어 퍼블릭 엔드포인트를 사용하지 않도록 설정하는 정책이 설정된 경우 퍼블릭 엔드포인트를 사용합니다. 정책 수정/배포는 추가 단계를 수행하고 리소스(예: 스토리지 동기화 서비스)를 사전에 수정하거나 정책에 맞게 리소스(예: 프라이빗 엔드포인트)를 배포합니다.
Azure Files 및 Azure File 동기화에 대해 다음과 같은 미리 정의된 정책을 사용할 수 있습니다.
| 작업 |
서비스 |
조건 |
정책 이름 |
| 감사 |
Azure 파일 |
스토리지 계정의 퍼블릭 엔드포인트가 사용됩니다. 더 자세한 정보는 신뢰할 수 있는 Azure 서비스에 대한 액세스 권한 부여 및 스토리지 계정 퍼블릭 엔드포인트에 대한 액세스 사용 안 함을 참조하세요. |
스토리지 계정은 네트워크 액세스를 제한해야 함 |
| 감사 |
Azure 파일 동기화 |
스토리지 동기화 서비스의 퍼블릭 엔드포인트를 사용합니다. 자세한 내용은 스토리지 동기화 서비스 퍼블릭 엔드포인트에 대한 액세스 사용 안 함을 참조하세요. |
Azure 파일 동기화의 공용 네트워크 액세스를 사용하지 않도록 설정해야 함 |
| 감사 |
Azure 파일 |
스토리지 계정에는 하나 이상의 프라이빗 엔드포인트가 있어야 합니다. 자세한 내용은 스토리지 계정 프라이빗 엔드포인트 만들기를 참조하세요. |
스토리지 계정은 프라이빗 링크 연결을 사용해야 합니다. |
| 감사 |
Azure 파일 동기화 |
스토리지 동기화 서비스에는 하나 이상의 프라이빗 엔드포인트가 있어야 합니다. 자세한 내용은 스토리지 동기화 서비스 프라이빗 엔드포인트 만들기를 참조하세요. |
Azure 파일 동기화는 프라이빗 링크를 사용해야 합니다. |
| 수정 |
Azure 파일 동기화 |
스토리지 동기화 서비스의 퍼블릭 엔드포인트를 사용하지 않습니다. |
수정 - 공용 네트워크 액세스를 사용하지 않도록 Azure 파일 동기화를 구성합니다. |
| 배포 |
Azure 파일 동기화 |
스토리지 동기화 서비스에 대한 프라이빗 엔드포인트를 배포합니다. |
프라이빗 엔드포인트를 사용하여 Azure 파일 동기화를 구성합니다. |
| 배포 |
Azure 파일 동기화 |
privatelink.afs.azure.net DNS 영역에 A 레코드를 배포합니다. |
프라이빗 DNS 영역을 사용하도록 Azure 파일 동기화를 구성합니다. |
프라이빗 엔드포인트 배포 정책 설정
프라이빗 엔드포인트 배포 정책을 설정하려면 Azure Portal로 이동하여 정책을 검색합니다. Azure Policy 센터가 상위 결과로 나타납니다. 정책 센터의 목차에서 작성>정의로 이동합니다. 결과 정의 창에는 모든 Azure 서비스에 대해 미리 정의된 정책이 포함됩니다. 특정 정책을 찾으려면 범주 필터에서 스토리지 범주를 선택하거나 프라이빗 엔드포인트를 사용하여 Azure 파일 동기화 구성을 검색합니다.
...를 선택하고 할당을 선택하여 정의에서 새 정책을 만듭니다.
정책 할당 마법사의 기본 블레이드를 사용하여 범위, 리소스 또는 리소스 그룹 제외 목록을 설정하고 정책을 구분하는 데 도움이 되는 친숙한 이름을 지정할 수 있습니다. 정책이 작동하도록 하기 위해 이러한 작업을 수정할 필요는 없지만 수정하고자 하는 경우 수정할 수는 있습니다.
다음을 선택하여 매개 변수 페이지로 이동합니다.
매개 변수 블레이드에서 privateEndpointSubnetId 드롭다운 목록 옆에 있는 ...를 선택하여 스토리지 동기화 서비스 리소스의 프라이빗 엔드포인트를 배포할 가상 네트워크 및 서브넷을 선택합니다. 결과로 생성된 마법사는 구독에서 사용 가능한 가상 네트워크를 로드하는 데 몇 초 정도 걸릴 수 있습니다. 사용자 환경에 적합한 가상 네트워크/서브넷을 선택하고 선택을 클릭합니다.
다음을 선택하여 수정 블레이드로 이동합니다.
프라이빗 엔드포인트 없이 스토리지 동기화 서비스를 식별하는 경우 프라이빗 엔드포인트를 배포하려면 수정 페이지에서 수정 작업 만들기를 선택해야 합니다. 마지막으로 검토 + 만들기를 선택하여 정책 할당을 검토하고 만들기를 선택합니다.
결과적으로 정책 할당은 주기적으로 실행되며 만들어진 직후에 실행되지 않을 수 있습니다.
참고 항목