AWS에서 Private Subnet에 있는 EC2, RDS, 내부 ALB, EKS API Endpoint 등에 접속하려면 예전에는 Bastion Host를 많이 사용했습니다. 하지만 Bastion Host는 외부에서 접속 가능한 서버를 직접 운영해야 하고, SSH 포트 관리, 계정 관리, 보안 패치, 접근 로그 관리 등 운영 부담이 있습니다.
이럴 때 사용할 수 있는 대안 중 하나가 AWS Client VPN입니다.
AWS Client VPN은 사용자의 노트북이나 PC에서 VPN 클라이언트를 통해 AWS VPC 내부망에 접속할 수 있도록 해주는 관리형 Client-to-Site VPN 서비스입니다. 쉽게 말하면, 외부 사용자가 VPN을 통해 VPC 내부 네트워크에 들어온 것처럼 접근할 수 있게 해주는 기능입니다.

AWS Client VPN이란?
AWS Client VPN은 OpenVPN 기반의 관리형 VPN 서비스입니다.
사용자는 AWS VPN Client 또는 OpenVPN 호환 클라이언트를 설치하고, 관리자가 제공한 VPN 설정 파일을 가져와 접속합니다. 접속이 완료되면 사용자는 VPC 내부의 Private IP 대역으로 통신할 수 있습니다.
구조를 단순화하면 다음과 같습니다.
사용자 PC
↓
AWS VPN Client
↓
AWS Client VPN Endpoint
↓
VPC Private Subnet
↓
Private EC2 / RDS / 내부 ALB / EKS
중요한 점은 VPC 자체에 “VPN Client 기능을 켠다”는 개념이 아니라, Client VPN Endpoint를 생성하고 이 Endpoint를 VPC의 Subnet에 연결하는 방식이라는 점입니다.
언제 사용하면 좋을까?
AWS Client VPN은 다음과 같은 상황에서 유용합니다.
- Bastion Host 없이 Private EC2에 SSH 접속하고 싶을 때
- Private Subnet의 RDS에 로컬 PC에서 접속해야 할 때
- 내부 ALB, 내부 API, 사설 도메인에 접근해야 할 때
- 재택근무자나 외부 운영자가 VPC 내부망에 접근해야 할 때
- 사용자 단위로 VPN 접속을 제어하고 싶을 때
특히 Bastion Host를 없애고 싶은 환경에서는 좋은 선택지가 될 수 있습니다. Bastion Host는 외부에 노출되는 EC2를 직접 운영해야 하지만, Client VPN은 관리형 서비스이기 때문에 운영 부담을 줄일 수 있습니다.
사용자의 접속 방법
관리자가 Client VPN을 구성해두면 사용자는 비교적 간단하게 접속할 수 있습니다.
1. AWS VPN Client 설치
2. 관리자가 제공한 .ovpn 설정 파일 가져오기
3. VPN 프로파일 Import
4. Connect 클릭
5. VPN 연결 후 VPC 내부 리소스 접속
VPN 연결이 완료되면 사용자는 내부 Private IP로 직접 접근할 수 있습니다.
예를 들어 Private EC2에 SSH 접속하려면 다음과 같이 접속할 수 있습니다.
ssh ec2-user@10.30.1.10
내부 웹 서비스가 있다면 브라우저에서 Private IP 또는 내부 DNS로 접근할 수 있습니다.
http://10.30.1.20
http://internal-service.local
즉, 사용자는 VPN 연결 후 마치 VPC 내부 네트워크에 있는 것처럼 리소스에 접근하게 됩니다.
전체 구성 흐름
AWS Client VPN을 구성하는 흐름은 다음과 같습니다.
1. 인증 방식 준비
2. Client VPN Endpoint 생성
3. Target Network Association 설정
4. Authorization Rule 추가
5. Route Table 확인 또는 추가
6. Security Group 설정
7. Client 설정 파일 다운로드
8. 사용자 접속 테스트
핵심 순서는 다음과 같이 기억하면 됩니다.
Endpoint 생성
→ VPC Subnet 연결
→ 접근 권한 허용
→ 라우팅 설정
→ 보안 그룹 허용
→ 사용자 접속
1. 인증 방식 준비
Client VPN은 사용자가 VPN에 접속할 때 인증을 수행합니다.
대표적인 인증 방식은 다음과 같습니다.
1. Mutual Authentication
- 인증서 기반 인증
- 실습이나 소규모 환경에 적합
2. Active Directory Authentication
- AWS Managed Microsoft AD 등과 연동
3. SAML-based Federated Authentication
- IAM Identity Center, Okta, Microsoft Entra ID 등과 연동
- 운영 환경에 적합
실습 환경에서는 인증서 기반 Mutual Authentication이 가장 단순합니다. 하지만 운영 환경이라면 SAML 또는 AD 기반 인증을 사용하는 것이 관리 측면에서 더 좋습니다.
2. Client VPN Endpoint 생성
AWS Console에서는 다음 경로에서 생성할 수 있습니다.
VPC Console
→ Client VPN Endpoints
→ Create Client VPN endpoint
주요 설정 예시는 다음과 같습니다.
Name tag : client-vpn-demo
Client IPv4 CIDR : 172.16.0.0/22
Server certificate : ACM에 등록된 서버 인증서
Authentication : Mutual Authentication 또는 SAML/AD
Transport protocol : UDP
VPN port : 443
Split tunnel : Enable
VPC ID : 접속할 VPC
Security Group : Client VPN Endpoint용 Security Group
여기서 중요한 값은 Client IPv4 CIDR입니다.
Client CIDR은 VPN에 접속한 사용자에게 할당되는 IP 대역입니다. 예를 들어 172.16.0.0/22로 설정하면, VPN 사용자는 이 대역 안에서 IP를 할당받게 됩니다.
주의할 점은 Client CIDR이 VPC CIDR과 겹치면 안 된다는 것입니다.
예를 들어 VPC가 다음과 같다면,
VPC CIDR : 10.30.0.0/16
Client CIDR은 다음처럼 다른 대역으로 잡아야 합니다.
Client CIDR : 172.16.0.0/22
Client CIDR은 생성 후 변경이 어렵기 때문에 처음 설계할 때 신중하게 정해야 합니다.
3. Target Network Association 설정
Client VPN Endpoint를 생성했다고 바로 접속할 수 있는 것은 아닙니다.
Endpoint를 VPC의 Subnet에 연결해야 합니다. 이 작업을 Target Network Association이라고 합니다.
Client VPN Endpoints
→ 생성한 Endpoint 선택
→ Target network associations
→ Associate target network
→ VPC 선택
→ Subnet 선택
이 단계가 실제로 VPN Endpoint를 VPC에 붙이는 핵심 단계입니다.
가능하면 서로 다른 Availability Zone의 Subnet을 2개 이상 연결하는 것이 좋습니다. 하나의 Subnet만 연결해도 동작은 하지만, 운영 환경에서는 고가용성을 위해 2개 이상의 AZ에 연결하는 구성이 더 적합합니다.
4. Authorization Rule 추가
Target Network를 연결했다고 해서 사용자가 바로 VPC 내부에 접근할 수 있는 것은 아닙니다.
Client VPN에서는 Authorization Rule을 통해 사용자가 어떤 네트워크에 접근할 수 있는지 명시적으로 허용해야 합니다.
예를 들어 VPC 전체 대역에 접근을 허용하려면 다음과 같이 설정합니다.
Destination network to enable access : 10.30.0.0/16
Grant access to : Allow access to all users
Description : Allow access to VPC
운영 환경에서는 모든 사용자에게 VPC 전체 접근을 허용하기보다, 그룹 단위로 접근 범위를 제한하는 것이 좋습니다.
예를 들면 다음과 같이 나눌 수 있습니다.
개발자 그룹 → 개발 VPC만 접근
운영자 그룹 → 운영 VPC 접근
DBA 그룹 → RDS Subnet만 접근
보안 담당자 그룹 → 전체 점검 대역 접근
5. Route Table 설정
Client VPN Endpoint에는 자체 Route Table이 있습니다.
VPN 사용자가 어떤 네트워크로 갈 수 있는지 Route를 통해 결정합니다.
VPC CIDR에 대한 Route는 Target Network Association 과정에서 자동으로 추가되는 경우가 많습니다.
예시는 다음과 같습니다.
Destination : 10.30.0.0/16
Target : 연결된 Subnet
하지만 다른 VPC, 온프레미스 네트워크, 인터넷으로 보내야 하는 트래픽이 있다면 별도 Route를 추가해야 합니다.
예를 들어 VPN 사용자가 인터넷 트래픽까지 AWS를 통해 나가야 한다면 다음 Route가 필요합니다.
Destination : 0.0.0.0/0
Target : 연결된 Subnet
이 경우 Subnet의 Route Table, NAT Gateway, Internet Gateway 구성도 함께 확인해야 합니다.
일반적으로 내부망 접속만 필요하다면 Split Tunnel을 활성화하는 구성이 더 많이 사용됩니다.
Split Tunnel Enabled
→ VPC 내부 트래픽만 VPN으로 전달
→ 일반 인터넷 트래픽은 사용자 PC의 기존 인터넷 경로 사용
6. Security Group 설정
Client VPN 구성에서 가장 자주 막히는 부분이 Security Group입니다.
VPN 연결은 성공했는데 EC2나 RDS에 접속이 안 된다면 대부분 다음 중 하나입니다.
- 대상 리소스의 Security Group에서 VPN 대역을 허용하지 않음
- Client VPN Endpoint의 Security Group을 허용하지 않음
- NACL에서 차단됨
- Authorization Rule이 없음
- Route가 없음
예를 들어 Private EC2에 SSH 접속하려면 EC2 Security Group에 다음과 같은 인바운드 규칙이 필요합니다.
Type : SSH
Port : 22
Source : Client VPN Endpoint Security Group
또는 Client CIDR을 직접 허용할 수도 있습니다.
Type : SSH
Port : 22
Source : 172.16.0.0/22
운영 관점에서는 가능하면 Security Group 참조 방식을 사용하는 것이 관리하기 좋습니다.
7. Client 설정 파일 다운로드
구성이 끝나면 사용자가 접속할 수 있도록 Client 설정 파일을 다운로드해야 합니다.
AWS Console에서는 다음 위치에서 받을 수 있습니다.
Client VPN Endpoints
→ Endpoint 선택
→ Download client configuration
CLI로는 다음 명령을 사용할 수 있습니다.
aws ec2 export-client-vpn-client-configuration \
--client-vpn-endpoint-id cvpn-endpoint-xxxxxxxx \
--output text > client-vpn.ovpn
인증서 기반 Mutual Authentication을 사용하는 경우에는 .ovpn 파일에 클라이언트 인증서와 개인키 정보를 추가해야 합니다.
<cert>
client certificate 내용
</cert>
<key>
client private key 내용
</key>
이 파일을 사용자에게 전달하면 사용자는 AWS VPN Client에서 Import 후 접속할 수 있습니다.
8. 간단한 CLI 구성 예시
아래는 AWS CLI로 Client VPN Endpoint를 생성하는 간단한 예시입니다.
REGION="ap-northeast-2"
PROFILE="my-sso"
VPC_ID="vpc-xxxxxxxx"
SUBNET_ID="subnet-xxxxxxxx"
CLIENT_VPN_SG_ID="sg-xxxxxxxx"
VPC_CIDR="10.30.0.0/16"
CLIENT_CIDR="172.16.0.0/22"
SERVER_CERT_ARN="arn:aws:acm:ap-northeast-2:123456789012:certificate/server-cert-id"
CLIENT_CERT_ARN="arn:aws:acm:ap-northeast-2:123456789012:certificate/client-cert-id"
Client VPN Endpoint 생성:
ENDPOINT_ID=$(aws ec2 create-client-vpn-endpoint \
--region "$REGION" \
--profile "$PROFILE" \
--client-cidr-block "$CLIENT_CIDR" \
--server-certificate-arn "$SERVER_CERT_ARN" \
--authentication-options Type=certificate-authentication,MutualAuthentication={ClientRootCertificateChainArn=$CLIENT_CERT_ARN} \
--connection-log-options Enabled=false \
--transport-protocol udp \
--vpn-port 443 \
--split-tunnel \
--vpc-id "$VPC_ID" \
--security-group-ids "$CLIENT_VPN_SG_ID" \
--query 'ClientVpnEndpointId' \
--output text)
echo "$ENDPOINT_ID"
Target Network Association 추가:
aws ec2 associate-client-vpn-target-network \
--region "$REGION" \
--profile "$PROFILE" \
--client-vpn-endpoint-id "$ENDPOINT_ID" \
--subnet-id "$SUBNET_ID"
VPC 접근 Authorization Rule 추가:
aws ec2 authorize-client-vpn-ingress \
--region "$REGION" \
--profile "$PROFILE" \
--client-vpn-endpoint-id "$ENDPOINT_ID" \
--target-network-cidr "$VPC_CIDR" \
--authorize-all-groups
Client 설정 파일 다운로드:
aws ec2 export-client-vpn-client-configuration \
--region "$REGION" \
--profile "$PROFILE" \
--client-vpn-endpoint-id "$ENDPOINT_ID" \
--output text > client-vpn.ovpn
9. 접속 테스트
VPN 연결 후에는 다음과 같이 테스트할 수 있습니다.
Private EC2 Ping 테스트:
ping 10.30.1.10
Private EC2 SSH 접속:
ssh ec2-user@10.30.1.10
내부 DNS 확인:
nslookup internal-service.local
내부 웹 서비스 확인:
curl http://10.30.1.20
자주 발생하는 문제
VPN 구성 후 접속이 되지 않는다면 다음 항목을 확인해야 합니다.
1. Client VPN Endpoint가 available 상태인지 확인
2. Target Network Association이 정상인지 확인
3. Authorization Rule이 추가되어 있는지 확인
4. Client VPN Route Table에 목적지 Route가 있는지 확인
5. 대상 EC2, RDS, ALB의 Security Group이 VPN 접근을 허용하는지 확인
6. NACL에서 트래픽을 차단하지 않는지 확인
7. Client CIDR과 사용자 로컬 네트워크 대역이 겹치지 않는지 확인
8. DNS 서버 설정이 올바른지 확인
특히 VPN 연결은 성공했는데 내부 리소스 접속이 안 되는 경우에는 Authorization Rule, Route Table, Security Group 세 가지를 우선 확인하는 것이 좋습니다.
Bastion Host와 비교하면?
AWS Client VPN은 Bastion Host와 목적이 완전히 같지는 않지만, 운영자나 개발자의 내부망 접근 용도로는 Bastion Host를 대체할 수 있습니다.
Bastion Host
- 외부 접속용 EC2 필요
- SSH 포트 관리 필요
- OS 패치 필요
- 계정 및 키 관리 필요
- 서버 침해 시 내부망 접근 위험
AWS Client VPN
- 관리형 VPN Endpoint 사용
- 사용자 단위 접근 제어 가능
- Private IP로 직접 접근 가능
- SAML/AD 연동 가능
- Bastion Host 없이 내부망 접근 가능
따라서 “Private EC2에 접속하기 위해 Bastion Host를 둔다”는 목적이라면 Client VPN은 충분히 좋은 대안이 될 수 있습니다.
다만 더 강한 운영 통제와 세션 로깅이 필요하다면 AWS Systems Manager Session Manager도 함께 검토하는 것이 좋습니다.
정리
AWS Client VPN은 외부 사용자가 안전하게 VPC 내부 리소스에 접속할 수 있도록 해주는 관리형 VPN 서비스입니다.
구성의 핵심은 다음 다섯 가지입니다.
1. Client VPN Endpoint 생성
2. VPC Subnet과 Target Network Association
3. Authorization Rule로 접근 대역 허용
4. Route Table로 목적지 네트워크 지정
5. Security Group으로 실제 리소스 접근 허용
Client VPN을 사용하면 Bastion Host 없이도 Private EC2, RDS, 내부 ALB, EKS API Endpoint 등에 접근할 수 있습니다. 특히 재택근무, 외부 운영자 접속, 개발자 내부망 접근 환경에서는 Bastion Host보다 더 깔끔한 접근 구조를 만들 수 있습니다.
운영 환경에서는 단순 인증서 방식보다는 SAML 또는 AD 기반 인증을 사용하고, 사용자 그룹별로 접근 권한을 나누는 구성이 더 안전합니다.
참고 링크:
https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/what-is.html
https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/client-authentication.html
https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-target.html
https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-rule-authorize-add.html
https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-routes.html
'클라우드' 카테고리의 다른 글
| CloudWatch 로그 비용이 부담될 때, OpenSearch를 직접 구성하는 선택은 맞을까? (0) | 2026.06.20 |
|---|---|
| Bastion Host를 대체하는 AWS Systems Manager Session Manager (0) | 2026.06.14 |
| AWS Client VPN이란? 원격 사용자를 AWS VPC에 안전하게 연결하는 관리형 VPN (0) | 2026.06.13 |
| Bastion Host 없이 EC2에 접속하기: AWS Session Manager와 EC2 Instance Connect Endpoint (0) | 2026.06.13 |
| AWS Network Firewall 이해하기: VPC 트래픽을 통제하는 관리형 네트워크 방화벽 (0) | 2026.06.12 |