PrivateLink
Hosted Service
- VPC 피어링은 1:1 연결만 지원되므로 고객사의 계정이 여러 개일 경우 많은 피어링 생 성
- 고객사의 VPC CIDR 블록과 벤더사의 VPC CIDR 블록이 겹칠 경우 VPC 피어링 생성 불가
VPC Endpoint Service (AWS PrivateLink)
- 벤더(Service Provider)는 VPC에 애플리케이션을 구성하고 VPC Endpoint 서비스를 구성
- 하나 또는 여러 고객(Customer) AWS 계정의 VPC Endpoint가 벤더(Provider) AWS 계정의 NLB 또는 GWLB에 연결
- 인터넷을 통하지 않고 AWS 내부 네트워크를 통한 트래픽
- 엔드포인트 서비스 연결시 고객과 벤더의 AWS 리전이 동일해야 함
VPC 엔드포인트 실습
실습에 들어가기 전에 먼저 상황을 아키텍처로 그려본다면 아래와 같은 그림이 되겠습니다.
note
Windows EC2, VPC ENI, Linux EC2에 적용되는 보안그룹은 임시적으로 모든 트래픽을 허용해줍니다. 모든 서비스를 구축한 후에 보안 그룹에 최소 권한 범위를 제공하겠습니다. NLB는 보안 그룹이 없으므로 NACL을 사용해 서브넷 수준에서 트래픽을 제어합니다.
- 고객사 VPC에 퍼블릭 인스턴스 생성 (Windows EC2)
- 벤더사 VPC에 프라이빗 인스턴스 3개 생성 (Linux EC2)
- 벤더사 VPC에 프라이빗 인스턴스를 대상으로 하는 타겟 그룹 생성
- 벤더사 VPC에 NLB 생성
NLB 속성
- 체계: 내부 (internal-facing)
- VPC: 벤더사 VPC
- 서브넷: 프라이빗 인스턴스 를 포함하는 서브넷 포함 2개 이상
- 리스너: 타겟 그룹
- VPC 엔드포인트 서비스 생성
VPC 엔드포인트 서비스 속성
- 로드밸런서 유형 (네트워크 선택)
- 네트워크
- 게이트웨이
- 사용가능한 로드밸런서: 위에서 만든 NLB 선택
- 엔드포인트 수락 필수
- VPC 엔드포인트 생성
VPC 엔드포인트 속성
- 다른 엔드포인트 서비스
- 서비스 설정: VPC 엔드포인트 서비스 이름
- VPC: 고객사 VPC
- VPC 보안그룹 생성
note
VPC 엔드포인트 생성시 모든 가용영역을 선택할 경우 네트워크 인터페이스가 가용 영역의 개수 만큼 생성되게 되는데 이럴 경우 여러 네트워크 인터페이스 중 고객사의 EC2 가용영역을 확인하거나 엔드포인트의 네트워크 인터페이스 아이디를 확인하여 연결된 네트워크 인터페이스를 선택합니다.
- VPC 엔드포인트 서비스에서 연결요청 수락하기
연결 요청 수락
- 엔드포인트 서비스 - 엔드포인트 연결 - 작업 - 엔드포인트 - 연결 요청 수락
- 보안 그룹 수정 (보안그룹 참조를 이용하셔도 됩니다. 실습과정에서는 직접 설정해보겠습니다.)
고객사 VPC (Windows EC2 보안그룹)
- 유형 및 포트 범위: RDP 3389
- 소스: 내 IP
고객사 VPC (Endpoint 보안그룹)
- 유형 및 포트 범위: TCP 1024 - 65535 (Ephemeral Port)
- 소스: Windows EC2 프라이빗 IPv4 주소
벤더사 VPC (Linux EC2 보안그룹)
- 유형 및 포트 범위: HTTP 80
- 소스: 네트워크 로드밸런서 프라이빗 IPv4 주소
제 경험상 여러 서비스들로 아키텍처를 구성하면서 최소한의 권한을 고려해 보안그룹을 생성하는 것보다 아키텍처 구상도를 먼저 그려보고 트래픽이 어느 서비스에서 들어오는지 눈으로 직접 보면서 설정하는 것이 이해도 쉽고 정확하 것 같습니다.
네트워크 로드 밸런서(NLB)는 보안그룹에 연결되지 않으므로 인스턴스 레벨의 보안 설정은 해주지 않았습니다. 따라서 NACL에서 처리해주거나 최종 트래픽이 도달(리스너, 타겟그룹)하는 인스턴스 보안그룹에 보안설정을 진행합니다. 실습에서는 인스턴스 보안그룹을 설정해주었습니다.
실습에서는 이렇게 진행하지만 보안은 안에서보다 밖에서부터 막는 것이 최선입니다.
RDP Windows EC2 접속
- EC2 - 네트워크 인터페이스 -
VPC 엔드포인트 기본 프라이빗 IPv4 주소
orVPC 엔드포인트 DNS 이름
조회 및 쿼리 - Linux EC2의 index.html 확인