
[network] VPC 엔드포인트 & PrivateLink
S3 한 번 부르자고 트래픽을 인터넷까지 내보내야 할까요? 그럴 필요 없이, 사설망 안에서 조용히 연결하는 방법입니다.
One-Line Summary
VPC Endpoint는 VPC를 지원되는 AWS 서비스(또는 다른 사람의 엔드포인트 서비스)에 인터넷·NAT·IGW·VPN을 거치지 않고 AWS 사설망 내부로만 붙여주는 사설 연결 통로다. 종류는 두 가지 — Gateway Endpoint(S3·DynamoDB 전용, 라우트 테이블에 경로만 추가, 무료)와 Interface Endpoint(대부분의 다른 서비스용, 서브넷에 사설 IP를 가진 ENI 생성, 유료). Interface Endpoint의 기반 기술이 AWS PrivateLink이며, 이걸로 내 서비스(NLB 뒤)를 다른 VPC/고객에게 사설로 노출할 수도 있다.
Why It Exists
프라이빗 서브넷의 서버가 S3나 다른 AWS 서비스(SQS, KMS, Secrets Manager 등)를 호출하려면, 이 서비스들은 원래 공용(퍼블릭) 엔드포인트로 노출돼 있어서 트래픽이 IGW → NAT를 거쳐 인터넷을 한 번 나갔다 들어와야 한다. 이는 (1) NAT 데이터 처리 비용이 들고, (2) 트래픽이 AWS 사설망을 벗어나 보안·규정상 불편하며, (3) 인터넷 경로가 없는 완전 격리 서브넷에서는 아예 접근이 불가능하다.
VPC Endpoint가 이 문제를 해결한다.
[Endpoint 없이 - S3 호출]
Private EC2 ─► NAT Gateway ─► IGW ─► 인터넷 ─► S3 공용 엔드포인트
└ NAT 데이터 요금 발생 + 트래픽이 AWS 밖으로 나감
[VPC Endpoint 경유 - S3 호출]
Private EC2 ─► (라우트 or ENI) ─► S3
└ 인터넷/NAT/IGW 안 거침, 트래픽이 AWS 사설망 안에만 머무름
시험 감각:
"프라이빗 서브넷에서 AWS 서비스에 접근하되 인터넷/NAT/IGW 안 거치고 사설망으로만" = VPC Endpoint.
Abbreviations
| 약어 | 풀네임 | 의미 |
|---|---|---|
VPCE | VPC Endpoint | VPC를 AWS 서비스에 사설로 연결하는 통로 |
Gateway Endpoint | Gateway VPC Endpoint | S3·DynamoDB 전용, 라우트 테이블 경로 방식 |
Interface Endpoint | Interface VPC Endpoint | ENI 기반, PrivateLink로 대부분 서비스 지원 |
PrivateLink | AWS PrivateLink | 서비스를 사설로 노출/소비하는 기반 기술 |
ENI | Elastic Network Interface | Interface Endpoint가 서브넷에 만드는 사설 IP 네트워크 인터페이스 |
Endpoint Service | VPC Endpoint Service | 내가 PrivateLink로 노출하는 서비스(NLB 뒤) |
NLB | Network Load Balancer | Endpoint Service가 반드시 앞단에 두는 로드밸런서 |
Prefix List | Managed Prefix List | S3/DynamoDB 대역을 나타내는 라우트 대상(pl-xxxx) |
두 종류의 엔드포인트 — 큰 그림부터
VPC Endpoint는 딱 두 종류뿐이고, 시험은 거의 이 둘을 구분하게 만든다.
| 구분 | Gateway Endpoint | Interface Endpoint (PrivateLink) |
|---|---|---|
| 지원 서비스 | S3, DynamoDB 딱 둘 | 그 외 대부분의 AWS 서비스 + 커스텀/파트너 서비스 |
| 동작 방식 | 라우트 테이블에 경로 추가(prefix list 대상) | 서브넷에 ENI 생성(사설 IP 부여) |
| 접근 방식 | 라우트로 자동 유도 | ENI의 사설 IP / Private DNS 이름으로 호출 |
| 비용 | 무료 | 시간당 + GB당 과금 |
| 온프렘/피어링 VPC 접근 | 불가 (라우트라 VPC 밖으로 못 나감) | 가능 (ENI를 향해 붙일 수 있음) |
| 보안 제어 | 라우트 테이블 + 엔드포인트 정책 | 보안 그룹 + 엔드포인트 정책 |
| 범위 | Regional (여러 AZ 라우트에 붙임) | AZ별 ENI (다중 AZ 권장) |
한 줄 암기: S3·DynamoDB만 Gateway(무료, 라우트), 나머지 전부 Interface(유료, ENI).
Gateway Endpoint — S3와 DynamoDB 전용 (빈출)
Gateway Endpoint는 오직 S3와 DynamoDB에만 쓴다. 방식은 라우트 테이블에 "S3/DynamoDB로 가는 트래픽은 이 엔드포인트로"라는 경로 한 줄을 넣는 것이다. 이때 목적지는 IP 대역을 일일이 쓰지 않고 AWS가 관리하는 **prefix list(pl-xxxx)**로 표현한다.
┌─ VPC ──────────────┐
│ private subnet │
│ EC2 (no public IP) │
└────────────────────┘
│ S3 API 호출
▼
┌──────────────────┐
│ Gateway Endpoint │
└──────────────────┘
│ route: pl-S3 ─► vpce
▼ (AWS 사설망 · NAT/IGW 미경유)
Amazon S3
| 항목 | 내용 |
|---|---|
| 대상 서비스 | S3, DynamoDB (이 둘만, 다른 서비스 시도는 오답) |
| 붙이는 곳 | 라우트 테이블에 엔드포인트를 연결 → 자동으로 prefix list 경로 생성 |
| 라우트 형태 | Destination: pl-xxxx(S3 대역) → Target: vpce-xxxx |
| 비용 | 완전 무료 (시간·데이터 요금 없음) |
| 보안 | ENI가 없으므로 보안 그룹 적용 안 됨, 대신 엔드포인트 정책으로 제어 |
| 한계 | 라우트 기반이라 온프레미스·피어링 VPC에서는 이 엔드포인트를 못 씀 |
시험 감각: "프라이빗 서브넷에서 S3로 대량 전송 중인데 NAT 데이터 처리 비용이 크다" = S3 Gateway Endpoint로 우회(무료 + NAT 회피). NAT Gateway 노트의 비용 절감 포인트와 직결된다. 라우트가 생기는 원리는 Route Table의 prefix list 대상 참고.
Interface Endpoint — PrivateLink 기반 ENI 방식 (빈출)
S3·DynamoDB를 제외한 거의 모든 AWS 서비스(SQS, SNS, KMS, Secrets Manager, Systems Manager, ECR, CloudWatch, API Gateway 등)와 커스텀/파트너 서비스는 Interface Endpoint로 붙인다. 이 방식은 지정한 서브넷에 사설 IP를 가진 ENI를 만들고, 그 ENI가 해당 서비스로 가는 사설 통로가 된다. 이 ENI 기반 사설 연결 기술이 곧 AWS PrivateLink다.
[Private Subnet AZ-a] EC2
│ 예: sqs.ap-northeast-2.amazonaws.com 호출
▼ (Private DNS가 이 이름을 ENI 사설 IP로 해석)
Interface Endpoint ENI (사설 IP, 보안그룹 적용)
▼ (PrivateLink 사설 통로)
Amazon SQS (인터넷 안 거침)
| 항목 | 내용 |
|---|---|
| 대상 서비스 | S3·DynamoDB 외 대부분의 AWS 서비스 + 커스텀/파트너 서비스 |
| 만들어지는 것 | 지정 서브넷마다 ENI(사설 IP) — 다중 AZ면 AZ별로 생성 권장 |
| 호출 방식 | ENI 사설 IP, 또는 Private DNS 켜면 서비스의 원래 DNS 이름 그대로 사용 |
| 비용 | 엔드포인트 시간당 + 처리 데이터 GB당 과금 |
| 보안 | ENI에 보안 그룹 부착(인바운드 443 허용 등) + 엔드포인트 정책 |
| 온프렘/피어링 접근 | 가능 — VPN/DX/피어링으로 들어온 트래픽이 ENI를 향해 붙을 수 있음 |
Private DNS를 켜면 sqs.ap-northeast-2.amazonaws.com 같은 서비스의 기본 도메인이 자동으로 엔드포인트 ENI의 사설 IP로 해석된다. 그래서 애플리케이션 코드나 SDK 설정을 바꾸지 않아도 트래픽이 사설 경로로 흐른다.
시험 감각: S3·DynamoDB가 아닌 AWS 서비스를 "인터넷 안 거치고 프라이빗하게 접근" = Interface Endpoint(PrivateLink). "온프레미스에서 이 서비스에 사설로 접근"도 Interface Endpoint(Gateway는 온프렘 불가).
AWS PrivateLink — 내 서비스를 남에게 사설로 노출 (빈출)
PrivateLink는 단순히 AWS 서비스를 소비하는 것뿐 아니라, 내가 만든 서비스를 다른 VPC/다른 계정/고객에게 사설로 제공하는 데도 쓴다. 이때 제공자(provider)는 서비스를 NLB 뒤에 두고 Endpoint Service로 등록하고, 소비자(consumer)는 그 Endpoint Service를 향해 Interface Endpoint를 만들어 붙는다.
[Provider VPC] [Consumer VPC]
서비스(EC2/컨테이너)
│
▼
Network Load Balancer (NLB) ◄──────── Interface Endpoint (ENI, 사설 IP)
│ PrivateLink ▲
└─ Endpoint Service 로 등록 │
Consumer 앱이 ENI로 호출
(VPC 피어링 없음, 인터넷 노출 없음, CIDR 겹쳐도 무관)
| 항목 | 내용 |
|---|---|
| 제공자 필수 구성 | 서비스 앞단에 NLB(또는 GWLB) → Endpoint Service 생성 |
| 소비자 구성 | 그 Endpoint Service로 Interface Endpoint 생성 → 승인(acceptance) 후 연결 |
| 방향성 | 단방향 — 소비자가 제공자 서비스로만 접근(제공자가 소비자 VPC로 들어오지 않음) |
| 노출 범위 | 딱 그 하나의 서비스만 노출(VPC 전체를 여는 피어링과 다름) |
| CIDR | 소비자·제공자 CIDR이 겹쳐도 문제없음(ENI로 만나므로) |
| 규모 | 1:다(one-to-many) — 한 서비스에 여러 소비자 VPC/계정 연결 |
시험 감각: "SaaS/파트너/다른 팀에게 특정 서비스 하나만 사설로 제공, 인터넷 노출·VPC 피어링 없이" = PrivateLink Endpoint Service(NLB 뒤).
PrivateLink vs VPC Peering — 무엇을 여는가 (빈출)
둘 다 VPC 간 사설 연결이지만 여는 범위와 방향이 다르다.
| 구분 | PrivateLink (Endpoint Service) | VPC Peering |
|---|---|---|
| 노출 대상 | 서비스 하나(NLB 뒤 엔드포인트) | VPC 전체(양쪽 CIDR 서로 라우팅) |
| 방향 | 소비자 → 제공자 단방향 | 기본 양방향 |
| CIDR 겹침 | 무관(겹쳐도 OK) | 겹치면 안 됨(local 우선이라 라우팅 불가) |
| 확장성 | 1:다로 깔끔(고객 많아도 서비스 하나) | 다수면 연결이 mesh로 폭증(비전이적) |
| 대표 용도 | SaaS 제공, 팀 간 마이크로서비스 노출 | 두 VPC의 전반적 상호 통신 |
자세한 비교는 VPC Peering 노트 참고. "노출 최소화(서비스 하나만) + CIDR 충돌 회피 + 다수 소비자" 신호면 PrivateLink, "두 VPC를 통째로 붙여야" 하면 Peering.
엔드포인트 정책 (Endpoint Policy)
엔드포인트 정책은 엔드포인트를 통해 무엇에 접근할 수 있는지 제한하는 IAM 유형의 리소스 정책이다. Gateway·Interface 둘 다 붙일 수 있다.
| 항목 | 내용 |
|---|---|
| 성격 | IAM 정책 형식의 리소스 정책(엔드포인트에 부착) |
| 효과 | 이 엔드포인트로 갈 수 있는 서비스/리소스/액션을 제한 |
| 예시 | "이 S3 Gateway Endpoint로는 특정 버킷에만 접근 허용" |
| 기본값 | 아무 것도 안 걸면 full access(모두 허용) |
| 주의 | 최종 접근 = 엔드포인트 정책 ∩ IAM 정책 ∩ 리소스(버킷) 정책 |
시험 감각: "S3 Endpoint를 통과하는 접근을 특정 버킷으로만 제한" = 엔드포인트 정책.
보안 제어 — 어디서 무엇으로 막나
| 엔드포인트 종류 | 트래픽 제어 수단 |
|---|---|
| Gateway Endpoint | 라우트 테이블 연결 + 엔드포인트 정책 (ENI 없어 SG 없음) |
| Interface Endpoint | ENI의 보안 그룹(보통 인바운드 TCP 443 허용) + 엔드포인트 정책 |
Interface Endpoint가 통신 안 되면 ENI 보안 그룹의 443 인바운드가 열렸는지 먼저 의심. 보안 그룹 vs NACL 개념은 Security Group vs NACL 참고.
비용 감각 (빈출)
| 요소 | Gateway Endpoint | Interface Endpoint |
|---|---|---|
| 시간당 요금 | 없음 | 있음(엔드포인트·AZ당) |
| 데이터 처리 요금 | 없음 | GB당 있음 |
| NAT 비용 절감 | S3/DynamoDB 트래픽을 NAT에서 빼 NAT 데이터 요금 회피 | 해당 서비스 트래픽을 NAT에서 빼 회피(다만 자기 요금 있음) |
대표 절감 시나리오: 프라이빗 서브넷에서 S3로 대량 전송 → 무료 Gateway Endpoint로 NAT 데이터 처리비 제거. Interface Endpoint는 자체 요금이 있으니 "무료로 아낀다"는 S3/DynamoDB(Gateway)에만 해당.
언제 무엇을 쓰나 — 정리
S3 / DynamoDB -> Gateway Endpoint (무료, 라우트, 온프렘 불가)
그 외 AWS 서비스 -> Interface Endpoint (유료, ENI, Private DNS)
온프렘/피어링에서 접근 -> Interface Endpoint (Gateway는 불가)
내 서비스를 남에게 노출 -> PrivateLink Endpoint Service (NLB 뒤)
Common Wrong Directions
| 오답 방향 | 왜 부족한가 |
|---|---|
| SQS/KMS 등에 Gateway Endpoint 사용 | Gateway는 S3·DynamoDB 전용 → 나머지는 Interface |
| S3 접근을 위해 굳이 Interface Endpoint 생성 | S3는 무료 Gateway Endpoint가 정석(비용상 유리) |
| 온프레미스에서 Gateway Endpoint로 S3 접근 시도 | Gateway는 라우트라 VPC 밖(온프렘)에서 못 씀 → Interface Endpoint 필요 |
| Interface Endpoint인데 SG 443 안 열고 안 된다고 함 | ENI 기반이라 보안 그룹 인바운드 443 필요 |
| Endpoint Service를 ALB 뒤에 두려 함 | PrivateLink Endpoint Service는 NLB(또는 GWLB) 필요 |
| 서비스 하나 노출인데 VPC Peering 선택 | Peering은 VPC 전체·CIDR 충돌 위험 → PrivateLink가 적합 |
| S3 접근을 특정 버킷으로 제한하려는데 SG로 하려 함 | Gateway엔 SG 없음 → 엔드포인트 정책으로 제한 |
| VPC Endpoint면 트래픽이 인터넷을 거친다고 오해 | 인터넷/NAT/IGW 안 거치고 AWS 사설망 내부로만 흐름 |
Exam Triggers
| 문제에서 이런 표현이 나오면 | 떠올릴 것 |
|---|---|
| "access S3/DynamoDB from private subnet without internet" | Gateway Endpoint(무료) |
| "reduce NAT data cost for S3/DynamoDB traffic" | S3/DynamoDB Gateway Endpoint |
| "privately access SQS/KMS/Secrets Manager/ECR without internet" | Interface Endpoint (PrivateLink) |
| "access an AWS service privately from on-premises (VPN/DX)" | Interface Endpoint(Gateway 불가) |
| "expose our own service to other VPCs/customers privately" | PrivateLink Endpoint Service(NLB 뒤) |
| "no VPC peering, no internet exposure, CIDR may overlap" | PrivateLink |
| "connect whole VPCs to each other" | VPC Peering / Transit Gateway |
| "restrict which bucket the endpoint can reach" | Endpoint Policy |
| "interface endpoint reachable but connection fails" | ENI 보안 그룹 443 확인 |
| "use service's normal DNS name, no code change" | Private DNS 활성화 |
Memory Sentence
VPC Endpoint는 인터넷·NAT·IGW 없이 VPC를 AWS 서비스에 사설로 붙이는 통로다. S3·DynamoDB만 Gateway Endpoint(라우트에 prefix list 경로, 무료, 온프렘 불가, 제어는 엔드포인트 정책), 나머지는 전부 Interface Endpoint(서브넷 ENI + 사설 IP, 유료, Private DNS, 보안 그룹으로 제어, 온프렘/피어링에서도 접근 가능). Interface Endpoint의 기반인 PrivateLink로 내 서비스(NLB 뒤)를 다른 VPC/고객에게 단방향·1:다·CIDR 무관하게 노출할 수 있어, VPC 전체를 여는 Peering과 대비된다.
References
댓글
아직 댓글이 없습니다.