0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Verified Access で非 HTTP 通信を行う

Posted at

はじめに

AWS Verified Access は VPN なしで組織内のアプリケーションやリソースにリモートアクセスできるサービスです。リモートアクセスで利便性も提供しながら、ユーザーの認証情報に基づいて、アクセスの可否をきめ細やかに管理ができ、セキュリティ体制を強化できます。

構成図でいうとこんな感じです。

  • 接続元端末に Connectivity Client をインストールする
  • 接続元端末で、SAML ベースの Identity Provider と連携して認証
  • 事前に設定したセキュリティルールに基づいて、VPC 上のリソースにリモートアクセスが可能

image-20250503113345879.png

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 などの管理を行うための概念です。

image-20250306185540836.png

適当に名前などを入れて、Create を押します。

image-20250306185735571.png

こんな感じで Verified Access Instance を作成できました。

image-20250306185910473.png

Verified trust provider

Verified trust provider を設定していきます。Identity Provider との連携を行う設定です。

以下のような Identity Provider と連携可能です。今回は、AWS 内で実現するために、IAM Identity Center を利用します。

  • IAM Identity Center
  • Entra ID
  • Google Workspace
  • Okta
  • Crowdstrike

image-20250306202908819.png

IAM Identity Center を選択します。

image-20250306202957269.png

作成されました

image-20250306203037616.png

Verified Access Instance と紐づけをします。

image-20250306203949856.png

Attach

image-20250306204010292.png

Verified Access group

Verified Access group を設定します。これは、誰がアクセスできるのかを定義するポリシー設定です。ポリシーの例を参考にしながら設定しましょう。

image-20250306202106416.png

今回は、手順をシンプルにするため、AWS Identity Center で認証したユーザーはすべて許可します。

image-20250306202645421.png

指定した文字列

permit(principal,action,resource)
when {
    true
}; 

Verified Access endpoint

Verified Access endpoint を作成します。名前を指定します。

image-20250306212044999.png

Endpoint は、4 つの Type から選択できます。今回は特定の EC2 へ SSH 接続をしたいので、Network interface としますが、Network CIDR も便利そうです。

  • Load Balancer : ALB や NLB から選択
  • Network interface : 既存の ENI から選択
  • Network CIDR : VPC 内に存在する CIDR を指定して、幅広に接続を提供
  • Amazon RDS : RDS へ接続

image-20250306212210808.png

Endpoint を作成しました。

image-20250306212248273.png

Connectivity Client を接続元にインストール

Connectivity Client を接続元にインストールします。Windows と Mac が提供されています。以下の URL からインストーラーをダウンロードできます。

image-20250306212915496.png

Verified Access Instance から設定ファイルを Export

作成した Endpoint のステータスが Active になったあとに、その Endpoint に接続するための設定を Export します。

image-20250306213123876.png

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

に配置

image-20250306224812719.png

Connectivity Client から接続

Connectivity Client から接続をします。

image-20250306224833183.png

サインインを押します。

image-20250306224903379.png

ブラウザが立ち上がり、Identity Center の画面からログインをします。

image-20250306224914286.png

パスワードを入れます。

image-20250306224926821.png

Allow access を押します。

image-20250306224944537.png

ログインに成功しました。

image-20250306224948291.png

Status が接続中になっています。

image-20250306224957554.png

接続済みに変わりました。

image-20250306225249821.png

SSH 接続テスト

Verified Access で作成した Endpoint の詳細画面を開き、Endpoint domain を確認します。

itismydomain.vai-0d25a84f343f84fe3.prod.verified-access.ap-northeast-1.amazonaws.com

image-20250306225629324.png

このドメインは、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 のルートを確認してみます。

  1. Verified Access の Endpoint Domain は、2406:da14:1428:900::40dc:b8d9 に名前解決されている
  2. 2406:da14:1428:900::40dc:b8d9 はルートテーブル上、2406:da14:1428:900::/57 のネットワーク範囲に含まれる
  3. 2406:da14:1428:900::40dc:b8d9 宛の通信は、インターフェース (AWS Verified Access TAP-Windows Adapter) を通ってリンクローカルアドレス fe80::8 をネクストホップとして転送される
  4. 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 でログを出力する設定ができます。

image-20250306231208321.png

CloudWatch Logs に出力してみます。

image-20250306231306492.png

こんな感じのログでした。

  • どのユーザーが、どの宛先に通信したのかがわかります
{
    "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

image-20250306211848072.png

参考 URL

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?