Client VPN을 이용해서 Private Subnet EC2 Instance에 접속해 보기

Client VPN을 이용해서 Private Subnet EC2 Instance에 접속해 보는 과정을 정리해 봤습니다.
2022.07.26

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Client VPN을 이용해서 Private Subnet EC2 Instance에 접속해 보는 과정을 정리해 봤습니다.

하고 싶은 것

Internet Gateway, NAT Gateway 없이 외부에서 Private Subnet에 있는 EC2 Instance에 접속 하기 위해 Client VPN을 사용해 봤습니다.

이번 블로그에서는 Client VPN을 사용해서 EC2 Instance에 접속한 방법에 대해서 정리해 봤습니다.

서버 및 클라이언트 인증서와 키 생성

$ git clone https://github.com/OpenVPN/easy-rsa.git
$ cd easy-rsa/easyrsa3
$ ./easyrsa init-pki
$ ./easyrsa build-ca nopass
$ ./easyrsa build-server-full server nopass
$ ./easyrsa build-client-full client1.domain.tld nopass

$ mkdir ~/custom_folder/
$ cp pki/ca.crt ~/custom_folder/
$ cp pki/issued/server.crt ~/custom_folder/
$ cp pki/private/server.key ~/custom_folder/
$ cp pki/issued/client1.domain.tld.crt ~/custom_folder
$ cp pki/private/client1.domain.tld.key ~/custom_folder/
$ cd ~/custom_folder/

다음 명령어를 통해 OpenVPN easy-rsa를 사용하여 서버 및 클라이언트 인증서와 키를 생성합니다.

$ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt

$ aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt

다음 명령어를 통해 인증서를 ACM에 업로드 합니다.

업로드 하기 전에, 로컬 환경에 AWS CLI 환경을 설정할 필요가 있습니다.

Mac OS에서 AWS CLI 환경을 설정하는 방법에 대해서는 아래 블로그를 참고해 주세요.

ACM에서 확인해 보면 인증서가 문제 없이 업로드 된 것을 확인할 수 있습니다.

보다 자세한 내용은 아래 링크를 참고해 주세요.

Client VPN 설정

이제「클라이언트 VPN 엔드포인트 생성」버튼을 클릭합니다.

Client VPN의 이름을 적고, IPv4 CIDR은 접속할 VPC의 CIDR과 겹치지 않게 작성합니다.

「서버 인증서 ARN」은 조금 전 ACM에 업로드한 인증서중 server를 선택합니다.

이어서「상호 인증 사용」을 체크하고「클라이언트 인증서 ARN」에는 client1.domain.tld를 선택합니다.

VPC를 선택하고「분할 터널 활성화」를 체크 합니다.

분할 터널 활성화를 체크하면, Client VPN 엔드포인트 라우팅 테이블의 경로와 일치하는 네트워크 대상 트래픽만 Client VPN 터널을 통해 라우팅됩니다.

자세한 사항은 아래 링크를 참고해 주세요.

이제「대상 네트워크 연결」카테고리에서「대상 네트워크 연결」버튼을 클릭합니다.

VPC를 선택하고, 연결할 서브넷을 선택합니다.

여러 서브넷을 등록하고 싶다면 똑같은 절차로 다른 서브넷도 연결합니다.

「권한 부여 규칙」에서「권한 부여 규칙 추가」버튼을 클릭합니다.

「액세스를 활성화할 대상 네트워크」에는 VPC 주소를 넣어주고, 모든 사용자에게 액세스를 허용합니다.

상태가「Available」로 바꼈다면 클라이언트 구성을 다운로드 합니다.


client
dev tun
proto udp
remote cvpn-endpoint-06a4c75bb8e2c230c.prod.clientvpn.ap-northeast-1.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
verb 3

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

reneg-sec 0

-----BEGIN CERTIFICATE-----
#cat client1.domain.tld.crt 내용을 붙여넣기 하세요
-----END CERTIFICATE-----

-----BEGIN PRIVATE KEY-----
#cat client1.domain.tld.key 내용을 붙여넣기 하세요
-----END PRIVATE KEY-----

다운로드 받은 파일을 열어서 client1.domain.tld.crt, client1.domain.tld.key 내용을 붙여넣기 합니다.

AWS VPN Client를 실행해서 프로필 추가 버튼을 클릭합니다.

AWS VPN Client는 아래 링크에서 다운로드 받을 수 있습니다.

적당히 이름을 입력하고, 조금 전 키 내용을 설정했던 파일을 불러온 다음 프로필 추가 버튼을 클릭합니다.

마지막으로 연결 버튼을 클릭합니다.

연결에 성공하면, Client VPN 연결 카테고리에 연결 상태를 확인할 수 있습니다.

(2번 정도 연결을 했기 때문에 연결 기록이 2개가 남아있습니다.)

접속 테스트

Private Subnet에 있는 Linux EC2에 핑을 보내보면 성공적으로 핑이 가는 것을 확인할 수 있습니다.

접속도 문제 없이 되는 것을 확인할 수 있습니다.

EC2 Windows도 생성해서 확인해 본 결과, 문제 없이 접속할 수 있었습니다.

EC2 Windows에 접속하는 방법은 microsoft remote desktop을 사용했습니다. 자세한 사항은 아래 블로그를 참고해 주세요.

마지막으로 AWS VPN Client 연결 해제한 상태에서 Private Subnet에 있는 Linux EC2에 핑을 보내보면 실패하는 것을 확인할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !

참고