| 구분 | Site-to-Site VPN | Client 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 접속
https://github.com/OpenVPN/easy-rsa/releases 여기서 자신의 OS에 맞는 버전으로 zip파일 다운로드 후 압축풀기
cmd를 열고 EasyRSA-3.x 가 있는 경로로 이동 후 .\EasyRSA-Start.bat 명령어 실행
새로운 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-pkiPKI 디렉토리를 초기화하는 명령어이다.
이 과정을 통해 인증서와 키가 저장될 디렉토리 구조가 생성된다.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.crtpki/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.crtpki/private/client1.domain.tld.key
이 인증서는 .ovpn 파일에 포함되어 VPN 접속 시 사용한다.인증서 정리
구분 파일명 사용 용도 루트 CA ca.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을 변수로 입력해줌.
Client VPN Endpoint 생성
Authorization rule 추가
Route 추가
보안 그룹 설정
각 팀원별 클라이언트 인증서 만들고 아래 파일들로 .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

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