AWS Client VPNのOSごと接続設定まとめ
サービス概要
AWS Client VPNは、オンプレミスネットワークからAWSリソースに安全にアクセスできるマネージドクライアントベースのVPNサービスです。
- OpenVPNベースの技術を使用し、エンドツーエンドの暗号化を提供
- ACMとの統合により、証明書ベースの認証
- AWS Directory Serviceとの統合により、既存のADを使用した認証
- SSO(SAMLベースのフェデレーション認証)
- Windows, macOS, Linux, iOS, Androidなど多くのプラットフォームをサポート
目的・やりたいこと
AWS Client VPNの接続手順をまとめるため、キャプチャを取る。
以下のクライアントOSからの接続を想定
対象者・ ユースケース
リモートアクセス
対象となる技術
条件(導入にあたっての前提事項)
- 認証方式は今回は相互認証+AD認証
参考URL
注意事項
- クライアントCIDR範囲は、関連付けられたサブネットVPCが配置されているCIDRのローカル、またはクライアントVPNエンドポイントのルートテーブルに手動で追加されたルートと重複できない
- クライアントCIDR範囲のブロックサイズは、/22以上、/12以下
- VPNエンドポイントに関連付けられたサブネットは、同じVPCに存在する必要がある
- 同じAZの複数のサブネットをVPNエンドポイントに関連付けることはできない
- セルフサービスポータルは、相互認証を使用して認証するクライアントでは利用できない
- IPアドレスを使用してVPNエンドポイントに接続することは非推奨
マネージドサービスであるため、DNS名前が解決されるIPアドレスに変更が表示されることがある。指定されたDNS名前を使用してVPNエンドポイントに接続することが推奨 - VPNエンドポイントに登録したクライアント証明書を入れ替えることはできない
- クライアントデバイスのLAN IPアドレス範囲が、以下の標準プライベートIPアドレス範囲内にある必要がある
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.0.0/16
(参考)AWS Client VPNを使用するためのルールとベストプラクティス - AWS Client VPN
概要図
作業の流れ
事前作業
AWS側手順
1.クライアントVPNエンドポイントを作成
VPCダッシュボード > VPN > クライアントVPNエンドポイント > [クライアントVPNエンドポイントを作成]
2.詳細
以下のように設定
3.認証情報
「相互認証」、「AD認証」を選択
サーバー証明書、クライアント証明書は同じものを適当に選択
4.接続ログ記録
念のため接続ログ記録を有効にしておきます。[クライアント接続のログの詳細を有効化]し、CloudWatch Logs のロググループ名を選択
5.その他のパラメータ(オプション)
VPCとSGはいつもの「nozaki-」を選択
残りはデフォルトとし、これで[クライアント VPN エンドポイントを作成]
しばらくPending-associateになるので待ち
6.ターゲットネットワークの関連付け
ターゲットネットワークとは、クライアントVPNエンドポイントに関連付けるVPCサブネットです。
作成後、「ターゲットネットワークの関連付け」タブから[ターゲットネットワークを関連付ける]
nozaki-privateサブネットを選択し、[ターゲットネットワークを関連付ける]
7.承認ルール
承認ルールは、ネットワークにアクセスできるユーザーを制限します。アクセスを許可するADまたはIdPグループを構成します。
次は「承認ルール」タブから[認証ルールを追加]
Domain Usersのみにアクセスを付与
SIDは以下コマンドで確認
PS C:\Windows\system32> (Get-ADGroup -Identity "Domain Users").SID
BinaryLength AccountDomainSid Value
------------ ---------------- -----
28 S-1-5-21-****17 S-1-5-21-****17-513
最後に[認証ルールを追加]
8.ルートテーブル
外部にも出れるようにするため、「ルートテーブル」タブにデフォルトルートを追加
9.クライアント設定をダウンロード
[クライアント設定をダウンロード]し、クライアントに設定する用のVPNクライアント設定ファイル「downloaded-client-config.ovpn」をダウンロード
ちなみに中身はこのようになっています。
client
dev tun
proto udp
remote cvpn-endpoint-****.prod.clientvpn.ap-northeast-1.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MII*********
-----END CERTIFICATE-----
</ca>
auth-user-pass
reneg-sec 0
verify-x509-name server.com name
手順
クライアント側手順
ダウンロードしたクライアント設定ファイル(downloaded-client-config.ovpn)を開き、<ca>CA証明書</ca>
の後にクライアント証明書certと秘密鍵keyを追記
自分は以下のようにベタ書きしましたが、
〜〜〜
</ca>
<cert>
-----BEGIN CERTIFICATE-----
〜
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
〜
-----END PRIVATE KEY-----
</key>
以下のようにパス指定でもいいようです。
cert *クライアント証明書crtファイルのフルパス*.crt
key *証明書の秘密鍵keyファイルのフルパス*.key
以下では、各OSごとに実際に接続してみます。
macOSの場合
(参考)macOSでAWS Client VPN接続を確立する - AWS クライアント VPN
1.https://tunnelblick.net/downloads.html より、好きなバージョンのTunnelblickをダウンロードしてインストール
2.Tunnelblickクライアントアプリケーションを起動し、[設定ファイルがある]を選択
3.[接続先]パネルに設定ファイルをドラッグ&ドロップ
4.[接続先]パネルで3.で入れた設定ファイルを選択し、[接続]
5.ADアカウントでログイン
6.途中、警告が何度か出ますが、全て[了解]でOK
7.接続確認
8.VPNに接続しながらインターネットに出れることも確認
Windowsの場合
(参考)証明書を使用して を確立する AWS Windows でのクライアントVPN接続 - AWS クライアント VPN
1.クライアント証明書と秘密キーを含む .pfx ファイルを作成
まず、pfxファイルを生成するために、クライアント証明書client_certificate.crt、秘密キーclient_private.keyを単独で作成するため、downloaded-client-config.ovpnからそれぞれの該当部分をコピーし、viで貼り付けて作成
作成用のフォルダを作ってその中で作りました。
$ pwd
/Users/nozaki/pki/server.com
$ ls
client_certificate.crt client_private.key
次にこのフォルダでpfx生成コマンドを実行
$ openssl pkcs12 -export -out client_cert.pfx -inkey client_private.key -in client_certificate.crt
Enter Export Password:
Verifying - Enter Export Password:
$ ls
client_cert.pfx client_certificate.crt client_private.key
2..pfxファイルをWindowsの個人証明書ストアにインポート
ファイル名を指定して実行で「certlm.msc」を入れれば一発で証明書MMC スナップインが開きます。client_cert.pfxをダブルクリックするとインポートウィザードが開くので、インポートして完了
3.証明書を開き、サブジェクトを確認
4.OpenVPN設定ファイルを更新し、3.の証明書のサブジェクト「vpn-test.grasys.domain」を使用して証明書を指定
cryptoapicert “SUBJ:vpn-test.grasys.domain”
この時、やの項目は不要なので消しておきましょう。
5.OpenVPNソフトをダウンロード
https://openvpn.net/community-downloads/
今回自分は「OpenVPN-2.6.10-I003-amd64.msi」を入れました。
6.設定ファイルのインポート
7.アイコン右クリックで接続。AD情報を入力
8.このように表示されれば接続成功
ちなみにその時のログはこんな感じでした。
2024-06-19 14:59:08 OpenVPN 2.6.10 [git:v2.6.10/ba0f62fb950c56a0] Windows [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] [DCO] built on May 23 2024
2024-06-19 14:59:08 Windows version 10.0 (Windows 10 or greater), amd64 executable
2024-06-19 14:59:08 library versions: OpenSSL 3.2.1 30 Jan 2024, LZO 2.10
2024-06-19 14:59:08 DCO version: 1.2.1
2024-06-19 14:59:08 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
2024-06-19 14:59:08 Need hold release from management interface, waiting...
2024-06-19 14:59:08 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:50339
2024-06-19 14:59:08 MANAGEMENT: CMD 'state on'
2024-06-19 14:59:08 MANAGEMENT: CMD 'log on all'
2024-06-19 14:59:08 MANAGEMENT: CMD 'echo on all'
2024-06-19 14:59:08 MANAGEMENT: CMD 'bytecount 5'
2024-06-19 14:59:08 MANAGEMENT: CMD 'state'
2024-06-19 14:59:08 MANAGEMENT: CMD 'hold off'
2024-06-19 14:59:08 MANAGEMENT: CMD 'hold release'
2024-06-19 14:59:11 MANAGEMENT: CMD 'username "Auth" "Admin@nozaki.com"'
2024-06-19 14:59:11 MANAGEMENT: CMD 'password [...]'
2024-06-19 14:59:11 MANAGEMENT: >STATE:1718776751,RESOLVE,,,,,,
2024-06-19 14:59:11 TCP/UDP: Preserving recently used remote address: [AF_INET]18.179.225.999:443
2024-06-19 14:59:11 ovpn-dco device [OpenVPN Data Channel Offload] opened
2024-06-19 14:59:11 UDP link local: (not bound)
2024-06-19 14:59:11 UDP link remote: [AF_INET]18.179.225.999:443
2024-06-19 14:59:11 MANAGEMENT: >STATE:1718776751,WAIT,,,,,,
2024-06-19 14:59:11 MANAGEMENT: >STATE:1718776751,AUTH,,,,,,
2024-06-19 14:59:11 TLS: Initial packet from [AF_INET]18.179.225.999:443, sid=14477cb6 183ca10b
2024-06-19 14:59:11 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
2024-06-19 14:59:11 VERIFY OK: depth=1, CN=Easy-RSA CA
2024-06-19 14:59:11 VERIFY KU OK
2024-06-19 14:59:11 Validating certificate extended key usage
2024-06-19 14:59:11 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2024-06-19 14:59:11 VERIFY EKU OK
2024-06-19 14:59:11 VERIFY X509NAME OK: CN=server.com
2024-06-19 14:59:11 VERIFY OK: depth=0, CN=server.com
2024-06-19 14:59:11 Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384, peer certificate: 2048 bits RSA, signature: RSA-SHA256, peer temporary key: 256 bits ECprime256v1
2024-06-19 14:59:11 [server.com] Peer Connection Initiated with [AF_INET]18.179.225.999:443
2024-06-19 14:59:11 TLS: move_session: dest=TM_ACTIVE src=TM_INITIAL reinit_src=1
2024-06-19 14:59:11 TLS: tls_multi_process: initial untrusted session promoted to trusted
2024-06-19 14:59:12 MANAGEMENT: >STATE:1718776752,GET_CONFIG,,,,,,
2024-06-19 14:59:12 SENT CONTROL [server.com]: 'PUSH_REQUEST' (status=1)
2024-06-19 14:59:17 SENT CONTROL [server.com]: 'PUSH_REQUEST' (status=1)
2024-06-19 14:59:17 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,block-outside-dns,dhcp-option DOMAIN-ROUTE .,route-gateway 192.168.0.1,topology subnet,ping 1,ping-restart 20,echo,echo,ifconfig 192.168.0.2 255.255.255.224,peer-id 0,cipher AES-256-GCM'
2024-06-19 14:59:17 Options error: --dhcp-option: unknown option type 'DOMAIN-ROUTE' or missing or unknown parameter
2024-06-19 14:59:17 OPTIONS IMPORT: --ifconfig/up options modified
2024-06-19 14:59:17 OPTIONS IMPORT: route options modified
2024-06-19 14:59:17 OPTIONS IMPORT: route-related options modified
2024-06-19 14:59:17 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
2024-06-19 14:59:17 interactive service msg_channel=680
2024-06-19 14:59:17 ROUTE_GATEWAY 10.0.0.1/255.255.240.0 I=12 HWADDR=06:fa:f5:f9:c9:c7
2024-06-19 14:59:18 MANAGEMENT: >STATE:1718776758,ASSIGN_IP,,192.168.0.2,,,,
2024-06-19 14:59:18 INET address service: add 192.168.0.2/27
2024-06-19 14:59:18 IPv4 MTU set to 1500 on interface 37 using service
2024-06-19 14:59:18 Blocking outside dns using service succeeded.
2024-06-19 14:59:18 C:\Windows\system32\route.exe ADD 18.179.225.999 MASK 255.255.255.255 10.0.0.1
2024-06-19 14:59:18 Route addition via service succeeded
2024-06-19 14:59:18 C:\Windows\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 192.168.0.1
2024-06-19 14:59:18 Route addition via service succeeded
2024-06-19 14:59:18 C:\Windows\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 192.168.0.1
2024-06-19 14:59:18 Route addition via service succeeded
2024-06-19 14:59:18 Initialization Sequence Completed
2024-06-19 14:59:18 MANAGEMENT: >STATE:1718776758,CONNECTED,SUCCESS,192.168.0.2,18.179.225.999,443,,
2024-06-19 14:59:18 Data Channel: cipher 'AES-256-GCM', peer-id: 0
2024-06-19 14:59:18 Timers: ping 1, ping-restart 20
iOSの場合
1.プロファイルのインポート
https://openvpn.net/connect-docs/import-profile.html#import-a-profile-57126
料金
所要時間
2時間