Today Key : aws, privatelink, vpc, resource, endpoint, 리소스, 엔드포인트, over, private, on-premises
이번 포스팅에서는 지난 12월 1일 공개된 'AWS announces access to VPC resources over AWS PrivateLink' 에 대한 내용입니다.
VPC Endpoint를 이용해서 VPC PrivateLink를 경유하여 VPC에 인입하여, VPC 내부 Resource나 VPC에 연결된 On-Premises의 리소스에 연결이 가능합니다. 기존에는 이러한 연결을 위해서 Network Load Balancer를 이용하여 VPC Endpoint Service를 만들어서 사용하기도 했지만, 이제 별도의 Network Load Balancer 없이도 사용 할 수 있습니다.
이번 포스팅에서는 새로 공개된 기능을 간단히 구성하여 서비스 연결 테스트를 진행합니다.
먼저 본 포스팅에서 진행 할 아키텍처입니다.
동일 리전에 2개의 VPC가 존재하며,
VPC는 Peering 이나 Transit Gateway에 대한 연결이 존재하지 않습니다.
AWS PrivateLink를 통한 VPC Resource에 접근 하기 위해서
Resource Configuration, Resource Gateway를 구성한 이후에
Resource Endpoint를 통해서 서비스에 접근을 하게 됩니다.
먼저 구성 전에, 각 구성 요소에 대해서 간단히 살펴보겠습니다.
Resource Gateway
- VPN 외부(다른 VPC, 다른 AWS Account, On-Premises 등)에서 VPC에 접근하기 위한 진입 지점 역할
- Gateway 개념 자체가 네트워크 상에서 트래픽을 특정 대상으로 전달하기 위한 관문(Gateway) 역할을 뜻 하는 데,
Resource Gateway는 VPC내부의 Resource로 접근을 하게 해주는 추상화 된 관문(Gateway)으로 볼 수 있음.
Resource Configuration
- Resource Gateway를 통해서 접근이 가능한 Resource Set
- IP 주소, DNS이름, ARN(Amazon Resource Name)을 통해서 참조 될 수 있음
Resource로 정의 가능한 형태
- HTTPS 엔드포인트
- Database 혹은 Database Cluster
EC2 Instance
여러 EC2 인스턴스 앞에 위치한 Application Load Balancer
AWS Cloud Map을 통해 탐지 가능한 ECS 서비스
네트워크 로드 밸런서 뒤에 위치한 Amazon Elastic Kubernetes Service(Amazon EKS) 서비스
리소스 소유자 VPC에서 실행되는 레거시 서비스
AWS 사이트 간 VPN(AWS Site-to-Site VPN) 또는 AWS Direct Connect를 통해 연결된 온프레미스 서비스
여러 EC2 인스턴스 앞에 위치한 애플리케이션 로드 밸런서
AWS Cloud Map을 통해 탐지 가능한 ECS 서비스
네트워크 로드 밸런서 뒤에 위치한 Amazon Elastic Kubernetes Service(Amazon EKS) 서비스
리소스 소유자 VPC에서 실행되는 레거시 서비스
AWS 사이트 간 VPN(AWS Site-to-Site VPN) 또는 AWS Direct Connect를 통해 연결된 온프레미스 서비스
본 포스팅에서 ZIGI-VPC1에 있는 Web서버를 ZIGI-VPC2에서 접근하는 것을 진행하며,
ZIGI-VPC1과 ZIGI-VPC2의 Web서버와 일반 서버는 이미 구성된 상태로 가정합니다.
ResourceGateway 만들기
VPC-PrivateLink and Lattice 메뉴에서 Resource Gateway를 선택하여,
[Create resource gateway]를 클릭합니다.
Resourte Gateway 이름과 IP Address Type을 선택합니다.
VPC는 외부에서 접근을 허용하게 될, VPC를 선택하시면 됩니다.
여기에서는 Web서버가 ZIGI-VPC1에 있기 때문에
ZIGI-VPC1을 선택하고, 해당 VPC의 가용 영역 내의 서브넷을 선택합니다.
그리고, Security설정에서 Security group을 설정합니다.
참고로, Resource Gateway에서 설정된 Security Group의 설정은,
VPC 외부에서 Resource Gateway로 접근하는 In-Bound영역이 아니라,
Resource Gateway를 통해서 Resource로 향하는 Out-Bound에 대한 정책으로 적용되니,
이 부분을 고려하여, 정책 설정을 해야 합니다.
모든 설정을 마치고, [ Create resource gateway ]를 클릭해서 Resource Gateway를 생성합니다.
생성된 Resource Gateway 자원은 다음과 같이 확인이 가능합니다 .
Resource Configuration 만들기
VPC-PrivateLink and Lattice 메뉴에서 Resource Configuration을 선택하여,
[Create resource configuration]을 클릭합니다.
Resource Configuration 이름을 입력합니다.
Configuration Type은 Resource과 Resource Group이 있습니다.
여기에서는 Resource Type 중에서 Single로 설정하겠습니다.
추가로 Protocol과 Resource Gateway를 설정합니다.
Resource Gateway는 앞서 만든 Resource Gateway로 지정합니다.
Resouce Configuration에서 Resource definition을 설정하는 데,
Single Type에서는 DNS resource와 IP resource를 선택 할 수 있습니다.
여기에서는 DNS resource로 지정하여, ZIGI-VPC1에 있는 ZIGI-Web을 지칭하는 도메인으로 설정했습니다.
참고로, 도메인 설정 시에는 Public 도메인만 현재 지원되고, Private 도메인은 곧 지원 예정이라고 합니다.
IP Address Type과 서비스 포트를 설정합니다.
HTTP로 서비스를 올렸기 때문에 80 포트만 열고, 별도의 Range를 주지는 않았습니다.
기타 설정은 기본 값으로 두고, Resoure Configuration을 생성합니다.
생성된 Resource Configuration을 다음과 같이 확인 할 수 있습니다.
이제 VPC외부에서 Resource Gateway를 통해서 VPC에 인입하여,
Resource Configuration에 정의된 리소스 연결이 가능하게 되었습니다.
다음은 VPC외부에서 VPC 인입을 위한 Endpoint 생성을 진행합니다.
VPC Endpoint - Resources Type
VPC Endpoint 생성 시, 기존에 사용자 VPC에 인입하여 서비스 연결을 위해서는
Network Load Balancer를 이용하여, Endpoint Service를 만든 후에
Endpoint를 만들어서 접근하였지만, 이제는 Network Load Balancer를 이용한 Endpoint Service를 사용하지 않고,
VPC Resources Type을 이용해서 접근이 가능합니다.
Resources Type을 선택하면, 현재 계정에서 접근 가능한 Resource Configuration을 고를 수 있습니다.
앞에서 만든 Resource Configuration인 zigi-rs-ec2-config를 선택합니다.
여기에서는 동일 계정에서 Resource Configuration을 선택했지만, 다른 계정에서 Resource Configuration 생성하고, RAM을 이용해서 Sharing을 받으면다른 계정의 Resource에도 접근이 가능합니다.
Network settiongs에서 VPC와 사용 영역별로 서브넷을 지정하고,
Security Group을 지정합니다.
이러한 지정 방식은 기존의 Interface 유형의 Endpoint 생성 방식과 동일합니다.
VPC Endpoint가 생성되고 나면,
해당 VPC Endpoint에서 'Associations' 탭에서 DNS Nmae 확인이 가능합니다.
해당 DNS Name으로 이제 ZIGI-VPC3에서 ZIGI-VPC1에 있는 ZIGI-Web으로 접근할 수 있습니다.
ZIGI-SVR에서 Resources Type으로 생성한 Endpoint에서 제공된 DNS Name을 서비스에 접근 테스트를 합니다.
아래와 같이 정상적으로 ZIGI-Web으로 접근이 가능한 것을 확인 할 수 있습니다.