はじめに
AWS Verified Access は VPN なしで組織内のアプリケーションやリソースにリモートアクセスできるサービスです。リモートアクセスで利便性も提供しながら、ユーザーの認証情報に基づいて、アクセスの可否をきめ細やかに管理ができ、セキュリティ体制を強化できます。
構成図でいうとこんな感じです。
- 接続元端末に Connectivity Client をインストールする
- 接続元端末で、SAML ベースの Identity Provider と連携して認証
- 事前に設定したセキュリティルールに基づいて、VPC 上のリソースにリモートアクセスが可能
Client VPN でも似たようなことが出来ますが、AWS Verified Access は細やかなアクセスポリシーを定義できるので、柔軟にセキュリティを向上できます。また、料金も Client VPN と比べて安価です。
- Client VPN : 1 時間当たりの接続料金が USD 0.05
- AWS Verified Access : 1 時間当たりの接続料金が USD 0.001 (1 個のエンドポイントあたり、100 回の無償枠も存在)
また、AWS Verified Access で TCP 接続をサポートしたので、より利用の範囲が広がりました。今回の記事では、TCP 接続の構築手順を確認します。
Verified Access Instance
Verified Access Instance を作成します。Identity Provider や Logging などの管理を行うための概念です。
適当に名前などを入れて、Create を押します。
こんな感じで Verified Access Instance を作成できました。
Verified trust provider
Verified trust provider を設定していきます。Identity Provider との連携を行う設定です。
以下のような Identity Provider と連携可能です。今回は、AWS 内で実現するために、IAM Identity Center を利用します。
- IAM Identity Center
- Entra ID
- Google Workspace
- Okta
- Crowdstrike
IAM Identity Center を選択します。
作成されました
Verified Access Instance と紐づけをします。
Attach
Verified Access group
Verified Access group を設定します。これは、誰がアクセスできるのかを定義するポリシー設定です。ポリシーの例を参考にしながら設定しましょう。
今回は、手順をシンプルにするため、AWS Identity Center で認証したユーザーはすべて許可します。
指定した文字列
permit(principal,action,resource)
when {
true
};
Verified Access endpoint
Verified Access endpoint を作成します。名前を指定します。
Endpoint は、4 つの Type から選択できます。今回は特定の EC2 へ SSH 接続をしたいので、Network interface としますが、Network CIDR も便利そうです。
- Load Balancer : ALB や NLB から選択
- Network interface : 既存の ENI から選択
- Network CIDR : VPC 内に存在する CIDR を指定して、幅広に接続を提供
- Amazon RDS : RDS へ接続
Endpoint を作成しました。
Connectivity Client を接続元にインストール
Connectivity Client を接続元にインストールします。Windows と Mac が提供されています。以下の URL からインストーラーをダウンロードできます。
Verified Access Instance から設定ファイルを Export
作成した Endpoint のステータスが Active になったあとに、その Endpoint に接続するための設定を Export します。
ClientConfig-vai-0d25a84f343f84fe3.json という名前の JSON ファイルがダウンロードされました。
{
"Version": "1.0",
"VerifiedAccessInstanceId": "vai-0d25a84f343f84fe3",
"Region": "ap-northeast-1",
"DeviceTrustProviders": [],
"UserTrustProvider": {
"Type": "iam-identity-center",
"Scopes": "verified_access:application:connect",
"Issuer": "https://identitycenter.amazonaws.com/ssoins-77580b0c9ef863cb",
"PkceEnabled": true
},
"OpenVpnConfigurations": [
{
"Config": "Y2xpZW50CmRldiB0dW4K secret BuYW1l",
"Routes": [
{
"Cidr": "2406:da14:1428:900::/57"
}
]
}
]
}
Windows の場合は以下のディレクトリに JSON ファイルを格納します。
C:\ProgramData\Connectivity Client
に配置
前提ソフトのインストール
以下の AWS Document に記載されている WebView2 をインストールします。
https://docs.aws.amazon.com/verified-access/latest/ug/connectivity-client.html
Connectivity Client から接続
Connectivity Client から接続をします。
サインインを押します。
ブラウザが立ち上がり、Identity Center の画面からログインをします。
パスワードを入れます。
Allow access を押します。
ログインに成功しました。
Status が接続中になっています。
接続済みに変わりました。
SSH 接続テスト
Verified Access で作成した Endpoint の詳細画面を開き、Endpoint domain を確認します。
itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com
このドメインは、dig コマンドで名前解決をすると IPv6 アドレスで解決されている様子が確認できます。
2406:da14:1428:900::40dc:b8d9
> dig itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com AAAA
; <<>> DiG 9.18.33 <<>> itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33841
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com. IN AAAA
;; ANSWER SECTION:
itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com. 237 IN AAAA 2406:da14:1428:900::40dc:b8d9
;; Query time: 0 msec
;; SERVER: 10.0.0.2#53(10.0.0.2) (UDP)
;; WHEN: Thu Mar 06 13:56:45 UTC 2025
;; MSG SIZE rcvd: 141
IPv4 は名前解決されていません。
> dig itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com A
; <<>> DiG 9.18.33 <<>> itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45411
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com. IN A
;; AUTHORITY SECTION:
prod.verified-access.ap-northeast-1.amazonaws.com. 900 IN SOA ns-251.awsdns-31.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
;; Query time: 0 msec
;; SERVER: 10.0.0.2#53(10.0.0.2) (UDP)
;; WHEN: Thu Mar 06 13:57:05 UTC 2025
;; MSG SIZE rcvd: 246
接続元の Windows 端末で、Verified Access 用の Interface が自動的に作成されています。
>ipconfig /all
省略
Unknown adapter AWS Verified Access TAP-Windows Adapter #4434:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : AWS Verified Access TAP-Windows Adapter V9 for VPN
Physical Address. . . . . . . . . : 00-FF-6D-5F-03-C1
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IPv6 Address. . . . . . . . . . . : 2406:da14:1428:980::5002(Preferred)
Link-local IPv6 Address . . . . . : fe80::8480:1598:3308:f348%72(Preferred)
Autoconfiguration IPv4 Address. . : 169.254.12.76(Tentative)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 1208024941
DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-2E-01-77-B3-60-18-95-03-56-E2
DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBIOS over Tcpip. . . . . . . . : Enabled
ROUTE PRINT 6 で IPv6 のルートを確認してみます。
- Verified Access の Endpoint Domain は、
2406:da14:1428:900::40dc:b8d9に名前解決されている -
2406:da14:1428:900::40dc:b8d9はルートテーブル上、2406:da14:1428:900::/57のネットワーク範囲に含まれる -
2406:da14:1428:900::40dc:b8d9宛の通信は、インターフェース (AWS Verified Access TAP-Windows Adapter) を通ってリンクローカルアドレスfe80::8をネクストホップとして転送される -
fe80::8は VPN 接続が確立された時にのみ到達可能なアドレスで、VPNトンネルを通じてトラフィックを転送するための「入り口」として機能します。
>ROUTE PRINT -6
IPv6 Route Table
===========================================================================
Active Routes:
If Metric Network Destination Gateway
1 331 ::1/128 On-link
72 281 2406:da14:1428:900::/57 fe80::8
72 25 2406:da14:1428:980::5000/116
fe80::8
72 281 2406:da14:1428:980::5002/128
On-link
11 281 fe80::/64 On-link
27 281 fe80::/64 On-link
63 271 fe80::/64 On-link
72 281 fe80::/64 On-link
1 331 ff00::/8 On-link
11 281 ff00::/8 On-link
27 281 ff00::/8 On-link
63 271 ff00::/8 On-link
72 281 ff00::/8 On-link
===========================================================================
では実際に SSH を行ってみます。宛先を Verified Access の Endpoint Domain を指定します。
ssh ec2-user@itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com
すると、元々の EC2 インスタンスに無事に SSH 接続できました。
>ssh ec2-user@itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Thu Mar 6 14:09:00 2025 from 10.0.2.116
Reverting to default Node version
Now using node v18.18.2 (npm v10.9.0)
Linux stepbox2023 6.1.129-138.220.amzn2023.x86_64 x86_64
14:09:41 up 4:03, 2 users, load average: 0.00, 0.00, 0.00
ec2-user@stepbox2023 ~
付録 : ログ出力
Verified Access でログを出力する設定ができます。
CloudWatch Logs に出力してみます。
こんな感じのログでした。
- どのユーザーが、どの宛先に通信したのかがわかります
{
"activity_id": "1",
"activity_name": "Assign Privileges",
"category_name": "Audit Activity",
"category_uid": "3",
"class_name": "Authorization",
"class_uid": "3003",
"data": {
"endpoint_type": "network-interface",
"protocol": "tcp",
"access_path": "public",
"idp": {
"name": "IdentityCenter",
"uid": "vatp-0268c7f307ace7590"
},
"authorizations": [
{
"decision": "Allow",
"policy": {
"name": "inline"
}
}
]
},
"device": {
"ip": "xxx.xxx.xxx.xxx", (接続元の Global IP)
"port": 64683,
"type": "Unknown",
"type_id": 0
},
"duration": "1739529712491",
"end_time": "1741270983250",
"time": "1741270983250",
"metadata": {
"logged_time": 1741270983250,
"version": "1.0.0-rc.2",
"product": {
"name": "Verified Access",
"vendor_name": "AWS"
}
},
"severity": "Informational",
"severity_id": "1",
"start_time": "1741270759",
"status_code": "200",
"status_id": "1",
"status": "Success",
"type_uid": "300301",
"type_name": "Authorization: Assign Privileges",
"count": 1,
"dst_endpoint": {
"ip": "10.0.2.35",
"port": 22
},
"privileges": [
"vae-0818a4b1cbed80b83"
],
"user": {
"email_addr": "masked address",
"name": "ssouser01",
"uid": "95671c316d-7a6a2ff4-4eb0-414a-9447-a1decc0c7c1e"
}
}
検証を通じてわかったこと
-
AWS Verified Access の非 HTTPS を利用するクライアント側では、Connectivity Client のインストールが必要となる。
-
Windows と Mac 向けに提供されている。
-
Connectivity Client の前提条件として、クライアント側で IPv6 の有効化が必要となっている。クライアントが接続しているネットワークとしては IPv4 でも問題ないが、クライアントの OS 内部として IPv6 を扱う必要がある。なお、Windows Vista 以降、Mac OS X 10.3 Panther 以降ではデフォルトで IPv6 が有効化されているらしいので、基本的には問題はないはず。
-
Endpoint は、4 つの Type が存在する
- Load Balancer
- VPC Internal の NLB か ALB を選択
- Network interface
- 特定の ENI を指定することで、その ENI に対して Verified Access を利用した接続を許可する
- Network CIDR
- VPC 内の指定した CIDR に対して接続を許可
- Amazon RDS
- Load Balancer
参考 URL





























