[AWS] VPC Endpoint란

Yuchan Han·2026년 3월 30일

AWS

목록 보기
1/7

VPC Endpoint란? (개념부터 실습까지)

AWS에서 프라이빗 서브넷으로 인프라를 구성하다 보면 AWS 서비스에 접근할 때 퍼블릭 인터넷을 거치지 않아야 하는 경우가 많습니다.
NAT Gateway만으로는 보안 요구사항을 충족하기 어렵습니다.
VPC Endpoint를 사용하면 인터넷을 우회하는 사설 연결을 만듭니다.
이번 글에서는 VPC Endpoint의 개념과 두 가지 종류를 설명하고 실습까지 진행합니다.


VPC Endpoint를 사용하는 이유

프라이빗 서브넷에 있는 리소스가 AWS 서비스에 접근할 때 인터넷 경로를 제거합니다.
보안 그룹과 정책으로 접근을 세밀하게 통제합니다.

VPC Endpoint란 무엇인가

VPC Endpoint는 VPC 내부에서 AWS 서비스로 가는 사설 연결 지점입니다.
AWS 백본 네트워크만 이용합니다.


Gateway Endpoint와 Interface Endpoint

VPC Endpoint는 두 가지 유형으로 나뉩니다.
Gateway Endpoint는 S3와 DynamoDB에만 제공합니다.
Interface Endpoint는 대부분의 AWS 서비스에 사용합니다.

아래 표로 두 유형을 비교합니다.

항목Gateway EndpointInterface Endpoint (PrivateLink)
대상 서비스S3, DynamoDBSecrets Manager, SSM, KMS 등 대부분
작동 방식라우트 테이블에 경로 추가서브넷별 ENI 생성
ENI생성되지 않음생성됨
보안 제어라우트 테이블Security Group (TCP 443)
Private DNS필요 없음ON 권장

S3를 연결할 때는 Gateway Endpoint를 먼저 선택합니다.
설정이 단순합니다.
관리 포인트도 적습니다.

ENI가 보이면 Interface Endpoint입니다.
라우트 테이블이 핵심이면 Gateway Endpoint입니다.

Interface Endpoint 그림

Gateway Endpoint 그림


Interface Endpoint 실습 (Secrets Manager)

왜 이 실습을 하는가
Private DNS를 활성화하면 SDK 호출이 자동으로 VPC Endpoint를 사용합니다.

무엇을 구성하는가
ap-south-1 리전에서 Secrets Manager Interface Endpoint를 만듭니다.
Lambda가 secret 값을 private 경로로 읽습니다.

어떻게 구성하는가
1. VPC Endpoint를 생성합니다. 서비스로 secretsmanager를 선택합니다.
2. Private DNS를 ON으로 설정합니다.
3. Lambda를 VPC 프라이빗 서브넷에 연결합니다.
4. Lambda 역할에 AWSLambdaVPCAccessExecutionRole을 부여합니다.
5. Endpoint 보안 그룹에서 Lambda 보안 그룹의 443 포트를 허용합니다.
6. Lambda를 테스트합니다.

아래 스크립트를 Lambda에 적용합니다.

import json
import boto3

sm = boto3.client("secretsmanager")

def lambda_handler(event, context):
    secret_id = "wsi-private-secret"
    r = sm.get_secret_value(SecretId=secret_id)
    secret = json.loads(r["SecretString"])
    return {
        "statusCode": 200,
        "body": json.dumps({"status": "ok", "msg": secret.get("msg")})
    }

Gateway Endpoint 실습 (S3)

왜 이 실습을 하는가
S3는 Gateway Endpoint가 표준입니다.

무엇을 구성하는가
ap-south-1 리전에서 S3 Gateway Endpoint를 만듭니다.
프라이빗 Lambda가 S3에 파일을 업로드합니다.

어떻게 구성하는가
1. S3 버킷 vpce-gw-lab-yuchan-001을 생성합니다.
2. VPC 콘솔에서 엔드포인트를 생성합니다.
3. 서비스 com.amazonaws.ap-south-1.s3를 선택합니다.
4. 유형을 Gateway로 선택합니다.
5. VPC의 프라이빗 라우트 테이블을 연결합니다.
6. Lambda를 VPC 프라이빗 서브넷에 연결합니다.
7. Lambda 역할에 S3 권한을 추가합니다.
8. Lambda를 테스트합니다.

아래 스크립트를 Lambda에 적용합니다.

import json
import boto3
from datetime import datetime

s3 = boto3.client("s3")

def lambda_handler(event, context):
    bucket = "vpce-gw-lab-yuchan-001"
    key = f"vpce-test/{datetime.utcnow().isoformat()}.txt"
    body = "hello from lambda via gateway endpoint"
    try:
        s3.head_bucket(Bucket=bucket)
        s3.put_object(Bucket=bucket, Key=key, Body=body.encode("utf-8"))
        s3.list_objects_v2(Bucket=bucket, Prefix="vpce-test/", MaxKeys=5)
        return {
            "statusCode": 200,
            "body": json.dumps({
                "status": "ok",
                "bucket": bucket,
                "uploaded_key": key
            })
        }
    except Exception as e:
        return {
            "statusCode": 500,
            "body": json.dumps({
                "status": "error",
                "message": str(e)
            })
        }

자주 하는 실수

실수증상해결 방법
Endpoint Service와 VPC Endpoint 혼동서비스를 찾지 못함VPC > Endpoint 메뉴에서 생성
Interface Endpoint SG를 0.0.0.0/0로 열음보안 취약Lambda SG에서만 443 허용
Lambda VPC Access Role 누락VPC 연결 실패AWSLambdaVPCAccessExecutionRole 부여
Private DNS OFFSDK 호출이 인터넷으로 나감Private DNS 활성화
profile
맛있는거먹고싶어요

0개의 댓글