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 に全部書いてあります。
段取り
- G Suite:SAMLアプリを追加
- AWS:IAMでIDプロバイダを追加
- AWS:AWS VPN ClientVPNエンドポイントを作成
- AWS:AWS VPNクライアント設定をダウンロード
- 各クライアントにVPNクライアントソフトウェアをインストール・設定
1.G Suite:SAMLアプリを追加
Google Admin( https://admin.google.com/ )のアプリ>SAML アプリで以下のように設定します。
おもしろポイントは、ACSのURLはhttp://
を受け付けないので、デベロッパーツールを開いた状態で一旦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
- First Name =>
作成後にサービスのステータスを変更して、ユーザに対して有効にすること!
(忘れると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)はテスト済みらしいので、いずれかがさっと使えるならそのほうが良いと思います