Network & Server Factory

개인 공부 기록

Cloud/Azure

[Azure] Private Endpoint와 Service Endpoint 비교

1nfra 2026. 9. 24. 20:12
Service Endpoint는 서브넷에서 Azure PaaS로 가는 트래픽을 Azure 백본으로 보내 주지만 목적지는 여전히 공용 엔드포인트입니다. Private Endpoint는 PaaS 리소스 하나에 VNet의 사설 IP를 붙이는 방식이라 온프레미스에서도 쓸 수 있고 공용 접근을 끌 수 있습니다. 대신 Private DNS Zone 설계가 함께 필요합니다.

1. 두 방식이 필요한 이유

Storage Account, SQL Database 같은 PaaS(관리형 서비스)는 기본적으로 인터넷에 열린 공용 엔드포인트로 접속합니다. VM이 VNet 안에 있어도 PaaS로 가는 연결은 공용 이름과 공용 IP를 거치기 때문에, 보안 검토에서 "DB가 인터넷에 열려 있다"는 지적을 자주 받습니다.

 

Azure는 이 문제를 두 가지 방식으로 풉니다. Service Endpoint(서비스 엔드포인트)는 서브넷 단위로 켜서 PaaS 방화벽이 "이 서브넷에서 온 트래픽"을 알아보게 하는 방식이고, Private Endpoint(프라이빗 엔드포인트)는 PaaS 리소스를 VNet 안의 사설 IP로 끌어오는 방식입니다. Microsoft 문서는 새로 설계한다면 Private Endpoint를 권장합니다.

2. 동작 방식 비교

Service Endpoint는 공용 엔드포인트로, Private Endpoint는 VNet 안의 사설 IP로 접속

 

Service Endpoint를 켜면 서브넷의 VM이 Storage로 보내는 트래픽의 출발지가 공인 IP에서 VNet 사설 IP(10.1.1.4)로 바뀌고, 경로도 Azure 백본으로 고정됩니다. 하지만 DNS는 여전히 공용 IP를 돌려주므로 목적지는 공용 엔드포인트입니다. 그래서 Storage 방화벽에서 해당 서브넷만 허용하는 식으로 씁니다.

 

Private Endpoint는 서브넷에 네트워크 인터페이스(NIC)를 하나 만들고 사설 IP(10.1.2.5)를 받습니다. 이 NIC는 서비스 전체가 아니라 특정 Storage Account의 blob처럼 리소스 하나에만 연결되므로, 다른 사람의 Storage로 데이터를 빼돌리는 경로가 막힙니다. 이 차이 때문에 Microsoft는 Private Endpoint에만 데이터 유출 방지 효과가 있다고 설명합니다.

 

비교 항목 Service Endpoint Private Endpoint
목적지 주소 공용 엔드포인트 VNet 안의 사설 IP
적용 범위 서브넷에서 서비스 전체
(예: Microsoft.Storage)
리소스 하나
(예: Storage의 blob)
온프레미스 접근 불가 VPN, ExpressRoute로 가능
공용 접근 차단 불가 가능
데이터 유출 방지 없음 있음
DNS 변경 필요 없음 Private DNS Zone 필요
비용 추가 요금 없음 시간당 요금과 처리량 요금

3. Private Endpoint의 핵심은 DNS

Private Endpoint를 만들어도 애플리케이션의 연결 주소는 바뀌지 않습니다. 기존처럼 mystorage.blob.core.windows.net으로 접속하고, DNS가 이 이름을 사설 IP로 풀어 주는 구조입니다. Azure는 공용 DNS에 mystorage.blob.core.windows.net → mystorage.privatelink.blob.core.windows.net CNAME을 만들고, VNet에 연결된 Private DNS Zone이 privatelink 이름에 A 레코드 10.1.2.5를 돌려줍니다.

Azure VM과 온프레미스 서버가 같은 Private DNS Zone으로 사설 IP를 받는 경로

 

Azure 안의 VM은 기본 DNS인 168.63.129.16(Azure DNS)에 질의하면 됩니다. 온프레미스 서버는 이 주소에 직접 닿을 수 없으므로 Hub VNet에 DNS Private Resolver를 두고, 온프레미스 DNS 서버에 조건부 전달자를 설정합니다. 이때 전달 대상 영역은 privatelink.blob.core.windows.net이 아니라 공용 영역인 blob.core.windows.net이어야 합니다.

 

서비스 대상 하위 리소스 Private DNS Zone
Storage Blob blob privatelink.blob.core.windows.net
Storage File file privatelink.file.core.windows.net
SQL Database sqlServer privatelink.database.windows.net
Key Vault vault privatelink.vaultcore.azure.net

Hub-Spoke 구조라면 Private DNS Zone은 Hub(연결 구독)에 한 번만 만들고 각 VNet을 링크하는 편이 좋습니다. Spoke마다 같은 이름의 영역을 따로 만들면 어느 영역이 응답하는지 헷갈리고 레코드가 어긋나기 쉽기 때문입니다.

4. Azure CLI로 만들어 보기

Storage Account의 blob에 Private Endpoint를 붙이고 DNS까지 연결하는 순서입니다. 리소스 그룹, VNet, Storage Account는 이미 있다고 가정합니다.

4.1 Private Endpoint 만들기

RG=rg-app
STORAGE_ID=$(az storage account show --name mystorage --resource-group $RG \
  --query id -o tsv)

# --group-id는 연결할 하위 리소스(blob, file, sqlServer 등)
az network private-endpoint create --resource-group $RG --name pe-blob \
  --vnet-name vnet-app --subnet snet-pe \
  --private-connection-resource-id $STORAGE_ID \
  --group-id blob --connection-name conn-blob

4.2 Private DNS Zone 연결

ZONE=privatelink.blob.core.windows.net
az network private-dns zone create --resource-group $RG --name $ZONE

az network private-dns link vnet create --resource-group $RG --zone-name $ZONE \
  --name link-vnet-app --virtual-network vnet-app --registration-enabled false

# DNS 영역 그룹: Private Endpoint의 A 레코드를 자동으로 만들고 지워 줍니다
az network private-endpoint dns-zone-group create --resource-group $RG \
  --endpoint-name pe-blob --name default \
  --private-dns-zone $ZONE --zone-name blob

4.3 확인

# VNet 안의 VM에서 실행: 사설 IP가 나오면 정상
nslookup mystorage.blob.core.windows.net

# 공용 접근 끄기
az storage account update --name mystorage --resource-group $RG \
  --public-network-access Disabled

nslookup 결과에 privatelink 별칭과 10.1.2.5 같은 사설 IP가 보이면 정상입니다. 공인 IP가 나오면 Private DNS Zone이 이 VNet에 링크되지 않았거나, VM이 Azure DNS가 아닌 다른 DNS 서버를 쓰고 있는 경우입니다.

5. 운영 시 주의점

상황 확인할 것
VNet에 사용자 지정 DNS 서버를 쓰는 경우 그 DNS 서버가 168.63.129.16이나 DNS Private Resolver로 전달해야 사설 IP를 받습니다.
온프레미스에서 접속 조건부 전달 대상은 blob.core.windows.net 같은 공용 영역으로 설정합니다.
Private Endpoint 서브넷에 NSG, UDR 적용 서브넷의 네트워크 정책 기본값은 Disabled입니다. 적용하려면 privateEndpointNetworkPolicies를 Enabled로 바꿉니다.
다른 사람 소유의 리소스에 연결 연결이 Pending 상태로 만들어지고, 리소스 소유자가 승인해야 Approved가 됩니다.
Service Endpoint와 함께 쓰는 경우 같은 서브넷에서 두 방식을 섞으면 어느 경로로 나가는지 헷갈립니다. 한 서비스에는 한 방식으로 통일하는 편이 좋습니다.

6. 정리

  • Service Endpoint는 무료이고 간단하지만 목적지는 공용 엔드포인트이고, 온프레미스에서는 쓸 수 없습니다.
  • Private Endpoint는 리소스 하나에 사설 IP를 붙여 공용 접근을 끌 수 있고, Microsoft도 새 설계에 권장합니다.
  • Private Endpoint는 DNS가 절반입니다. Private DNS Zone은 Hub에 한 번 만들고, 온프레미스는 DNS Private Resolver로 연결합니다.

참고

728x90
서울
--:--:--
-전체 글
-카테고리
오늘 방문