VPC Endpoint란?

VPC Endpoint 소개에 앞서 Endpoint는 요청을 보낼 때 필요한 목적지라고 할 수 있습니다. 예를 들어 인터넷을 통해 어떠한 서비스나 리소스로 접근할 수 있는 특정 URL이나 네트워크 주소가 될 수 있습니다. VPC Endpoint는 Endpoint 유형 중 하나로, VPC Endpoint를 사용하면 VPC 내부 또는 외부에 있는 AWS 서비스들과 통신할 때 인터넷 통신이 되지 않더라도 Private한 통신 환경을 통해 서비스에 접근할 수 있도록 할 수 있습니다.

VPC Endpoint 종류 3가지

VPC Endpoint는 세 가지 유형으로 나뉘며 Interface EndpointGateway EndpointGateway Loadbalancer Endpoint로 구성됩니다. 자세한 내용은 하단에 설명하도록 하겠습니다.

1. Gateway Endpoint

Gateway Endpoint는 NAT 디바이스가 없어도 VPC에 연결된 라우팅 테이블을 참조하여 Amazon S3 또는 DynamoDB로 전달되는 트래픽에 사용됩니다. AWS PrivateLink를 활성화하지 않습니다.

하기의 구성도는 VPC 내부의 EC2 인스턴스에서 S3로 트래픽을 보낼 때를 보여줍니다.

1번 : V1이 참조하는 라우팅 테이블은 10.0.0.0/16 대역의 IP는 Local로 가며
그 외의 모든 IP 대역은 인터넷 게이트웨이로 향하게 됩니다. 이렇게 인터넷을 통해 S3로 접 근하게 됩니다.
2번 : 반면, V2가 참조하는 라우팅 테이블은 동일하게 10.0.0.0/16 대역의 IP는 Local로 가지만, S3에 대한 Endpoint(pl-id for Amazon S3) IP 대역은 모두 VPC Endpoint로 향하게 됩니다.

Prefix List ID (pl-xxxxxxxx) 이란?
하나 이상의 CIDR 대역의 IP 그룹으로, S3 Prefix List에는 AWS에서 관리하는 S3 서비스의 IP 주소 범위가 포함됩니다. 이를 통해 특정 서브넷에서 S3 서비스에 대한 액세스를 제어할 수 있고 VPC 엔드포인트나 Direct Connect 연결에서 S3 서비스에 대한 허용되는 트래픽을 구체적으로 지정할 수 있습니다.

  • 트래픽 경로 설정 : Route Table
  • 요금 : Gateway Endpoint 사용에 따른 추가 요금은 없지만, 데이터 전송 및 리소스 사용량에 대한 표준 요금이 적용됩니다.

실사용 예시) S3와 연결하는 Gateway Endpoint 생성
Public Access를 차단한 S3 버킷과 S3에 접근할 수 있는 IAM role을 가진 EC2 인스턴스를 생성하여 NAT Gateway나 Internet Gateway 연결 없이 S3에 접근할 수 있도록 Gateway Endpoint를 생성하여 라우팅 설정을 하는 실습을 진행해 보겠습니다.

시작하기에 앞서, 위의 구성도와 같이 VPC와 Subnet을 구성하여 Private Subnet 라우팅 테이블에 NAT 게이트웨이를 설정하지 않은 상태에서 Server2가 S3에 접근할 수 있는지 확인 하였으나 접근할 수 없었습니다.

S3 Gateway Endpoint를 구성하여 Server2가 S3에 접근할 수 있는 환경을 구성해보도록 하겠습니다.

  1. [VPC] -> [Endpoints] Gateway endpoint 생성
endpoint를 적용 할 VPC를 선택하면 해당 VPC 안에 있는 subnet들이 할당된 Routing table을 보여줍니다. Routing table을 체크 할 경우, 자동으로 S3로 갈 수 있는 private한 경로가 추가됩니다.

2. [VPC] -> [Route Tables] 경로 추가 확인

S3 endpoint에 대한 IP 대역(pl-id)은 Gateway endpoint(vpce)로 트래픽을 전송한다는 경로입니다.

3. EC2 Instance에서 Gateway Endpoint를 통해 S3 접근 확인

따라서, Private Subnet에 인터넷 망으로 트래픽을 전송할 수 있는 NAT Gateway의 경로 설정이 없음에도 불구하고, S3 Gateway Endpoint를 통해 서브넷 내부의 EC2 인스턴스가 S3 버킷에 접근이 가능하게 됩니다.

2. Interface Endpoint

Interface Endpoint는 AWS PrivateLink 기술을 사용하여 구성되며, VPC 내부에 전용 라우팅 테이블이 생성됩니다. Interface Endpoint를 생성하게 되면 AWS 서비스에 대한 Endpoint Network Interface(ENI)가 일반적으로 한 개 생성됩니다. 이 ENI는 VPC 내부에서 전용 IP 주소를 사용하여 AWS 서비스와 통신하는 인터페이스 입니다.
몇 가지 경우에는 하나의 Interface Endpoint에 여러 개의 ENI가 생성될 수 있습니다. 예를 들어, Amazon Elastic File System(EFS)에는 특정 파일 시스템에 대한 여러개의 ENI를 생성합니다.

AWS PrivateLink를 사용하면 VPC 간에 프라이빗 IP 주소를 사용하여 안전하게 연결할 수 있도록 해주는 서비스입니다. AWS PrivateLink를 사용하면 인터넷을 거치지 않고 VPC 간에 안전하게 통신할 수 있습니다.

하기의 구성도는 VPC Interface Endpoint와 Network Load Balancer(NLB)를 연결한 구성입니다.


1) VPC A에서 VPC B에 있는 Network Load Balancer로 private 통신할 수 있도록 Interface Endpoint를 생성합니다.
2) 해당 엔드포인트에 대한 ENI(Endpoint Network Interface)가 생성되며 Security Group을 설정할 수 있습니다.
3) VPC A 내부에 있는 EC2 Instance는 ENI와 연결된 PrivateLink를 통해 Network LoadBalancer에 도달할 수 있습니다.

  • 트래픽 경로 설정 : ENI 연결, Private DNS
  • 비용 : 사용한 엔드포인트 수, 연결 시간, 데이터 전송량 등에 따라 다르게 책정

실사용 예시) NLB와 연결하는 VPC endpoint 생성
위의 이미지와 같이 VPC와 서브넷 구성을 마친 후, NLB를 위한 VPC endpoint network interface를 생성하여 PrivateLink를 통해 통신하는 구성을 구현해 보도록 하겠습니다.

※ 주의 사항 – [VPC] 설정에 있는 [Endpoint services]와 [Endpoints]
Endpoint Services는 Elastic Load balancer서비스에 대한 엔드포인트를 만들 수 있으며 VPC에 종속되지 않습니다. 하지만, Endpoints는 VPC와 종속되어 VPC를 선택해야 하며, 해당 VPC의 IP대역을 가진 ENI가 생성됩니다.

  1. [VPC] -> [Endpoint services] 에서 NLB endpoint 생성
위의 옵션을 활성화하면 해당 엔드포인트에 연결하고자 하는 서비스를 수락하는 과정이 필수적입니다.
다음 과정을 위해 위의 service name을 복사해둡시다.

2. [VPC] -> [Endpoints]에서 특정 VPC(VPC-a)에서 NLB endpoint service로 향하는 interface endpoint 생성

Endpoint services의 service name 붙혀넣기 후 ‘Verify service’ 수행

3. [Endpoint services]의 [endpoint connections] 탭에 들어가 연결 요청을 승인해줍니다. endpoint를 생성 하면 계속 pending 상태로 유지되는데, 이는 1번에서 설정한 Acceptance Required 때문입니다.

4. VPC A 서버에서 NLB로 연결 확인

 

3. Gateway Loadbalancer Endpoint

Gateway Load Balancer는 여러 개의 VPC(Virtual Private Cloud)나 계정(Account) 사이에서 인터넷 트래픽을 분산 시켜주는 로드 밸런서(Load Balancer) 서비스입니다. 이를 사용하면 다중 VPC, 계정 간 통신이 가능 할 뿐만 아니라 security applicances를 제공하는 업체들이 보안 솔루션 관리가 유용해지며, 인터넷에서 유입되는 트래픽들이 보안 어플라이언스를 거쳐 방화벽, IPS에서 조치 후 실제 서비스로 보내지기 때문에 보안성을 높일 수 있다는 장점이 있습니다.

Gateway Load Balancer를 사용하기 위한 필수적인 요소가 있습니다. 이것이 바로 GWLB Endpoint, GWLB Endpoint Services, Ingress Route Table입니다. Ingress Route Table에서는 서브넷이 아닌 Internet Gateway 또는 VGW를 거쳐 들어오는 트래픽의 경로를 지정할 수 있으며 [VPC] > [Route Tables]의 속성 중 [Edge associations]에서 설정할 수 있습니다.

VPC Gateway Load Balancer 엔드포인트는 Gateway Load Balancer에 직접적으로 연결을 수행하여 인터넷 액세스를 수행하지 않고 VPC 내부에서 사용되는 애플리케이션에 대해 접근할 수 있도록 하는 서비스입니다.
* Gateway Load Balancer Endpoint는 다른 VPC Endpoint와는 다르게 보안그룹, Private DNS Name, VPC Endpoint Policy가 지원되지 않습니다.

하기의 구성도는 Gateway Load Balancer Endpoint를 Security VPC에 있는 GWLB와 연결한 구성입니다.

  1. 외부에서 진입하는 트래픽은 Internet Gateway를 거쳐 IGW Ingress Route Table을 참조하여 GWLBe로 트래픽이 전달됩니다.
  2. 라우팅 경로에 따라 endpoint에서 GWLB로 트래픽 전송됩니다.
  3. GWLB는 Target group과 연결된 보안 어플라이언스로 로드밸런싱 하여 전달합니다. 이 어플라이언스에서는 트래픽에 대한보안 기능을 수행하게 됩니다.
  4. 정상적으로 반환된 트래픽은 GWLB > GWLBe > EC2 순으로 전달 됩니다.

EC2 instance에서 나가는 트래픽도 유사하게 GWLBe > GWLB > 보안 어플라이언스 순으로 전달되며, 필터링과 같은 보안 감사 후, 다시 GWLBe로 전달되어 인터넷으로 나가게 됩니다.

  • 트래픽 경로 설정 : ENI(탄력적 네트워크 인터페이스)를 통한 연결
  • 비용 : Endpoint의 시간당 사용 요금 및 데이터 처리 요금 적용

VPC Endpoint의 장점

VPC Endpoint를 사용하면 보안성, 높은 네트워크 성능, 비용 절감에 대한 장점이 있습니다.

[보안성]
1) Public Internet망을 사용하지 않아 해커가 침입할 위치가 공용망보다 한정되어 있어 공격의 위험이 적습니다.
2) Security Group과 ACLs을 사용하여 Endpoint로의 허용되지 않은 접근을 IP주소, 서브넷, VPC 별로 제한할 수 있습니다.
3) AWS PrivateLink를 사용할 수 있으며, 이는 확장성과 보안성을 보장하여 VPC에서 AWS 서비스로 접근할 수 있는 길을 제공해줍니다.

번외) 정말 Public 망을 사용하지 않고 AWS PrivateLink를 사용하는 VPC 엔드포인트를 사용하면 보안적으로 안전할까?
-> VPC 엔드포인트를 사용하면 인터넷 게이트웨이 또는 NAT 인스턴스를 통하지 않고 VPC 내에서 AWS 서비스에 직접 연결할 수 있어 인터넷에서 발생하는 일부 보안 위협에 대한 위험을 줄일 수 있습니다. 하지만, 100%의 보안성을 보장하지는 않습니다. AWS 계정 내에서 발생할 수 있는 IAM 권한 부여, 액세스 키와 같은 일부 보안 위협이나, VPC 엔드포인트로 연결된 서비스와 통신하는 EC2 서버로의 보안 위협이 있을 수 있습니다. 따라서 이는 보안성을 향상 시키지만 다른 보안 절차와 함께 사용되기를 권장되며 모니터링 및 로깅 활동을 설정하는 것이 좋습니다.

[비용 절감]
NAT Gateway, VPN 연결 또는 AWS Direct Connect와 같은 추가적인 비용이 드는 서비스를 사용하지 않아도 됩니다. 또한, 인터넷망을 사용하지 않기 떄문에 인터넷 연결 비용을 절감할 수 있습니다. VPC Endpoint를 생성하는 데에는 추가적인 비용이 발생하지 않지만, 사용하는 AWS 서비스, 데이터 전송량, 지역에 따라 추가적인 비용이 발생할 수 있습니다.

예를들어, 서울 리전에 있는 S3에 VPC Gateway Endpoint를 연결하여 1TB의 데이터를 버지니아 북부에서 요청한다고 가정하였을 때, 두 지역간의 데이터 전송 비용(같은 지역보다 비쌈)이 책정되어 $81.92 (1024GB x $0.08/GB)로 요금이 부과될 수 있습니다.

https://calculator.aws/#/addService/VPC 에서 산정한 Data Transfer 비용

VPC Gateway Endpoint는 자체에 대한 비용은 없지만, VPC Endpoint가 Private DNS Hosting 옵션을 사용하는 경우 Route 53 Private Hosted Zone에 대한 비용이 발생할 수 있습니다. 그러나 Interface Endpoint 또는 Gateway Loadbalancer Endpoint를 사용하는 경우 데이터 전송요금과 함께 각 Endpoint 당 시간당 요금이 발생합니다.

[Interface Endpoint 요금] https://aws.amazon.com/ko/privatelink/pricing/?nc1=h_ls
[Gateway Loadbalancer Endpoint 요금] https://aws.amazon.com/ko/privatelink/pricing/?nc1=h_ls

[높은 성능]
VPC Endpoint가 VPC 내의 인스턴스에서 AWS 서비스로 직접 액세스 할 수 있도록 하여 VPC 외부가 아닌 내부에서 처리되기 때문에 데이터 전송 속도가 빨라지고 대기 시간이 줄어드는 이점이 있습니다. AWS 서비스마다 차이가 있지만 대부분 매우 높은 성능을 제공합니다.
예를 들어, S3 VPC Endpoint를 사용하여 S3 버킷에 액세스 할 때, VPC 내부로 전송되어 인터넷 트래픽으로 인한 지연시간이 사라지므로 대기 시간이 거의 0ms, 데이터 전송속도 최대 5Gbps로 측정됩니다.
+ 대기시간은 VPC Endpoint가 생성되는 과정의 지연, S3 API 호출 및 객체 다운로드 등의 작업으로 인해 약간 지연될 수 있습니다.

SA 박민하