아마존 vpn 터널링
Client VPN Endpoints이란
vpn은 쉽게 말해 내 컴퓨터가 마치 다른 네트워크 상에 있는 것처럼 만들어주는 기술이다.
AWS Client VPN은 OpenVPN 서버를 AWS에서 쉽게 이용할 수 있도록 한 관리형 서비스로서, 다음과 같이 VPN을 통해 AWS 외부에서 VPC 상에 프라이빗한 리소스에 접근할 수 있도록 해준다.
![]()
구성법
ACM 인증서 등록
Client VPN Endpoints를 사용하기 위해서는 우선 ACM(AWS Certificate Manager)에서 인증서를 발급해야 한다.
인증서는 서버 인증서와 클라이언트 인증서 총 2개가 필요하다.
인증서를 생성해주는 easyrsa3를 이용한다. 설치법은 다음과 같다(mac기준)
- git clone https://github.com/OpenVPN/easy_rsa.git
인증서 생성은 다음 sh스크립트 참고한다.
#!/bin/bash
set -e
cd ./easy-rsa/easyrsa3
### 인증서 생성 ###
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa --san=DNS:server.example.com build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass
cd ../../
### 생성된 인증서를 개인폴더로 이동 ###
cp ./easy-rsa/easyrsa3/pki/ca.crt ./custom_folder/
cp ./easy-rsa/easyrsa3/pki/issued/server.crt ./custom_folder/
cp ./easy-rsa/easyrsa3/pki/private/server.key ./custom_folder/
cp ./easy-rsa/easyrsa3/pki/issued/client1.domain.tld.crt ./custom_folder
cp ./easy-rsa/easyrsa3/pki/private/client1.domain.tld.key ./custom_folder/
cd ./custom_folder/
### aws 설정 ###
aws configure set region us-east-2
#아래는 수동으로 실행할것
# aws acm import-certificate --certificate fileb://./custom_folder/server.crt --private-key fileb://./custom_folder/server.key --certificate-chain fileb://./custom_folder/ca.crt
# aws acm import-certificate --certificate fileb://./custom_folder/client1.domain.tld.crt --private-key fileb://./custom_folder/client1.domain.tld.key --certificate-chain fileb://./custom_folder/ca.crt
# cat ./custom_folder/server.crt | pbcopy인증서 생성부분에서 서버 인증서 생성에 --san=DNS:server.example.com 이 추가되어있는데, 이걸 추가해야 AWS에 업로드할 때 도메인 이름이 뜬다(도메인 이름이 안뜨면, VPN 엔드포인트 생성할때 키 지정이 안됨)
aws acm 으로 시작하는 명령어는 생성한 인증서와 키를 업로드하기 위한 명령어이다.
업로드가 되면 다음 화면처럼 보여야한다.
![]()
VPN 엔드포인트 생성
다음 화면과 같이 인증서 생성을 진행해준다.
![]()
클라이언트 IPv4 CIDR은 사용중인 VPC 대역과 겹치지 않도록 설정해준다. (필자는 10.2.0.0/16 로 지정함)
인증정보는 조금 전에 등록한 서버, 클라이언트 인증서를 지정해준다.
![]()
전송 프로토콜은 UDP로 두고, 분할 터널 활성화를 켜준다.(대상 트래픽만 VPN 터널을 통과하도록 AWS 하여 클라이언트의 트래픽 라우팅을 최적화할 수 있고,
발신 트래픽의 양을 줄여 데이터 전송 비용을 줄일 수 있다.)
![]()
해당 네트워크에 연결할 서브넷을 지정해준다. (필자는 k8s 내부접속을 위해 private subnet 3개를 연결함)
![]()
보안그룹을 지정해준다.
443 UDP 허용 보안그룹을 생성해주거나, 해당 포트와 프로토콜이 포함된 보안그룹을 지정해주면 된다.
![]()
권한 규칙을 지정해준다. 모든 네트워크에서 연결할 수 있도록 "0.0.0.0/0" 로 지정한다.
설정이 끝나면 상단에 클라이언트 구성 다운로드를 클릭하여 접속에 필요한 .ovpn 파일을 다운로드 받는다.
.ovpn파일을 열고 내부에 다음 내용을 추가해준다.
<cert>
Contents of client certificate (.crt) file
</cert>
<key>
Contents of private key (.key) file
</key>클라이언트 측의 cert와 key내용을 기입해 준다.
VPN 네트워크 터널링
다음 링크를 통해 vpn클라이언트를 설치한다.
aws vpn client download
다운받고 실행한 다음, 프로필을 추가하고 아까 설정한 .ovpn파일을 열어준다.
해당 네트워크에 접속한다.