Azure 파일 동기화는 각각 고유한 네트워크 엔드포인트를 가진 두 개의 Azure 리소스를 사용합니다: 스토리지 계정(Azure 파일 공유를 보유)과 스토리지 싱크 서비스(동기화, 서버 등록, 동기화 그룹을 조정하는 서비스)입니다. 두 리소스 모두 기본적으로 공개 엔드포인트를 사용합니다.
Azure 파일 동기화 에이전트는 HTTPS(포트 443)를 통해 두 리소스와 통신합니다. VPN이나 ExpressRoute 없이 인터넷을 통해 Azure에 접속하는 서버는 공개 엔드포인트를 사용할 수 있고 별도의 설정이 필요하지 않습니다. 하지만 대부분의 Azure 파일 동기화 고객은 프라이버시 엔드포인트를 설정하기를 원합니다.
다음 표를 사용하여 프라이빗 엔드포인트가 필요한지 결정하세요. 필요하다면 두 리소스 모두에 대해 프라이빗 엔드포인트를 만드세요.
| 저는...해야 합니다 |
사용하세요 |
| VPN이나 ExpressRoute 없이 인터넷을 통해 Azure에 연결하는 동기화 서버 |
공개 엔드포인트 (설정 필요 없음) |
| 모든 동기화 트래픽을 ExpressRoute 또는 사이트 간 VPN 연결을 통해 라우팅하세요 |
두 자원 모두에 대한 프라이비시 엔드포인트 |
| 공용 인터넷을 통한 데이터 제공을 금지하는 준수 요건 충족 |
두 자원 모두에 대한 프라이비시 엔드포인트 |
| 보안 강화 조치로 공개 엔드포인트를 비활성화하세요 |
먼저 두 리소스에 대해 프라이빗 엔드포인트를 설정하고, 그 다음에 접근 권한을 제한하세요 |
| 제로 트러스트 네트워크 접속을 구현하세요 |
두 자원 모두에 대한 프라이비시 엔드포인트 |
더 넓은 네트워킹 개념에 대해서는 Azure 파일 동기화 네트워킹 고려사항을 참고하세요. Azure 파일 동기화를 사용하지 않고 Azure 파일 공유에 직접 액세스하기 위한 엔드포인트를 구성하려면 Azure Files 네트워크 엔드포인트 구성을 참조하세요.
필수 구성 요소
이 문서에서는 다음을 가정합니다.
- Azure 구독이 있습니다. Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- 온프레미스에서 연결하고자 하는 SMB Azure 클래식 파일 공유를 저장 계정에 생성하셨습니다. Azure 클래식 파일 공유 생성 방법을 배우려면 'Azure 클래식 파일 공유 만들기'를 참조하세요.
- 방화벽은 통신에 필요한 도메인을 허용합니다.
Azure 파일 동기화 방화벽 설정을 참조하세요.
또한 다음 작업도 수행해야 합니다.
프라이빗 엔드포인트 만들기
Azure 리소스의 프라이빗 엔드포인트를 만들 때 배포되는 리소스는 다음과 같습니다.
| 배치된 자원 |
Description |
수행할 일 |
|
프라이빗 엔드포인트 |
스토리지 계정 또는 Storage Sync Service를 사용자의 가상 네트워크에 있는 네트워크 인터페이스에 연결하는 Azure 리소스 |
스토리지 계정 프라이빗 엔드포인트 생성과 스토리지 동기화 서비스 프라이빗 엔드포인트 생성 중 각 리소스별로 하나씩 생성하세요 |
|
NIC(네트워크 인터페이스) |
서브넷 내 개인 엔드포인트의 개인 IP 주소를 보유합니다 |
프라이비시 엔드포인트로 자동으로 생성됨; 추가 조치는 필요 없어 |
|
프라이빗 DNS 영역 |
리소스의 공용 호스트네임을 사설 엔드포인트 IP 주소에 매핑하여 클라이언트가 연결 문자열을 변경하지 않고 사설 엔드포인트로 해석되도록 합니다 |
존재하지 않으면 자동으로 생성됩니다; 수동 DNS 설정을 피하는 것이 권장됩니다 |
참고
이 글은 Azure 공개 영역core.windows.net(스토리지 계정과 afs.azure.net 스토리지 싱크 서비스)에 대한 DNS 접미사를 사용합니다. 이 명명법은 Azure 미국 정부 클라우드와 같은 Azure Sovereign 클라우드에도 적용됩니다. 사용자 환경에 적합한 접미사로 바꾸기만 하면 됩니다.
스토리지 계정 프라이빗 엔드포인트 만들기
프라이빗 엔드포인트를 만들려는 스토리지 계정으로 이동합니다. 서비스 메뉴의 보안 + 네트워킹에서 네트워킹, 프라이빗 엔드포인트 연결을 선택한 다음 + 프라이빗 엔드포인트를 선택하여 새 프라이빗 엔드포인트를 만듭니다.
그 결과로 마법사에는 완료할 페이지가 여러 개 있습니다.
기본 사항 블레이드에서 프라이빗 엔드포인트에 원하는 구독, 리소스 그룹, 이름, 네트워크 인터페이스 이름 및 지역을 선택합니다. 이러한 항목은 원하는 대로 지정할 수 있지만 어쨌든 간에 스토리지 계정과 일치할 필요는 없습니다. 그러나 프라이빗 엔드포인트는 해당 프라이빗 엔드포인트를 만들려는 가상 네트워크와 동일한 지역에 만들어야 합니다. 그런 다음, 다음: 리소스를 선택합니다.
리소스 블레이드에서 대상 하위 리소스에 대한 파일을 선택합니다. 그런 다음 , 다음: 가상 네트워크를 선택합니다.
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 포워딩을 설정한 대로 설정했다면, 다음 명령어를 사용하여 개인 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다:
$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 포워딩을 설정한 대로 설정했다면, 다음 명령어를 사용하여 개인 엔드포인트가 올바르게 설정되었는지 테스트할 수 있습니다:
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 포털 상단 검색창에 Private Link를 입력해 Private Link 센터로 가세요. Private Link Center 목차에서 Private 엔드포인트를 선택한 후 + 추가를 선택하여 새로운 프라이빗 엔드포인트를 생성합니다.
그 결과로 마법사에는 완료할 페이지가 여러 개 있습니다.
기본 탭에서 개인 엔드포인트의 리소스 그룹, 이름, 지역을 선택하세요. 이 값들은 어떤 유효한 값이든 될 수 있습니다. 스토리지 싱크 서비스와 꼭 일치할 필요는 없지만, 선택한 가상 네트워크와 같은 영역에서 프라이빗 엔드포인트를 만들어야 합니다.
리소스 탭에서 내 디렉터리의 Azure 리소스에 연결을 선택합니다.
리소스 유형 아래에서 Microsoft를 선택하세요. 스토리지동기화/스토리지동기화서비스.
구성 탭에서는 프라이빗 엔드포인트를 추가하고자 하는 특정 가상 네트워크와 서브넷을 선택할 수 있습니다. 스토리지 계정으로 사용한 가상 네트워크와 동일한 가상 네트워크를 선택하세요.
구성 탭에는 프라이빗 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 a 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:
# privatelink.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 파일 동기화와 같은 신뢰할 수 있는 자사 Microsoft 서비스가 스토리지 계정에 액세스할 수 있도록 허용하려면, 스토리지 계정에서 신뢰할 수 있는 Microsoft 서비스가 이 리소스에 액세스하도록 허용 확인란을 선택하세요. 자세한 내용은 ' 특정 네트워크로만 공개 엔드포인트 접근 제한'을 참조하세요.
중요
Azure 파일 동기화에는 NSP(네트워크 보안 경계)의 알려진 제한 사항이 있습니다.
스토리지 동기화 서비스는 경계 내에 배치할 수 없으며 전체 경계 통합은 지원되지 않습니다.
스토리지 동기화 서비스를 NSP로 보호되는 스토리지 계정에 연결하려면 다음을 수행합니다.
-
관리 ID를 사용하도록 스토리지 동기화 서비스를 구성합니다.
- 스토리지 동기화 서비스를 호스팅하는 구독을 허용 목록에 추가하는 NSP 인바운드 프로필 규칙을 만듭니다.
동기화가 올바르게 작동하려면 스토리지 동기화 서비스가 경계 외부에 남아 있어야 합니다.
신뢰할 수 있는 Azure 서비스에 대한 액세스 권한 부여 및 스토리지 계정 퍼블릭 엔드포인트에 대한 액세스 사용 안 함
공개 엔드포인트에 대한 접근을 비활성화해도, 저장 계정의 개인 엔드포인트를 통해 여전히 접근할 수 있지만, 저장 계정의 공개 엔드포인트에 대한 요청은 거부됩니다.
퍼블릭 엔드포인트에 대한 모든 액세스를 제한하려는 스토리지 계정으로 이동합니다. 스토리지 계정의 목차에서 네트워킹을 선택합니다.
페이지 맨 위에서 선택한 가상 네트워크 및 IP 주소에서 사용 라디오 단추를 선택합니다. 그러면 퍼블릭 엔드포인트의 제한을 제어할 수 있는 여러 설정이 표시됩니다.
신뢰할 수 있는 서비스 목록의 Azure 서비스에서 이 스토리지 계정에 액세스하도록 허용을 선택하여 Azure 파일 동기화와 같은 신뢰할 수 있는 자사 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 파일 동기화와 같은 신뢰할 수 있는 자사 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 하세요. Storage Sync Service 공개 엔드포인트에 대한 액세스를 사용하도록 설정하려면 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 Files 및 Azure 파일 동기화용 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 포털에 로그인하고 'Policy'를 검색하세요. 결과에서 정책을 선택하세요.
- 정책 센터의 목차에서 작성>정의로 이동하세요.
-
정의 창에서 카테고리 필터에서 스토리지 카테고리를 선택하거나, 'Configure Azure 파일 동기화 with private endpoints'를 검색하세요.
- 정책 옆에서 ... 를 선택한 후 할당을 선택하세요.
-
기본 항목 페이지에서 선택적으로 범위, 제외 목록, 그리고 정책의 친근한 이름을 설정할 수 있습니다.
다음을 선택합니다.
-
매개변수 페이지에서 privateEndpointSubnetId 필드 옆에 있는 ...를 선택하세요. 스토리지 싱크 서비스 리소스의 프라이빗 엔드포인트가 배포될 가상 네트워크와 서브넷을 선택하세요. 마법사는 사용 가능한 가상 네트워크를 불러오는 데 몇 초가 걸릴 수 있습니다.
다음을 선택합니다.
-
복구 페이지에서 '복구 작업 생성'을 선택하여, 개인 엔드포인트가 없는 스토리지 동기화 서비스가 식별될 때 프라이빗 엔드포인트가 배포되도록 합니다.
-
Review + create를 선택하여 정책 할당을 검토한 후 Create를 선택하세요.
결과적으로 정책 할당은 주기적으로 실행되며 만들어진 직후에 실행되지 않을 수 있습니다.
참고 항목