AWS VPNのクライアントVPNをG Suite認証で利用する

AWS VPNのクライアントVPNをG Suite認証で利用するよう設定したところ、いくつかハマったので記録しておきます。

前提条件

  • AWS VPNのクライアントVPN(OpenVPN)を利用する
  • G Suiteでユーザ管理と認証を行う
    • G Suite認証の関係で、VPNクライアントソフトウェアはAWS Client VPN for Desktop
    • 試したときのバージョンは1.3.0
  • クライアントPCはWindowsとmacOS

ネタバレ

AWS Client VPN SAML authentication with Google G-Suite – Vallard's Blog に全部書いてあります。

段取り

  1. G Suite:SAMLアプリを追加
  2. AWS:IAMでIDプロバイダを追加
  3. AWS:AWS VPN ClientVPNエンドポイントを作成
  4. AWS:AWS VPNクライアント設定をダウンロード
  5. 各クライアントにVPNクライアントソフトウェアをインストール・設定

1.G Suite:SAMLアプリを追加

Google Admin( https://admin.google.com/ )のアプリ>SAML アプリで以下のように設定します。

おもしろポイントは、ACSのURLhttp://を受け付けないので、デベロッパーツールを開いた状態で一旦https://で保存して、保存リクエストをNetworkタブから Copy as cURL でコピーして、書き換えて、CLIで実行して、値を上書きするところです。

  • ACSのURL: http://127.0.0.1:35001
  • エンティティID: urn:amazon:webservices:clientvpn
  • 署名付き応答: checked
  • 名前IDの形式: UNSPECIFIED
  • 名前ID:Basic Information>Primary Email
  • SAML属性マッピング
    • First Name => FirstName
    • Last Name => LastName
    • Department => memberOf

作成後にサービスのステータスを変更して、ユーザに対して有効にすること! (忘れるとerror: app_not_enabled_for_userになる)

2.AWS:IAMでIDプロバイダを追加

クライアント VPN エンドポイント - AWS クライアント VPNのとおり。

3.AWS:AWS VPN ClientVPNエンドポイントを作成

クライアント VPN エンドポイント - AWS クライアント VPNのとおり。

クライアント VPN エンドポイントの初期状態は pending-associate です。最初のターゲットネットワークを関連付けて初めて、クライアントがクライアント VPN エンドポイントに接続できるようになります。

作成後、 pending-associate のまま待っていても何もおきないので注意。

ただ、関連付けの作成にすごく時間がかかることがあって、それはそれで忍耐(30分以上待って終わらなかったのでランチへ。戻ったら終わってました)。

4.AWS:AWS VPNクライアント設定をダウンロード

クライアント VPN エンドポイント - AWS クライアント VPNのとおり。

5.各クライアントにVPNクライアントソフトウェアをインストール・設定

クライアント VPN エンドポイント - AWS クライアント VPNのとおり。

Windows10 Proではさっと繋がりました。

macOSでは...

macOSでのAWS VPN設定

おもしろポイントは TLS認証エラー TLS handshake error などのエラーで接続できない場合は ダウンロードしたovpnファイルの<ca>のうち、3番目の証明書を消す ところです。

ちなみに<ca>には4つの証明書が記載されていて、それぞれ上から順番に以下のとおり。

$ ls /tmp/ca[1-4].txt | while read line; do echo "# $line"; openssl x509 -noout -subject -issuer -in $line | perl -pe 's/=/\t=/' ; echo ;done
# /tmp/ca1.txt
subject =C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
issuer  =C = US, O = Amazon, CN = Amazon Root CA 1

# /tmp/ca2.txt
subject =C = US, O = Amazon, CN = Amazon Root CA 1
issuer  =C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2

# /tmp/ca3.txt
subject =C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
issuer  =C = US, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority

# /tmp/ca4.txt
subject =C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
issuer  =C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2

まとめ

OktaとMicrosoft Azure Active Directory (Azure AD)はテスト済みらしいので、いずれかがさっと使えるならそのほうが良いと思います


See also