본문으로 건너뛰기
azure검색
네트워크

Private Endpoint 와 Private DNS (PaaS 를 사설 IP 로)

Private Endpoint 와 Private Link 서비스의 차이, 서비스 엔드포인트와 비교, 이름 확인이 CNAME 과 Private DNS 영역으로 사설 IP 가 되는 원리, 서비스별 privatelink 영역 이름, 허브 스포크와 온프레미스에서의 DNS 설계(DNS Private Resolver), 비용과 흔한 실수를 정리합니다.

Private EndpointPrivate LinkPrivate DNSDNS Private Resolverprivatelink서비스 엔드포인트2026-10 기준, 약 9분

무엇을 하는가

Private Endpoint 는 스토리지, SQL, Key Vault 같은 PaaS 리소스에 내 VNet 의 사설 IP 를 가진 NIC 를 만들어 주는 기능입니다. 트래픽이 인터넷이 아니라 Microsoft 백본의 Private Link 로 갑니다. 그 다음 PaaS 의 공용 네트워크 액세스를 끄면 인터넷에서는 아예 닿지 않습니다.

기능무엇대상 IP온프레미스에서
Private Endpoint특정 리소스 하나에 사설 IP내 VNet 의 사설 IPVPN, ExpressRoute 로 접근 가능
서비스 엔드포인트서브넷에서 서비스로 가는 경로 최적화 + 서비스 방화벽에서 서브넷 허용여전히 공용 IP안 됨
Private Link 서비스내가 만든 서비스(표준 LB 뒤)를 다른 고객 VNet 에 Private Endpoint 로 노출

데이터 유출 방지 관점에서는 Private Endpoint 가 낫습니다. 서비스 엔드포인트는 같은 종류의 다른 계정에도 갈 수 있지만, Private Endpoint 는 정한 리소스 하나에만 이어집니다.

이름 확인이 핵심

Private Endpoint 를 만들어도 앱은 여전히 stcontoso.blob.core.windows.net 같은 원래 이름으로 접속합니다. 그 이름이 사설 IP 로 풀리게 만드는 것이 DNS 의 일입니다.

VNet 10.10.0.0/16 (Korea Central) 앱 VM 10.10.1.4 stcontoso.blob.core.windows.net 조회 Private Endpoint snet-pe, NIC 10.10.2.5 Azure DNS 168.63.129.16 VNet 기본 DNS Private DNS 영역 privatelink.blob.core.windows.net A stcontoso = 10.10.2.5 VNet 링크가 있어야 이 VNet 에서 보임 공용 DNS (인터넷) stcontoso.blob.core.windows.net CNAME stcontoso.privatelink.blob... 밖에서는 공인 IP 로 풀림 스토리지 계정 stcontoso 공용 네트워크 액세스: 사용 안 함 Private Link 로만 들어옴 1 질의 2 CNAME 확인 3 사설 A 레코드 4 연결
Private Endpoint 의 이름 확인 흐름
  1. Private Endpoint 를 만들면 공용 DNS 에서 stcontoso.blob.core.windows.net 이 stcontoso.privatelink.blob.core.windows.net 의 CNAME 이 됩니다.
  2. VNet 에 privatelink.blob.core.windows.net Private DNS 영역이 링크되어 있으면, Azure DNS(168.63.129.16)가 그 영역의 A 레코드(사설 IP)를 돌려줍니다.
  3. 영역이 없거나 VNet 에 링크되지 않았으면 CNAME 끝에서 공인 IP 가 나오고, 공용 액세스를 꺼 두었다면 연결이 거부됩니다.

그래서 "Private Endpoint 를 만들었는데 안 된다" 의 대부분은 DNS 문제입니다. 증상별 해결은 Private Endpoint DNS 이름 확인 실패에 있습니다.

서비스별 Private DNS 영역

서비스(그리고 하위 리소스)마다 영역 이름이 다릅니다. 자주 쓰는 것만 추렸습니다. 전체 목록은 Microsoft Learn 의 "Azure Private Endpoint DNS zone values" 를 봅니다.

서비스 (하위 리소스)Private DNS 영역
Blob (blob)privatelink.blob.core.windows.net
ADLS Gen2 (dfs)privatelink.dfs.core.windows.net
Azure Files (file)privatelink.file.core.windows.net
Azure SQL Database (sqlServer)privatelink.database.windows.net
PostgreSQL flexible serverprivatelink.postgres.database.azure.com
Cosmos DB NoSQL (Sql)privatelink.documents.azure.com
Key Vault (vault)privatelink.vaultcore.azure.net
App Service, Functions (sites)privatelink.azurewebsites.net
Container Registry (registry)privatelink.azurecr.io
Azure AI Search (searchService)privatelink.search.windows.net
Foundry, Azure OpenAI (account)privatelink.cognitiveservices.azure.com, privatelink.openai.azure.com, privatelink.services.ai.azure.com
Event Hubs, Service Bus (namespace)privatelink.servicebus.windows.net

주의 스토리지 계정은 하위 리소스마다 Private Endpoint 가 따로 필요합니다. Blob 용만 만들고 ADLS Gen2(dfs) 경로로 접근하면 공인 IP 로 풀립니다. Foundry 같은 AI 리소스도 영역이 여러 개입니다.

만들기

az network private-endpoint create -g rg-shop-prod -n pe-stshop-blob \
  --vnet-name vnet-shop-prod --subnet snet-pe \
  --private-connection-resource-id $(az storage account show -n stshopprodkrc --query id -o tsv) \
  --group-id blob --connection-name stshop-blob

# 영역 그룹: Private Endpoint 가 영역에 A 레코드를 자동으로 넣고 지울 때 같이 지움
az network private-endpoint dns-zone-group create -g rg-shop-prod --endpoint-name pe-stshop-blob \
  -n default --private-dns-zone privatelink.blob.core.windows.net --zone-name blob

DNS 영역 그룹을 쓰지 않고 A 레코드를 손으로 넣으면 Private Endpoint 를 다시 만들 때 IP 가 바뀌어 레코드가 낡습니다. 영역 그룹이나 Azure Policy(DeployIfNotExists)로 자동화합니다.

대규모 설계: 영역은 한 곳에

Private DNS 영역을 스포크마다 만들면 같은 이름의 영역이 여러 개 생겨 서로 다른 답을 줍니다. 엔터프라이즈 랜딩 존의 권장 구조는 다음과 같습니다.

  1. privatelink.* 영역은 connectivity 구독에 한 벌만 만듭니다.
  2. 영역을 허브 VNet 에 링크하고, 허브에 DNS Private Resolver 를 둡니다.
  3. 스포크 VNet 의 DNS 서버를 Resolver 인바운드 엔드포인트 IP 로 지정합니다(또는 스포크도 영역에 링크).
  4. 온프레미스 DNS 는 blob.core.windows.net 같은 공용 영역 이름(privatelink 가 아닌)을 Resolver 인바운드 IP 로 조건부 전달합니다.
  5. 각 랜딩 존에서 Private Endpoint 를 만들면 Azure Policy 가 중앙 영역에 레코드를 넣습니다.

온프레미스에서 privatelink.blob.core.windows.net 만 전달하면 앞 단계의 CNAME 질의가 인터넷 DNS 로 가므로, 반드시 원래 공용 영역 이름을 전달합니다. 허브 스포크 전체 그림은 허브 스포크와 방화벽에 있습니다.

비용과 한도

  • Private Endpoint 는 시간당 요금 + 들어오고 나가는 데이터 GB 당 요금이 붙습니다. 리소스마다, 하위 리소스마다 만들면 수가 빠르게 늘어납니다.
  • Private DNS 영역도 영역당 월 요금과 질의 요금이 있지만 작습니다.
  • VNet 당 Private Endpoint 수, 영역당 VNet 링크 수에 한도가 있으니 큰 조직은 미리 확인합니다.

체크리스트

  • 리소스의 공용 네트워크 액세스를 껐는가 (끄지 않으면 Private Endpoint 는 "추가 경로" 일 뿐)
  • 필요한 하위 리소스(blob, dfs, file ...)마다 Private Endpoint 가 있는가
  • 맞는 이름의 Private DNS 영역이 질의하는 VNet 에서 보이는가
  • 사용자 지정 DNS 서버를 쓰면 168.63.129.16 이나 Resolver 로 전달하는가
  • 온프레미스는 공용 영역 이름을 조건부 전달하는가

공식 문서

이 문서에서