AWS ClientVPN이란?
AWS ClientVPN은 원격지 사용자가 AWS VPC 내부 리소스 및 인터넷에 안전하게 접근할 수 있도록 하는 관리형 OpenVPN 기반 서비스입니다. 온프레미스 VPN 서버를 별도로 구축·관리할 필요 없이, AWS ClientVPN을 세팅함으로써 AWS가 가용성과 확장성을 책임지는 엔드포인트를 제공합니다.
그림 1. Client VPN 엔드포인트 → VPC 서브넷 → Internet Gateway 경유 인터넷 접근 시나리오
위 구성에서 트래픽 흐름은 다음과 같습니다.
(네트워크 인터페이스) → Internet Gateway → 인터넷
주요 특징
- 프로토콜: OpenVPN (UDP 443 또는 TCP 443)
- 인증 방식: 상호 인증서(Mutual TLS), Active Directory, SAML 2.0 중 선택
- 요금: 엔드포인트 시간당 $0.10 + 클라이언트 연결 시간당 $0.05
- 스플릿 터널: 선택적으로 VPC 트래픽만 터널링 (나머지는 로컬 인터넷 사용)
사전 준비
설정 전 아래 항목을 준비합니다.
- AWS VPC 및 퍼블릭 서브넷 (IGW 연결 포함)
- OpenVPN 호환 클라이언트 (AWS VPN Client 권장)
- Easy-RSA 또는 OpenSSL (인증서 생성용)
서버 및 클라이언트 인증서 생성 후 ACM 등록
AWS ClientVPN의 상호 인증(Mutual TLS)에는 서버 인증서와 클라이언트 인증서가 모두 필요합니다. Easy-RSA를 사용해 자체 서명 CA를 만들고 두 인증서를 발급합니다.
# Easy-RSA 3.x 설치 (macOS) brew install easy-rsa # PKI 초기화 cd /usr/local/etc/easy-rsa ./easyrsa init-pki ./easyrsa build-ca nopass # CA 생성 (Common Name: vpn-ca) # 서버 인증서 생성 ./easyrsa build-server-full server nopass # 클라이언트 인증서 생성 ./easyrsa build-client-full client1.domain.tld nopass
생성된 인증서를 AWS Certificate Manager(ACM)에 등록합니다.
# 서버 인증서 ACM 등록 aws acm import-certificate \ --certificate fileb://pki/issued/server.crt \ --private-key fileb://pki/private/server.key \ --certificate-chain fileb://pki/ca.crt \ --region ap-northeast-2 # 클라이언트 인증서 ACM 등록 (상호 인증 사용 시) aws acm import-certificate \ --certificate fileb://pki/issued/client1.domain.tld.crt \ --private-key fileb://pki/private/client1.domain.tld.key \ --certificate-chain fileb://pki/ca.crt \ --region ap-northeast-2
Client VPN 엔드포인트 생성
AWS 콘솔 → VPC → Client VPN Endpoints → Create Client VPN Endpoint으로 이동합니다.
| 항목 | 설정값 / 설명 |
|---|---|
| Name | 식별하기 쉬운 이름 (예: jccloud-client-vpn) |
| Client IPv4 CIDR | 클라이언트에 할당할 IP 대역 (예: 10.8.0.0/22). VPC·서브넷과 겹치지 않아야 합니다. |
| Server certificate ARN | Step 1에서 ACM에 등록한 서버 인증서 ARN 선택 |
| Authentication type | Mutual authentication (인증서) / Active Directory / Federated authentication(SAML) 중 선택 |
| Client certificate ARN | Mutual 인증 선택 시 클라이언트 인증서 ARN 지정 |
| Connection logging | 활성화 권장. CloudWatch Logs 그룹·스트림 지정 |
| Split tunnel | Enable: VPC 대역 트래픽만 터널링 (10.8.0.0/22만 VPN을 사용하게 되므로 가격과 보안적으로 권장) Disable: 모든 트래픽을 터널로 전송 |
| VPN port | UDP 443 (기본, 성능 우수) 또는 TCP 443 (방화벽 우회 필요 시) |
| DNS servers | VPC DNS 사용 시 VPC CIDR의 +2 주소 (예: 172.31.0.2) |
대상 네트워크 연결 (Target Network Association)
엔드포인트 생성 후 Target network associations 탭에서 Associate target network를 클릭해 VPC와 서브넷을 연결합니다. 이 과정에서 AWS가 해당 서브넷에 Client VPN 네트워크 인터페이스를 자동으로 생성합니다.
| 항목 | 설명 |
|---|---|
| VPC | 클라이언트가 접근할 VPC 선택 |
| Subnet | Client VPN 네트워크 인터페이스가 생성될 서브넷. 가용성을 위해 여러 AZ 서브넷을 추가할 수 있습니다. |
연결이 완료되면 엔드포인트 상태가 Pending-associate에서 Available로 바뀝니다.
(보통 수 분 소요)
권한 규칙(Authorization Rules) 추가
Client VPN은 기본적으로 모든 접근을 차단합니다. 접근을 허용할 대상 네트워크 대역을 명시적으로 추가해야 합니다. Authorization rules 탭 → Add authorization rule을 클릭합니다.
| 시나리오 | Destination network | Grant access to |
|---|---|---|
| VPC 전체 접근 | 172.31.0.0/16 (VPC CIDR) |
Allow access to all users |
| 특정 서브넷만 접근 | 172.31.1.0/24 |
Allow access to all users |
| 인터넷 접근 허용 (Full tunnel) | 0.0.0.0/0 |
Allow access to all users |
| AD 그룹별 접근 제어 | 원하는 대역 | Allow access to users in a specific access group (AD Group ID 입력) |
라우트 설정
Route table 탭을 확인합니다. 서브넷 연결 시 VPC CIDR 라우트는 자동 생성됩니다. 인터넷 접근(0.0.0.0/0)이 필요하다면 수동으로 추가합니다.
| Route destination | Target subnet | 용도 |
|---|---|---|
172.31.0.0/16 |
연결된 서브넷 (자동 생성) | VPC 내부 접근 |
0.0.0.0/0 |
퍼블릭 서브넷 (IGW 연결된 서브넷) | 인터넷 접근 (Full tunnel 시) |
0.0.0.0/0 라우트는 필요하지 않습니다.
VPC CIDR 범위의 트래픽만 터널링되고 나머지는 클라이언트 로컬 인터넷을 사용합니다.
비용과 성능 모두 유리합니다.
Security Group 설정
Client VPN 엔드포인트는 연결 시 지정한 서브넷의 보안 그룹을 적용받습니다. VPN 클라이언트가 접근할 EC2·RDS 등의 보안 그룹 인바운드 규칙에 Client VPN 네트워크 인터페이스의 보안 그룹 또는 클라이언트 CIDR을 소스로 추가해야 합니다.
# 예: EC2 인스턴스 SG에 VPN 클라이언트 CIDR 허용
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxxx \
--protocol tcp \
--port 22 \
--cidr 10.8.0.0/22
클라이언트 구성 파일 다운로드 및 수정
엔드포인트 콘솔 → Download client configuration을 클릭해 .ovpn 파일을 받습니다.
상호 인증(Mutual TLS) 사용 시 클라이언트 인증서와 키를 파일에 추가해야 합니다.
# .ovpn 파일 끝에 아래 내용 추가 <cert> -----BEGIN CERTIFICATE----- (client1.domain.tld.crt 내용 붙여넣기) -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- (client1.domain.tld.key 내용 붙여넣기) -----END PRIVATE KEY----- </key>
클라이언트에서 VPN 연결
AWS VPN Client 앱을 열고 File → Manage Profiles → Add Profile에서
수정한 .ovpn 파일을 불러옵니다.
Connect 버튼을 클릭하면 연결이 시작됩니다.
연결 성공 후 아래 명령으로 VPC 내부 접근을 확인합니다.
# 연결된 VPN IP 확인 ifconfig | grep 10.8 # VPC 내 EC2 프라이빗 IP로 핑 테스트 ping 172.31.x.x # 또는 SSH 접속 확인 ssh -i keypair.pem ec2-user@172.31.x.x
비용 계산 예시
| 항목 | 단가 | 10명 / 오전 8시~오후 5시 (176시간/월) |
|---|---|---|
| 엔드포인트 유지 비용 | $0.10/시간 | $0.10 × 176 = $17.60 |
| 클라이언트 연결 비용 | $0.05/시간·클라이언트 | $0.05 × 176 × 10명 = $88.00 |
| 월 합계 | $105.60 (약 ₩145,000) | |
※ 서울 리전 기준. 데이터 전송 비용은 별도.
자주 발생하는 문제
| 증상 | 원인 및 해결 |
|---|---|
| 연결 후 VPC 리소스에 접근 불가 | Authorization Rule 누락. 대상 CIDR 확인 후 규칙 추가. |
| 연결 후 인터넷 접근 불가 (Full tunnel) | 0.0.0.0/0 라우트가 퍼블릭 서브넷(IGW 연결)을 가리키는지 확인. |
| TLS 핸드셰이크 실패 | 클라이언트 .ovpn 파일에 인증서·키가 올바르게 삽입됐는지 확인. |
| 엔드포인트 상태가 Pending | 서브넷 연결이 완료될 때까지 수 분 대기. 서브넷 CIDR 중복 여부 재확인. |
| EC2 SSH 연결 거부 | EC2 Security Group 인바운드에 VPN 클라이언트 CIDR(10.8.0.0/22) 허용 추가. |
마무리
AWS ClientVPN은 설정 단계가 다소 많지만, 한 번 구성만으로 별도 VPN 서버 유지 관리 없이 다수 사용자의 안전한 원격 접속 환경을 제공합니다. 또한 Active Directory, MFA, 또는 SAML 연동을 추가하면 사용자별 접근 통제와 MFA 강제를 구현할 수 있어 제로 트러스트(Zero Trust) 원격 접근 환경을 구현할 수 있습니다.
스플릿 터널을 활성화하면 VPN 트래픽이 VPC 통신에만 사용되어 비용과 지연 시간을 모두 줄일 수 있습니다. 인터넷 트래픽까지 제어가 필요한 규제 환경이 아니라면 스플릿 터널을 기본으로 설정하는 것을 권장합니다.
