Simple AD で Active Directory 認証する AWS Client VPN を構築してみた

AWS Client VPN を Active Directory 認証のパターンで構築してみました。お手軽に Simple AD を使います。

コンバンハ、千葉(幸)です。

AWS Client VPN を導入する場合、認証方式には以下の3種があります。

  • 相互認証(証明書ベース)
  • Active Directory 認証(ユーザーベース)
  • SAML ベースのフェデレーション認証(ユーザーベース)

スモールスタートで始めるなら相互認証がお手軽ですが、今回は Active Directory 認証 を用いた方式を試してみます。

また、認証は AWS Directory Service の各種ディレクトリタイプに対応していますが、その中でもできるだけお手軽な Simple AD を使います。

本エントリでは他の構成はセットアップ済みである前提として、 AWS Client VPN のクライアント VPN エンドポイントの作成をメインに取り上げます。

以下のイメージです。

目次

先にまとめ

  • 今回のスコープではクライアント VPN のセットアップとして以下が必要
    • エンドポイントの作成
    • ターゲットネットワークの関連付け
    • 承認ルールの作成
  • クライアント設定時にはダウンロードした設定ファイルに変更を加えずそのままインポートして問題なかった
  • 認証を行う際には「 Client VPN に割り当てる SecuriryGroup 」と「 Simple AD のSecuriryGroup 」間で通信が許可されている必要がなかった

Simple AD のセットアップ

前述の通り、セットアップ済みであるものとします。

これから作成する場合には、以下エントリを参考にしてください。今回接続を試すユーザーには、このエントリの手順で追加したディレクトリユーザーを使用します。

サーバー証明書のセットアップ

こちらも作成および ACM へのインポートが完了しているものとします。

作成方法などについては、以下エントリを参考にしてください。

(今回はクライアント証明書の準備は必要ありません。)

クライアント VPN エンドポイントの作成

さっそく作成していきます。

[ VPC ] -> [ クライアント VPN ] -> [ クライアント VPN エンドポイントの作成 ] と進んでいきます。

各種情報を入力します。

  • 名前タグ(任意)
  • 説明(任意)
  • クライアント IPv4 CIDR
  • サーバー証明書 ARN

認証オプションとして ユーザーベース認証 を選択したのち、 Active Directory 認証を選択します。

ディレクトリ ID には、セットアップ済みの Simple AD の ID を選択します。

その他のパラメーターを入力し、[ クライアントVPN エンドポイントの作成 ] を押下します。

  • カスタム DNS サーバー
  • トランスポートプロトコル
  • スプリットトンネル
  • VPC ID
  • セキュリティグループ ID
    • Client VPN がターゲットネットワークに生成する ENI に設定される
  • VPN ポート

各パラメータの詳細にはついては以下エントリをご参照ください。

カスタム DNS サーバー

スプリットトンネル

クライアント VPN エンドポイントの作成が完了すると、保留中 - 関連づけ ステータスとなります。

ターゲットネットワークの関連づけ

作成した クライアント VPN エンドポイントをターゲットワーク(サブネット)に関連づけます。

(関連づけを行うと課金が発生しますのでご注意ください)

[ 関連付け ] タブより [ 関連付け ] を押下します。

VPC とサブネットを選択し、[ 関連付け ] を押下します。(サブネットの名称は表示されないためガッツで頑張りましょう。)

関連付けが正常に完了することを確認します。筆者の環境では10分弱かかりました。

承認ルールの設定

承認ルールはネットワークへのアクセス許可を与えるファイアウォールルールとして機能します。

アクセスを許可するネットワークを定義します。

[ 認証 ] タブの [ 受信の承認 ] を押下します。

今回は VPC 全体を対象に、すべてのユーザーにアクセスを許可するルールを設定します。

(Active Directory 認証を使用している場合、SID を指定してグループごとに細かく接続可能なネットワークを制御することもできます。)

数分かからない程度でアクティブになります。

クライアントの設定

接続元となるクライアントの設定をしていきます。

まずは設定ファイルをダウンロードします。クライアント VPN エンドポイントを選択して [ クライアント設定のダウンロード ] を押下します。

一部マスクしていますが、内容のイメージは以下の通りです。

client
dev tun
proto udp
remote cvpn-endpoint-0b35xxxxxb7e702ca.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-----
xxxxxxCCAimgAwIBAgIJANvqGKDW6VL7MA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV
BAMMD3Zwbi5leGFtcGxlLmNvbTAeFw0yMDA2MDEwOTA2MDNaFw0zMDA1MzAwOTA2
MDNaMBoxGDAWBgNVBAMMD3Zwbi5leGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAMl+7Gyi0i2A4jxxxxxZYH9mZGcZej58osxmuRZuT1RL
uD7y4vo8E/qiApFW6d9COHxewj35gjjEqpGp3w0UsqMsSyaf4BmrW7sQc45O691v
YlKbq9WOXYMUrHDKSgjyry4GXMJ30YH7a3ahrtKp72oXC6aPB/Bn8CvHUtB77ckH
Mu2yINgA1BrwdM4hB5/twxSGRdICaSbh1F9KHkcv1tD9rq5CHoVYqiOHhvcdjutz
5WAG4Exo++q4IIPBaH2agy/geXwXYqsUhkCYD2ZNw5/JxhVgp0ZJu6aUqQxxxxxx
mOHKMZqDCAs4pKxxxxxvyJKPvgIk4DUBQqLFjj6FejUCAwEAAaOBiTCBhjAdBgNV
HQ4EFgQU1C7vJVC/12J0p3rEHosdfU6fbiUwSgYDVR0jBEMwQYAU1C7vJVC/12J0
p3rEHosdfU6fbiWhHqQcMBoxGDAWBgNVBAMMD3Zwbi5leGFtcGxlLmNvbYIJANvq
GKDW6VL7MAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUA
A4IBAQCTkKiNgAD27DCrgxNTaa6DfF93/10EJQP2hPSTjFkkluB2SCbB/tsfVxFu
GM8M08M/P0DfKa4tJxxQ1LPHWxEreKIdvGRh2XIXJP8AO/D8MCEPNGrf6ppSeMlG
xM3ez97S5D3nOlecS3Dcn6PWeIzRP/Vtkc1EFR+QqNrMAbo5iGxR75bEgpQjli0v
Dcsb8ZxWl4PUN1JoafhqogwAVBEZF2q87BrRd+xxxxxubY5GpYM+eZyN+C3Dnjj2
5anjVIFyNGhh4CPVdi5MTbvHBFMpu/5G2kbktwYTfWS7HqWQtJBHtCEBhGQzm4jo
ZMYKEohgNg6nYCic2mxbh0xxxxxx
-----END CERTIFICATE-----

</ca>
auth-user-pass

reneg-sec 0

相互認証を使用する際にはクライアント証明書の情報の追記が必要ですが、今回は特に手を加えません。

また、クライアントによってはクライアント VPN エンドポイントの DNS 名の前にランダムな文字列の付与が必要なようですが、手元の環境では特に問題が発生しませんでした。

今回は公式の AWS Client VPN クライアントを使用して試します。

すでに別の環境用にセットアップ済みのプロファイルがあるため、今回の環境用に追加を行います。

[ ファイル ] -> [ プロファイルを管理 ] を選択し……

[ プロファイルを追加 ] を選択。

プロファイルの表示名と、先の手順でダウンロードした設定ファイルを指定して追加をすればOKです。

早速追加したプロファイルで接続を試みると、ユーザー名とパスワードの入力画面が開きます。

SimpleAD に登録済みのディレクトリユーザーの情報を入力して [ OK ] を押下します。

問題なく接続が完了しました。

接続状況は、クライアント VPN エンドポイントの [ 接続 ] タブから確認することもできます。

これで動作確認ができました!

終わりに

SimpleAD で AD 認証を行う AWS Client VPN の構成を試してみました。

実は上記で試した段階では、クライアント VPN エンドポイント作成時に指定した SecuriryGroup はインバウンドもアウトバウンドも閉じた状態でした。

その状態でも SimpleAD との認証が問題なく行われるのが少し意外でした。どういうロジックかはわからないので気になります。

(もちろん クライアント VPN エンドポイントを通じて VPC 上のリソースにアクセスする際には、アクセス先に応じてアウトバウンドルールを追加する必要があります。)

今回試したことと同じような内容のエントリは過去にもあるのですが、自分の手で試したかったので満足しました。参考になれば幸いです。

以上、千葉(幸)がお送りしました。

あわせて読みたい