본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
VPC Endpoint; VPC 엔드포인트; AWS PrivateLink
인터넷 게이트웨이, NAT 장치, 퍼블릭 IP 없이 VPC 안에서 AWS 서비스나 다른 계정의 서비스로 사설 연결을 만드는 아마존 VPC 구성 요소

아마존 S3, DynamoDB, CloudWatch, Secrets Manager 같은 AWS 서비스의 기본 엔드포인트는 퍼블릭 주소이다. 그래서 프라이빗 서브넷의 인스턴스가 이 서비스들을 호출하려면 원래는 NAT 게이트웨이와 인터넷 게이트웨이를 거쳐야 한다. VPC 엔드포인트를 만들면 이 트래픽이 VPC 안에서 바로 서비스로 향하므로, 인터넷 경로를 열지 않아도 되고 NAT 게이트웨이의 데이터 처리 요금도 줄어든다.

VPC 엔드포인트에는 여러 유형이 있는데 시험에서 핵심은 게이트웨이 엔드포인트와 인터페이스 엔드포인트이다. 인터페이스 엔드포인트는 AWS PrivateLink 기술로 동작하고, 게이트웨이 엔드포인트는 PrivateLink를 쓰지 않는 별도 방식이다.

게이트웨이 엔드포인트와 인터페이스 엔드포인트로 S3에 접근하는 경로
유형 설명
게이트웨이 엔드포인트(Gateway) 라우팅 테이블에 경로를 추가하는 방식. 아마존 S3와 DynamoDB만 지원
인터페이스 엔드포인트(Interface) 서브넷에 엔드포인트 네트워크 인터페이스(ENI)를 만들고 사설 IP로 서비스에 접근. AWS PrivateLink 기반
Gateway Load Balancer 엔드포인트 방화벽 같은 가상 어플라이언스 무리로 트래픽을 보내는 엔드포인트. 라우팅 테이블로 트래픽을 보낸다
리소스 엔드포인트 다른 VPC나 온프레미스에 있는 데이터베이스, IP, 도메인 이름 대상 같은 공유 리소스에 직접 접근
엔드포인트 서비스 서비스 제공자가 자기 서비스를 PrivateLink로 공개하기 위해 만드는 구성. 로드 밸런서를 앞단에 둔다
엔드포인트 정책 엔드포인트에 붙이는 리소스 기반 정책. 엔드포인트로 어떤 주체가 어떤 작업을 할 수 있는지 제한

게이트웨이 엔드포인트와 인터페이스 엔드포인트 비교

편집 원본 편집
항목 게이트웨이 엔드포인트 인터페이스 엔드포인트
대상 서비스 아마존 S3, DynamoDB 두 가지 PrivateLink와 통합된 다수의 AWS 서비스, 다른 계정의 엔드포인트 서비스, AWS Marketplace 파트너 서비스. S3와 DynamoDB도 지원
동작 방식 라우팅 테이블에 서비스 접두사 목록 → 엔드포인트 경로 추가 서브넷마다 엔드포인트 네트워크 인터페이스 생성, DNS가 그 사설 IP를 가리킴
사용하는 IP 서비스의 퍼블릭 IP(경로만 VPC 안에서 처리) VPC 서브넷의 사설 IP
보안 통제 엔드포인트 정책, 인스턴스 보안 그룹의 접두사 목록 규칙 엔드포인트 정책, 엔드포인트 네트워크 인터페이스에 붙인 보안 그룹
온프레미스에서 접근 불가 Direct Connect나 Site-to-Site VPN을 통해 가능
다른 리전·피어링 VPC에서 접근 불가 VPC 피어링이나 Transit Gateway를 통해 가능
요금 추가 요금 없음 가용 영역별 시간당 요금 + 처리 데이터 GB당 요금

두 방식은 같은 VPC 안에서 함께 쓸 수 있다. VPC 안 워크로드는 무료인 게이트웨이 엔드포인트로 S3에 접근하고, 온프레미스에서는 인터페이스 엔드포인트로 S3에 접근하는 혼합 구성이 가능하다.

게이트웨이 엔드포인트

편집 원본 편집
  • 엔드포인트를 만들 때 연결할 라우팅 테이블을 고르면, 대상이 서비스의 AWS 관리형 접두사 목록이고 대상 경로가 게이트웨이 엔드포인트인 경로가 자동으로 추가된다. 이 경로는 직접 수정하거나 지울 수 없다.
  • 해당 라우팅 테이블을 쓰는 서브넷의 인스턴스는 자동으로 엔드포인트를 통해 S3나 DynamoDB에 접근한다. 연결하지 않은 라우팅 테이블의 서브넷은 계속 퍼블릭 엔드포인트를 쓴다.
  • 0.0.0.0/0 경로가 있어도 최장 접두사 일치 원칙에 따라 같은 리전의 S3·DynamoDB 트래픽은 엔드포인트 경로를 탄다.
  • 접두사 목록은 리전마다 다르므로 다른 리전의 S3로 가는 트래픽은 게이트웨이 엔드포인트를 타지 않는다.
  • VPC 피어링으로 연결된 다른 VPC는 내 VPC의 게이트웨이 엔드포인트를 쓸 수 없다.

인터페이스 엔드포인트

편집 원본 편집
  • 엔드포인트를 만들 때 지정한 서브넷마다 엔드포인트 네트워크 인터페이스가 생긴다. 고가용성을 위해 여러 가용 영역의 서브넷을 지정한다.
  • 프라이빗 DNS를 켜면 AWS가 관리하는 숨은 프라이빗 호스팅 영역이 만들어져, 서비스의 기본 리전 엔드포인트 이름이 엔드포인트의 사설 IP로 해석된다. 애플리케이션 코드를 고치지 않아도 트래픽이 엔드포인트로 간다. 이를 위해 VPC의 DNS 호스트 이름과 DNS 확인 속성이 켜져 있어야 한다.
  • AWS 서비스는 엔드포인트로 들어오는 연결 요청을 받기만 하고, 엔드포인트를 통해 VPC 안의 리소스로 먼저 연결을 시작하지 않는다.

AWS PrivateLink는 VPC를 서비스와 리소스에 사설로 연결해, 마치 그것이 내 VPC 안에 있는 것처럼 쓰게 해 주는 기술이다. 인터넷 게이트웨이, NAT 장치, 퍼블릭 IP, Direct Connect, Site-to-Site VPN이 없어도 프라이빗 서브넷에서 서비스에 닿을 수 있다.

PrivateLink로 자체 서비스 제공

편집 원본 편집

서비스 제공자는 자기 VPC의 서비스를 다른 VPC나 다른 계정에 공개할 수 있다.

  1. 제공자는 서비스 앞단에 Network Load Balancer를 두고, 이 로드 밸런서를 지정해 엔드포인트 서비스를 만든다.
  2. 접속을 허락할 AWS 주체(계정, 역할 등)를 권한에 추가한다. 기본적으로는 아무도 접속할 수 없다.
  3. 소비자는 서비스 이름을 지정해 자기 VPC에 인터페이스 엔드포인트를 만든다. 제공자가 요청을 수락하면 사용할 수 있다.
  4. 지연 시간과 가용성을 위해 서비스는 최소 두 개의 가용 영역에서 제공하는 것이 권장된다.

이 구조는 소비자 VPC와 제공자 VPC의 CIDR이 겹쳐도 동작하고, 두 VPC 전체를 연결하는 VPC 피어링과 달리 특정 서비스 하나만 노출한다. SaaS 업체가 고객 VPC에 서비스를 제공하는 표준 방식이다.

엔드포인트 정책

편집 원본 편집

엔드포인트 정책은 IAM 정책 언어로 쓰는 리소스 기반 정책으로, 엔드포인트를 통해 접근할 수 있는 주체·작업·리소스를 제한한다.

  • 정책을 지정하지 않으면 모든 접근을 허용하는 기본 정책이 붙는다.
  • 엔드포인트 정책은 IAM 정책이나 S3 버킷 정책을 대체하지 않는다. 모든 정책이 허용해야 접근된다.
  • 게이트웨이 엔드포인트 정책에서는 Principal을 반드시 "*"로 두고, 특정 주체는 aws:PrincipalArn 조건 키로 제한한다.

다음은 S3 게이트웨이 엔드포인트를 통해 특정 버킷만 읽고 쓸 수 있게 하는 엔드포인트 정책 예시이다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowOnlyAppBucket",
      "Effect": "Allow",
      "Principal": "*",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3:::example-app-bucket/*"
    }
  ]
}

반대 방향으로, 버킷 쪽에서 특정 엔드포인트를 거친 요청만 받으려면 버킷 정책에 aws:SourceVpce 조건을 쓴다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyUnlessFromVpce",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::example-app-bucket",
        "arn:aws:s3:::example-app-bucket/*"
      ],
      "Condition": {
        "StringNotEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" }
      }
    }
  ]
}

이 거부 정책은 콘솔 접근을 포함해 엔드포인트를 거치지 않는 모든 요청을 막으므로 적용 범위를 신중히 정해야 한다.

  • 프라이빗 서브넷에서 S3나 DynamoDB에 접근하면서 인터넷을 거치지 않고 비용도 최소화하라는 요구에는 게이트웨이 엔드포인트가 정답이다. 무료이고 NAT 처리 요금도 사라진다.
  • 온프레미스나 다른 리전에서 사설 경로로 S3에 접근해야 하면 게이트웨이 엔드포인트는 안 되고 인터페이스 엔드포인트를 쓴다.
  • S3·DynamoDB 이외의 AWS 서비스(예: Secrets Manager, SQS, KMS)에 사설로 접근하려면 인터페이스 엔드포인트를 쓴다.
  • 다른 계정·다른 VPC의 특정 서비스만 노출하고 VPC 전체를 연결하고 싶지 않으면, 또는 CIDR이 겹치면 NLB 뒤에 엔드포인트 서비스를 만드는 PrivateLink가 답이다.
  • 특정 버킷에만 접근을 제한하려면 엔드포인트 정책, 특정 엔드포인트를 거친 요청만 받으려면 버킷 정책의 aws:SourceVpce 조건을 쓴다.