다음을 통해 공유


VM 또는 Azure DNS Private Resolver를 사용하여 Azure Files에 대한 DNS 전달 구성

Azure Files를 사용하면 파일 공유를 포함하는 스토리지 계정의 프라이빗 엔드포인트를 만들 수 있습니다. 프라이빗 엔드포인트는 다양한 애플리케이션에 유용하지만, 온-프레미스 네트워크에서 프라이빗 피어링을 사용하는 VPN 또는 ExpressRoute 연결을 통해 Azure 파일 공유에 연결할 때 특히 유용합니다.

스토리지 계정에 대한 연결이 네트워크 터널을 통해 이동하려면 스토리지 계정의 FQDN(정규화된 도메인 이름)이 프라이빗 엔드포인트의 개인 IP 주소를 확인해야 합니다. 이를 위해서는 스토리지 엔드포인트 접미사(퍼블릭 클라우드 지역은 core.windows.net)를 가상 네트워크 내에서 액세스할 수 있는 Azure 프라이빗 DNS 서비스에 전달해야 합니다. 이 가이드에서는 스토리지 계정의 프라이빗 엔드포인트 IP 주소를 적절하게 확인하도록 DNS 전달을 설정하고 구성하는 방법을 보여줍니다.

이 문서에 설명된 단계를 완료하기 전에 Azure Files 배포에 대한 계획Azure Files 네트워킹 고려 사항을 읽어보는 것이 좋습니다.

적용 대상

파일 공유 유형 SMB NFS
표준 파일 공유(GPv2), LRS/ZRS 예 아니요
표준 파일 공유(GPv2), GRS/GZRS 예 아니요
프리미엄 파일 공유(FileStorage), LRS/ZRS 예 예

개요

Azure Files는 Azure 파일 공유에 액세스하기 위한 다음과 같은 두 가지 기본 유형의 엔드포인트를 제공합니다.

  • 퍼블릭 엔드포인트 - 공용 IP 주소를 사용하며 전 세계 어디서나 액세스할 수 있습니다.
  • 프라이빗 엔드포인트 - 가상 네트워크 내에 존재하며 해당 가상 네트워크의 주소 공간 내에서 개인 IP 주소를 사용합니다.
  • 서비스 엔드포인트 - 퍼블릭 엔드포인트에 대한 액세스를 특정 가상 네트워크로 제한합니다. 여전히 공용 IP 주소를 통해 스토리지 계정에 액세스할 수 있지만 구성에서 지정한 위치에서만 액세스할 수 있습니다.

퍼블릭 엔드포인트와 프라이빗 엔드포인트는 Azure 스토리지 계정에 있습니다. 스토리지 계정은 여러 파일 공유뿐만 아니라 다른 스토리지 리소스(예: Blob 컨테이너 또는 큐)도 배포할 수 있는 공유 스토리지 풀을 나타내는 관리 구조입니다.

모든 스토리지 계정에는 FQDN(정규화된 도메인 이름)이 있습니다. 퍼블릭 클라우드 지역의 경우 이 FQDN은 storageaccount.file.core.windows.net 패턴을 따르며, 여기서 storageaccount는 스토리지 계정의 이름입니다. 워크스테이션에 공유를 탑재하는 경우처럼 이 이름을 요청하면 운영 체제에서는 DNS 조회를 수행하여 정규화된 도메인 이름을 IP 주소로 확인합니다.

기본적으로 storageaccount.file.core.windows.net은 퍼블릭 엔드포인트의 IP 주소를 확인합니다. 스토리지 계정의 퍼블릭 엔드포인트는 다른 여러 스토리지 계정의 퍼블릭 엔드포인트를 호스팅하는 Azure 스토리지 클러스터에 호스팅됩니다. 프라이빗 엔드포인트를 만들 때 프라이빗 DNS 영역은 추가된 가상 네트워크에 연결되며, CNAME 레코드는 스토리지 계정 프라이빗 엔드포인트의 개인 IP 주소에 대한 A 레코드 항목에 storageaccount.file.core.windows.net을 매핑합니다. 이를 통해 가상 네트워크 내에서 storageaccount.file.core.windows.net FQDN을 사용하여 프라이빗 엔드포인트의 IP 주소를 확인할 수 있습니다.

우리의 최종 목표는 온-프레미스에서 VPN 또는 ExpressRoute 연결과 같은 네트워크 터널을 사용하여 스토리지 계정 내에 호스팅되는 Azure 파일 공유에 액세스하는 것이므로, Azure Files 서비스에 대한 요청을 Azure 프라이빗 DNS 서비스에 전달하도록 온-프레미스 DNS 서버를 구성해야 합니다.

다음 두 가지 방법 중 하나로 DNS 전달을 구성할 수 있습니다.

  • DNS 서버 VM 사용:*.core.windows.net(또는 미국 정부, 독일, 중국 국가 클라우드의 경우 적절한 스토리지 엔드포인트 접미사)의 조건부 전달을 Azure 가상 네트워크 내에서 호스팅되는 DNS 서버 가상 머신으로 설정합니다. 그런 다음, 이 DNS 서버는 요청을 Azure의 프라이빗 DNS 서비스에 재귀적으로 전달하고, 서비스에서는 스토리지 계정의 정규화된 도메인 이름을 적절한 개인 IP 주소로 확인합니다. 가상 네트워크 내에서 호스트되는 모든 Azure 파일 공유에 대한 일회성 단계입니다.

  • Azure DNS Private Resolver 사용: VM 기반 DNS 서버를 배포하지 않으려면 Azure DNS Private Resolver를 사용하여 동일한 작업을 수행할 수 있습니다.

Azure Files 외에도 다른 모든 Azure 스토리지 서비스(Azure Blob storage, Azure Table storage, Azure Queue storage 등)에 대한 DNS 이름 확인 요청이 Azure의 프라이빗 DNS 서비스로 전달됩니다. 원하는 경우 다른 Azure 서비스에 대한 엔드포인트를 추가할 수 있습니다.

필수 조건

Azure Files에 대한 DNS 전달을 설정하려면 다음이 필요합니다.

VM을 사용하여 DNS 전달 구성

Azure 가상 네트워크 내에 DNS 서버가 이미 있거나 조직에서 사용하는 방법에 따라 자체 가상 머신을 DNS 서버로 배포하려는 경우 기본 제공 DNS 서버 PowerShell cmdlet을 사용하여 DNS를 구성할 수 있습니다.

Azure에서 가상 머신을 사용하여 DNS 전달을 구성하기 위한 네트워크 토폴로지를 보여 주는 다이어그램.

Important

이 가이드에서는 온-프레미스 환경의 Windows Server 내에서 DNS 서버를 사용 중이라고 가정합니다. 이 가이드에서 설명하는 모든 단계는 Windows DNS 서버뿐 아니라 모든 DNS 서버에서 수행할 수 있습니다.

온-프레미스 DNS 서버에서 Add-DnsServerConditionalForwarderZone을 사용하여 조건부 전달자를 만듭니다. 이 조건부 전달자가 트래픽을 Azure에 적절하게 전달하려면 모든 온-프레미스 DNS 서버에 이 조건부 전달자를 배포해야 합니다. <azure-dns-server-ip> 항목을 사용자 환경에 맞는 적절한 IP 주소로 바꿔야 합니다.

$vnetDnsServers = "<azure-dns-server-ip>", "<azure-dns-server-ip>"

$storageAccountEndpoint = Get-AzContext | `
    Select-Object -ExpandProperty Environment | `
    Select-Object -ExpandProperty StorageEndpointSuffix

Add-DnsServerConditionalForwarderZone `
        -Name $storageAccountEndpoint `
        -MasterServers $vnetDnsServers

또한 스토리지 계정 DNS 영역에 대한 요청이(예약된 IP 주소 168.63.129.16이 앞에 붙는) Azure 프라이빗 DNS 서비스에 전달되도록 Azure 가상 네트워크 내의 DNS 서버에 전달자를 배치해야 합니다. (다른 PowerShell 세션 내에서 명령을 실행하는 경우 $storageAccountEndpoint를 채워야 합니다.)

Add-DnsServerConditionalForwarderZone `
        -Name $storageAccountEndpoint `
        -MasterServers "168.63.129.16"

Azure DNS Private Resolver를 사용하여 DNS 전달 구성

DNS 서버 VM을 배포하지 않으려는 경우 Azure DNS Private Resolver를 사용하여 동일한 작업을 수행할 수 있습니다. See Azure Portal을 사용하여 Azure DNS Private Resolver 만들기를 참조하세요.

Azure DNS Private Resolver를 사용하여 DNS 전달을 구성하기 위한 네트워크 토폴로지를 보여 주는 다이어그램.

Azure에서 DNS 서버의 IP 주소를 가리키는 대신 확인자의 인바운드 엔드포인트 IP 주소를 가리킨다는 점을 제외하고 온-프레미스 DNS 서버를 구성하는 방법에는 차이가 없습니다. 확인자는 기본적으로 Azure 프라이빗 DNS 서버에 쿼리를 전달하므로 구성이 필요하지 않습니다. 프라이빗 DNS 영역이 확인자를 배포하는 VNet에 연결된 경우 확인자는 해당 DNS 영역의 레코드로 회신할 수 있습니다.

Warning

core.windows.net 영역에 대한 전달자를 구성할 때 이 퍼블릭 도메인에 대한 모든 쿼리가 Azure DNS 인프라로 전달됩니다. 이렇게 하면 프라이빗 엔드포인트로 구성된 다른 테넌트의 스토리지 계정에 액세스하려고 할 때 문제가 발생합니다. Azure DNS는 프라이빗 DNS 영역에 존재하지 않는 CNAME을 사용하여 스토리지 계정 퍼블릭 이름에 대한 쿼리에 응답하기 때문입니다. 이 문제의 해결 방법은 사용자 환경에서 테넌트 간 프라이빗 엔드포인트를 만들어 해당 스토리지 계정에 연결하는 것입니다.

Azure DNS Private Resolver를 사용하여 DNS 전달을 구성하려면 온-프레미스 DNS 서버에서 이 스크립트를 실행합니다. <resolver-ip>를 Resolver의 인바운드 엔드포인트 IP 주소로 바꿉니다.

$privateResolver = "<resolver-ip>"

$storageAccountEndpoint = Get-AzContext | `
    Select-Object -ExpandProperty Environment | `
    Select-Object -ExpandProperty StorageEndpointSuffix

Add-DnsServerConditionalForwarderZone `
        -Name $storageAccountEndpoint `
        -MasterServers $privateResolver

DNS 전달자 확인

DNS 전달자가 성공적으로 적용되었는지 테스트하기 전에, Clear-DnsClientCache를 사용하여 로컬 워크스테이션에서 DNS 캐시를 지우는 것이 좋습니다. 스토리지 계정의 정규화된 도메인 이름을 성공적으로 확인할 수 있는지 테스트하려면 Resolve-DnsName 또는 nslookup을 사용합니다.

# Replace storageaccount.file.core.windows.net with the appropriate FQDN for your storage account.
# Note that the proper suffix (core.windows.net) depends on the cloud you're deployed in.
Resolve-DnsName -Name storageaccount.file.core.windows.net

확인된 IP 주소가 스토리지 계정의 IP 주소와 일치하면 이름 확인이 성공한 것입니다.

Name                              Type   TTL   Section    NameHost
----                              ----   ---   -------    --------
storageaccount.file.core.windows. CNAME  29    Answer     csostoracct.privatelink.file.core.windows.net
net

Name       : storageaccount.privatelink.file.core.windows.net
QueryType  : A
TTL        : 1769
Section    : Answer
IP4Address : 192.168.0.4

SMB 파일 공유를 탑재하는 경우 다음 Test-NetConnection 명령을 사용하여 스토리지 계정에 TCP 연결을 성공적으로 만들 수 있는지 확인할 수도 있습니다.

Test-NetConnection -ComputerName storageaccount.file.core.windows.net -CommonTCPPort SMB

참고 항목