일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 온프레미스
- Endpoints
- optional chaining
- JavaScript
- Service
- Proxy Resource
- 단축 평가
- 옵셔널 체이닝
- Await
- docker swarm
- prometheus
- DynamoDB
- vgw
- Kubernetes
- transit gateway
- AWS
- VPC
- 자바스크립트
- CloudFormation
- null 병합 연산자
- 비구조화 할당
- grafana
- cognito
- elasticsearch
- Site-to-Site VPN
- On-Premise
- Custom Resource
- api gateway
- 구조분해 할당
- docker
- Today
- Total
만자의 개발일지
[AWS] Client VPN Endpoints로 Private하게 접근하기 본문
VPN이란?
쉽게 말해 내 컴퓨터가 마치 다른 네트워크 상에 있는 것처럼 만들어주는 기술입니다.
Client VPN Endpoints
AWS Client VPN은 OpenVPN 서버를 AWS에서 쉽게 이용할 수 있도록 한 관리형 서비스로서, 다음과 같이 VPN을 통해 AWS 외부에서 VPC 상에 프라이빗한 리소스에 접근할 수 있도록 해줍니다.
보통 VPN 없이 프라이빗 서브넷에 있는 인스턴스에 접근할려면 퍼블릭 IP를 통해 Bastion 서버에 접근한 후 Bastion 서버에서 프라이빗 서브넷에 있는 인스턴스에 접근하는 방식이 일반적인 방식입니다.
이를 Client VPN을 사용하여 굳이 Bastion 서버를 통하지 않더라도 로컬 개발 환경에서 바로 프라이빗한 리소스에 접근할 수 있도록 만들 수 있습니다.
Client VPN Endpoints 사용하기
이제 AWS에서 제공하는 Client VPN Endpoints 서비스를 이용해 로컬 환경에서 VPC 내 프라이빗 리소스에 접근할 수 있도록 구성해보겠습니다.
ACM 인증서 등록
Client VPN Endpoints를 사용하기 위해서는 우선 ACM(AWS Certificate Manager)에서 인증서를 발급해야 합니다.
인증서는 서버 인증서와 클라이언트 인증서 총 2개가 필요합니다.
먼저 서버 인증서부터 발급 받아보도록 하겠습니다. ACM 콘솔에 접속한 후 우측 상단에 import 버튼을 클릭합니다.
다음과 같이 세 부분을 채워줘야 하는데 위에서부터 보안 인증서(cert), 프라이빗 키(key), CA 인증서(ca) 순으로 채워주시면 됩니다.
위 방법으로 서버 인증서와 클라이언트 인증서 두개를 발급하셨다면 Client VPN Endpoint를 생성할 준비가 완료된 것입니다.
예제를 진행하기 위한 인증서 발급이 필요하신 경우 아래 링크를 참고하여 발급하시길 바랍니다.
https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/mutual.html
Client VPN Endpoint 생성
이제 Client VPN Endpoint를 생성해보도록 하겠습니다. Client VPN Endpoint는 VPC → VPN 메뉴에 있습니다.
오른쪽 상단에 Create client VPN endpoint 버튼을 클릭합니다.
Client VPN Endpoint 이름과 VPN Client가 할당받을 IP CIDR를 입력합니다.
위 ACM에서 발급받은 서버 인증서와 클라이언트 인증서를 지정해 줍니다.
VPC와 보안 그룹을 지정해 주신후 분할 터널(split tunnel) 옵션을 활성화 해줍니다. 443 포트(TCP)를 지정해 주었으니 보안 그룹에 해당 포트에 대한 인바운드 규칙이 허용되어있어야 합니다.
분할 터널 옵션을 활성화 해주지 않으면 모든 트래픽을 AWS로 보내게 됩니다.(인터넷이 안됨) 따라서 분할 터널 옵션을 활성화 해 VPC내 프라이빗 리소스로 보내는 트래픽을 제외한 모든 트래픽은 기존 인터넷을 사용하도록 합니다.
하단에 Create client VPN endpoint 버튼을 눌러 Client VPN Endpoint를 생성해 줍니다.
서브넷 추가
그다음 Client VPN Endpoint를 통해 접근할 서브넷을 설정해야 합니다. Target network associations 메뉴를 클릭한 뒤 Associate target network 버튼을 클릭합니다.
VPC와 서브넷을 선택하고 추가해줍니다.
서브넷을 추가하게 되면 기본적으로 라우팅 테이블도 자동으로 설정됩니다.
권한 부여
그다음 Client VPN Endpoint에 접근할 수 있는 권한을 부여해야 합니다. Authorization rules 메뉴를 클릭하고 Add authorization rule 버튼을 클릭합니다.
접근을 허용할 네트워크(VPC)의 IP CIDR 범위와 권한을 부여할 대상을 지정해줍니다. 필자는 VPC CIDR 대역과 모든 유저 허용으로 지정해 주었습니다.
권한 부여까지 완료하였으면 Client VPN을 통해 접속할 준비가 완료된 것입니다.
AWS Client VPN 접속하기
위에서 생성한 Client VPN Endpoint를 선택하고 오른쪽 상단에 Download client contiguration 버튼을 클릭하여 .ovpn 파일을 다운로드 합니다.
해당 파일을 바로 사용할 수는 없고 다음과 같이 내용을 추가해 줘야합니다.
client
dev tun
proto tcp
remote cvpn-endpoint-0b255d40300125cec.prod.clientvpn.ap-northeast-2.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
</ca>
<cert> # <- 클라이언트 인증서의 cert 부분 추가
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
</cert>
<key> # <- 클라이언트 인증서의 key 부분 추가
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
</key>
reneg-sec 0
그다음 AWS VPN Client, OpenVPN Client 등 자신이 사용할 VPN Client를 설치합니다. 필자는 AWS VPN Client를 사용하였습니다.
.ovpn 파일로 프로필을 추가합니다.
프로필을 선택하고 다음과 같이 연결되었다면 이제 로컬 환경에서 VPC 내의 프라이빗 리소스에 접근할 수 있습니다.
다음과 같이 프라이빗 IP만 가진 EC2 인스턴스 하나를 생성해 주었습니다.
로컬 환경에서 프라이빗 IP로 잘 접근되는 것을 보실 수 있습니다.
참고
'AWS' 카테고리의 다른 글
[AWS] API Gateway Stage Variables + Lambda Alias로 서버리스 개발 환경 관리하기 (2) | 2022.08.11 |
---|---|
[AWS] VPC Flow Log로 IP 트래픽 로그 남기기 (0) | 2022.07.24 |
[AWS] CloudFormation이란 (2) | 2022.07.11 |
[AWS] Cognito 회원 가입 및 로그인 기능 구현하기(feat. amazon-cognito-identity-js, TypeScript) (0) | 2022.06.11 |
[AWS] Cognito User Pool 생성하기 (0) | 2022.06.10 |