AWS Client VPN

Siyun·2025년 7월 10일

AWS

목록 보기
37/37

Client VPN 작동방식

  1. 팀원이 집(어디든)에서 인터넷 연결
  2. .ovpn 설정 파일로 VPN 접속 (→ 인증서 기반이거나 SAML/AD 기반 인증)
  3. VPN이 연결되면, 팀원은 VPC 내부 사설 IP를 하나 받음
    즉, 마치 팀원이 VPC 내부 네트워크에 직접 있는 것처럼 됨
    이 과정에서는 집 IP는 전혀 신경 쓰지 않음
    → 오직 올바른 인증서 or 사용자 인증만 통과하면 됨.

Site-to-Site VPN vs Client VPN

구분Site-to-Site VPNClient VPN
연결 대상네트워크 ↔ 네트워크개별 사용자 ↔ 네트워크
연결 형태항상 연결된 터널필요할 때 접속
인증 방식네트워크 장비 간 인증사용자 인증
사용 예시사무실 ↔ AWS VPC직원 노트북 → AWS VPC 접속

설정하기

Terraform으로 EKS가 있는 VPC에 AWS Client VPN Endpoint를 생성하고,
'ACM 인증서'는 Terraform으로 만들되,
팀원들은 각자 자신의 클라이언트 인증서(client cert) 를 만들어서 접속.

구성도:

Terraform 작업 (관리자)
├─ VPC
├─ ACM 인증서 (Server Cert)
├─ AWS Client VPN Endpoint
│  ├─ 연결된 서브넷/라우팅
│  ├─ 인증 방식: Mutual Authentication (서버 인증서 + 클라이언트 인증서)
│  └─ Authorization Rule: 팀원들의 VPN 트래픽 → VPC/EKS 접근 허용
└─ 보안 그룹 설정

팀원 개개인 작업
├─ 클라이언트 인증서 생성 (OpenSSL or easy-rsa 등)
├─ .ovpn 구성파일 생성
└─ OpenVPN 등으로 AWS VPN 접속

인증서 생성(window)

  1. https://github.com/OpenVPN/easy-rsa/releases 여기서 자신의 OS에 맞는 버전으로 zip파일 다운로드 후 압축풀기

  2. cmd를 열고 EasyRSA-3.x 가 있는 경로로 이동 후 .\EasyRSA-Start.bat 명령어 실행

  3. 새로운 PKI 환경을 시작하고, CA를 빌드하여 서버 인증서 및 키를 생성하고 이후 클라이언트 인증서 및 키를 생성

./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa --san=DNS:server build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass

exit

명령어 해석

1. EasyRSA 초기화

./easyrsa init-pki

PKI 디렉토리를 초기화하는 명령어이다.
이 과정을 통해 인증서와 키가 저장될 디렉토리 구조가 생성된다.

2. 루트 CA 인증서 생성

./easyrsa build-ca nopass

비밀번호 없이 루트 CA 인증서를 생성하는 명령어이다.
생성된 파일은 다음과 같다.

  • pki/ca.crt: 루트 인증서
  • pki/private/ca.key: 루트 비공개 키

3. 서버 인증서 생성

./easyrsa --san=DNS:server build-server-full server nopass

서버 인증서를 생성하는 명령어이다.
SAN 설정은 AWS 요구사항에 맞춰 반드시 포함해야 한다.
생성된 파일은 다음과 같다.

  • pki/issued/server.crt
  • pki/private/server.key
    이 인증서는 AWS ACM에 업로드하여 사용한다.

4. 클라이언트 인증서 생성

./easyrsa build-client-full client1.domain.tld nopass

클라이언트 인증서를 생성하는 명령어이다.
여기서 client1.domain.tld는 구분용 CN(Common Name)이며, 실제 도메인이 아니어도 된다.
생성된 파일은 다음과 같다.

  • pki/issued/client1.domain.tld.crt
  • pki/private/client1.domain.tld.key
    이 인증서는 .ovpn 파일에 포함되어 VPN 접속 시 사용한다.

인증서 정리

구분파일명사용 용도
루트 CAca.crt서버/클라이언트 공통 사용
서버 인증서server.crt, server.keyAWS ACM 업로드 용도
클라이언트 인증서client1.crt, client1.key.ovpn 파일에 포함하여 사용

서버 인증서 및 키 그리고 클라이어트 인증서 및 키를 사용자 지정 폴더에 복사한 후 해당 폴더로 이동.

mkdir C:\custom_folder
copy pki\ca.crt C:\custom_folder
copy pki\issued\server.crt C:\custom_folder
copy pki\private\server.key C:\custom_folder
copy pki\issued\client1.domain.tld.crt C:\custom_folder
copy pki\private\client1.domain.tld.key C:\custom_folder
cd C:\custom_folder

아래 명령어로 acm에 업로드

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

aws acm import-certificate --certificate fileb://ca.crt --private-key fileb://ca.key --no-cli-pager

그다음 테라폼에서 arn을 변수로 입력해줌.


Terraform으로 해야 할 작업 목록

  1. Client VPN Endpoint 생성

    • VPC에 연결
    • 인증 방식: mutual
    • server cert ARN, client cert CA ARN 지정
  2. Authorization rule 추가

    • VPN IP → VPC IP 대역으로 트래픽 허용
  3. Route 추가

    • VPN 접속 후 VPC 접근 가능하게
  4. 보안 그룹 설정

    • VPN CIDR 범위에서 EKS API server 접근 허용

팀원들에게 .ovpn 배포

각 팀원별 클라이언트 인증서 만들고 아래 파일들로 .ovpn 생성

- teamN.crt            (클라이언트 인증서)
- teamN.key            (개인 키)
- ca.crt               (서버 인증기관 인증서)
- client-config.ovpn   (전체 구성 파일)

.ovpn 안에는 다음과 같은 형식으로 포함됨:

client
dev tun
proto udp
remote 본인vpn엔드포인트(예시:cvpn-endpoint-0011abcabcabcabc1.prod.clientvpn.eu-west-2.amazonaws.com) 443
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
verb 3

<ca>
Contents of CA
</ca>

<cert>
Contents of client certificate (.crt) file
</cert>

<key>
Contents of private key (.key) file
</key>

reneg-sec 0

접속하기

  1. https://aws.amazon.com/ko/vpn/client-vpn-download/ 에서 AWS Client VPN용 소프트웨어 클라이언트를 다운로드
  2. 클라이언트를 열고 파일 -> 프로필 관리 -> 프로필 추가에서 이름과 .ovpn 파일을 추가
  3. 연결하기
  4. 윈도우라면 ipconfig 했을 때 vpn 어댑터가 연결된 것을 확인할 수 있다.

접근하고싶은 리소스의 보안그룹에 Client VPN cidr 을 인바운드 규칙의 소스로 추가해줘야 접근 가능하다.

profile
공부 기록

0개의 댓글