AWSサービスのみでAWS Client VPN のMFAを有効化する
はじめに
AWS環境へのVPN接続について検討する機会があり、ついでにMFAの有効化についても検討しました。
本記事では、AWSのサービスのみを用いて、MFAを有効化したVPN接続を実現する方法を、備忘録的に整理したいと思います。
AWSリソース
使用するAWSリソースは以下の通り。
- IAM Identity center(AWS SSOの後継サービス)
- AWS Client VPN
概要図はこちらです。
IAM Identity centerの設定
IAM Identity CenterにてAWS Client VPN用のカスタムアプリケーションを作成し、MFAを有効化する。
アプリケーションの作成
-
IAM Identity Centerから「有効にする」を選択。
IAM Identity Center には AWS Organizations が必要
というメッセージが表示された場合は、「AWS組織を作成する」を選択する。
-
「アプリケーションの割り当て」の「アプリケーション」から、「アプリケーションの追加」を選択する。
-
「カスタム SAML 2.0 アプリケーションの追加」を選択。
-
SAML アプリケーションに名前を設定し、
IAM Identity Center SAML メタデータファイル
をダウンロードする。
-
アプリケーションACS URL に
http://127.0.0.1:35001
を入力し、アプリケーションSAML対象者にurn:amazon:webservices:clientvpn
を入力する。その後、「送信」を選択する。
-
アプリケーションが作成されたことを確認する。
属性マッピングの設定
-
作成されたアプリケーションの「アクション」から「属性マッピングを編集」を選択する。
-
以下のように設定し、「変更の保存」を選択する。
- 1 つ目の属性の Subject は、値を ${user:email} 、形式 は emailAddress を指定する。
- 2 つ目の属性は memberOf とし、値を ${user:groups} 、 形式 は unspecified を指定する。
グループの作成
-
「グループ」を選択し、「グループを作成」を選択する。
-
グループ名を
VPN-User-Group
とし、「グループを作成」を選択する。
ユーザーの作成
-
「ユーザー」を選択し、「ユーザーを追加」を選択する。
-
必要なユーザー情報を入力し、ページ下部の「次へ」を選択する。
- 入力したメールアドレス宛に
Invitation to join AWS IAM Identity Center (successor to AWS Single Sign-On)
という件名のメールが送信されます。メール内のAccept Invitaion
をクリックすると、以下画面に遷移する。パスワードを設定し、アカウントを有効化する。
-
先ほど作成したグループにユーザーを割り当てる。
-
ユーザーの確認と追加 にて「ユーザーを追加」を選択する。
-
ユーザーが作成されたことを確認する。
アプリケーションへの割り当て
作成したグループをアプリケーションに割り当てる。
-
作成したアプリケーションを選択し、「ユーザーを割り当て」を選択する。
-
「グループ」タブから、作成したグループを選択し、「ユーザーを割り当て」を選択する。
MFAの有効化
-
IAM Identity Centerから、左側のナビゲーションにて「設定」を選択する。
-
「認証」タブから、多要素認証の箇所の「設定」を選択する。
-
MFAが促されるよう、「サインインごと (常時オン)」とし、ユーザーログイン時にMFAデバイスの設定ができるよう「登録された MFA デバイスをユーザーが持っていない場合」を選択する。
-
「変更を保存」を選択する。
IAM ID プロバイダの作成
-
AWS コンソール の IAM ページから「IDプロバイダ」を選択し、「プロバイダを追加」を選択する。
-
プロバイダの種類は「SAML」を選択し、プロバイダ名には任意の名前を入力する。メタデータドキュメントには、IAM Identity centerでのアプリケーション作成時にダウンロードしたメタデータファイルをアップロードする。ファイルアップロード後に、「プロバイダを追加」を選択する。
AWS Client VPN の設定
サーバー証明書の作成
クライアント VPN エンドポイントを作成するには、使用する認証のタイプに関係なく、AWS Certificate Manager でサーバー証明書のプロビジョニングを行う必要がある。そのため、以下の手順を参考に、サーバー証明書を作成する。
コマンド抜粋
sudo yum install git
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass
mkdir ~/custom_folder/
cp pki/ca.crt ~/custom_folder/
cp pki/issued/server.crt ~/custom_folder/
cp pki/private/server.key ~/custom_folder/
cp pki/issued/client1.domain.tld.crt ~/custom_folder
cp pki/private/client1.domain.tld.key ~/custom_folder/
cd ~/custom_folder/
aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt
aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt
aws acm import-certificate
コマンド実行時にYou must specify a region. You can also configure your region by running "aws configure".
と表示された場合は、リージョンの指定をすること。
クライアントVPNエンドポイントの作成
- AWS コンソールの VPC ページから「クライアントVPNエンドポイント」を選択し、「クライアント VPN エンドポイントを作成」を選択する。
- 名前タグに任意の名前を入力し、今回は、クライアント IPv4 CIDRに、「192.168.0.0/22」を入力する。
- サーバー証明書ARNには、先ほど作成したサーバー証明書を選択する。
- 認証オプションには、「ユーザーベースの認証を使用」を選択し、ユーザーベースの認証オプションには、「フェデレーション認証」を選択する。SAML プロバイダー ARNと、セルフサービス SAML プロバイダー ARN - オプションには、先ほど作成したプロバイダーのARNを選択する。
- その他のパラメータ - オプションでは、「スプリットトンネルを有効化」とし、VPC ID とセキュリティグループ ID の欄に、エンドポイントとするVPC とそのセキュリティグループの IDを入力する。
- 「クライアントVPNエンドポイントを作成」を選択する。
スプリットトンネルについて
スプリットトンネルを有効化した場合、VPC向けのトラフィックのみがVPNを通過するように設定される。すなわち、スプリットトンネルを有効化すると、インターネット向けのトラフィックはVPNトンネルを通過しない。
もし、すべてのトラフィックをVPNを通過するようにする場合は、スプリットトンネルを無効化する必要がある。
ターゲットネットワークの関連付け
-
作成したエンドポイントを選択し、「ターゲットネットワークの関連付ける」を選択する。
-
関連付ける VPC とサブネットを選択し、「関連付け」を選択する。
承認ルールの設定
-
作成したエンドポイントを選択し、「承認ルール」を選択し、「認証ルールを追加」を選択する。
-
アクセスを有効にする送信先ネットワークには、許可したいサブネットのCIDR表記を入力する。
-
「アクセス権を特定のアクセスグループのユーザーに許可する」を選択する。
-
アクセスグループ IDには、IAM Identity Centerのグループから今回作成したグループを選択し、その中にある
グループ ID
をコピーし、入力する。 -
「認証ルールを追加」を選択する。
クライアントからの接続
(注)筆者の環境はmacOSです。
- AWS Client VPN用のソフトウェアを下記リンクからダウンロードし、必要に応じてセットアップする。
-
作成したエンドポイントを選択し、右上の「クライアント設定のダウンロード」を選択する。
-
AWS VPN Clientを起動して、「ファイル」から、「プロファイルの管理」を選択する。
-
表示名にこのVPN接続として区別するための任意の名前を入力し、VPN 設定ファイルに先ほどダウンロードした設定ファイルを選択する。
-
「接続」を選択すると、ブラウザが立ち上がり、ログイン画面に遷移する。
-
初回接続時は、ユーザー名とパスワードを入力後、MFAデバイスの設定が求められる。
-
今回は、認証アプリを設定し、必要な設定を行い、認証を完了させる。
-
以下が表示されれば登録完了。
-
AWS VPN Clientと起動したブラウザで以下の画面となれば、VPN接続が完了している。※エラーが発生した場合は、再度実施すれば成功するはずです。(筆者が実施した際は、MFAデバイスの登録に時間がかかったためか、MFAデバイス登録後にエラーが発生しました。)
まとめ
本記事では、AWS ClientとIAM Identify Centerを組み合わせ、AWSリソースのみでVPN接続時にMFA認証を有効化する方法について記載しました。 AWS Client VPNは、こちらでEC2インスタンスなどを用意してVPNサーバーを構築する必要がないため、管理としては楽ですが、料金としては比較的高め、、、と考えているため、必要に応じて、AWS SSM Session Managerの利用等も考慮するべきであると思います。
Discussion