AWSのPrivate SubnetにあるEC2、RDS、内部ALB、EKS API Endpointなどに接続するには、以前はBastion Hostを多く使用していました。しかし、Bastion Hostは外部から接続可能なサーバーを直接運用する必要があり、SSHポート管理、アカウント管理、セキュリティパッチ、アクセスログ管理など、運用負担があります。
このような場合に利用できる代替手段の一つがAWS Client VPNです。
AWS Client VPNは、ユーザーのノートPCや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 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 등과 연동
- 운영 환경에 적합
実習環境では、証明書ベースの相互認証が最も単純です。しかし、運用環境であれば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. ターゲットネットワーク関連付けの設定
Client VPN Endpointを作成しただけでは、すぐに接続できるわけではありません。
EndpointをVPCのSubnetに接続する必要があります。この作業をターゲットネットワーク関連付け(Target Network Association)と呼びます。
Client VPN Endpoints
→ 생성한 Endpoint 선택
→ Target network associations
→ Associate target network
→ VPC 선택
→ Subnet 선택
このステップが、実際にVPN EndpointをVPCにアタッチする核心的なステップです。
可能であれば、異なるアベイラビリティゾーンのSubnetを2つ以上接続することをお勧めします。1つのSubnetだけでも動作しますが、運用環境では高可用性のために2つ以上のAZに接続する構成がより適切です。
4. 承認ルールの追加
ターゲットネットワークを関連付けたからといって、ユーザーがすぐに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. ルートテーブルの設定
Client VPN Endpointには独自のルートテーブルがあります。
VPNユーザーがどのネットワークに到達できるかは、ルートによって決定されます。
VPC CIDRへのルートは、ターゲットネットワーク関連付けの過程で自動的に追加されることが多いです。
例は以下の通りです。
Destination : 10.30.0.0/16
Target : 연결된 Subnet
しかし、他のVPC、オンプレミスネットワーク、インターネットに送信する必要があるトラフィックがある場合は、別途ルートを追加する必要があります。
例えば、VPNユーザーがインターネットトラフィックもAWSを介して出る必要がある場合、次のルートが必要です。
Destination : 0.0.0.0/0
Target : 연결된 Subnet
この場合、Subnetのルートテーブル、NAT Gateway、Internet Gatewayの構成も合わせて確認する必要があります。
一般的に、内部ネットワーク接続のみが必要な場合は、Split Tunnelを有効にする構成がより多く使用されます。
Split Tunnel Enabled
→ VPC 내부 트래픽만 VPN으로 전달
→ 일반 인터넷 트래픽은 사용자 PC의 기존 인터넷 경로 사용
6. セキュリティグループの設定
Client VPN構成で最も頻繁に詰まる部分がセキュリティグループです。
VPN接続は成功したがEC2やRDSに接続できない場合、ほとんどが次のいずれかです。
- 대상 리소스의 Security Group에서 VPN 대역을 허용하지 않음
- Client VPN Endpoint의 Security Group을 허용하지 않음
- NACL에서 차단됨
- Authorization Rule이 없음
- Route가 없음
例えば、Private EC2にSSH接続するには、EC2セキュリティグループに次のようなインバウンドルールが必要です。
Type : SSH
Port : 22
Source : Client VPN Endpoint Security Group
または、Client CIDRを直接許可することもできます。
Type : SSH
Port : 22
Source : 172.16.0.0/22
運用観点からは、可能であればセキュリティグループ参照方式を使用する方が管理しやすいです。
7. クライアント設定ファイルのダウンロード
構成が完了したら、ユーザーが接続できるようにクライアント設定ファイルをダウンロードする必要があります。
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
証明書ベースの相互認証を使用する場合は、.ovpnファイルにクライアント証明書と秘密鍵の情報を追加する必要があります。
<cert>
client certificate 내용
</cert>
<key>
client private key 내용
</key>
このファイルをユーザーに渡すと、ユーザーはAWS VPN Clientでインポート後に接続できます。
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"
ターゲットネットワーク関連付けの追加:
aws ec2 associate-client-vpn-target-network
--region "$REGION"
--profile "$PROFILE"
--client-vpn-endpoint-id "$ENDPOINT_ID"
--subnet-id "$SUBNET_ID"
VPCアクセス承認ルールの追加:
aws ec2 authorize-client-vpn-ingress
--region "$REGION"
--profile "$PROFILE"
--client-vpn-endpoint-id "$ENDPOINT_ID"
--target-network-cidr "$VPC_CIDR"
--authorize-all-groups
クライアント設定ファイルのダウンロード:
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接続は成功したが内部リソースに接続できない場合は、承認ルール、ルートテーブル、セキュリティグループの3つを優先的に確認することをお勧めします。
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サービスです。
構成の核心は次の5つです。
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ベースの認証を使用し、ユーザーグループごとにアクセス権限を分ける構成がより安全です。
参考リンク:
コメントを残す