🌊

AWSサービスのみでAWS Client VPN のMFAを有効化する

2023/09/21に公開

はじめに

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を有効化する。

アプリケーションの作成

  1. IAM Identity Centerから「有効にする」を選択。
    IAM Identity Center には AWS Organizations が必要というメッセージが表示された場合は、「AWS組織を作成する」を選択する。

  2. 「アプリケーションの割り当て」の「アプリケーション」から、「アプリケーションの追加」を選択する。

  3. 「カスタム SAML 2.0 アプリケーションの追加」を選択。

  4. SAML アプリケーションに名前を設定し、IAM Identity Center SAML メタデータファイルをダウンロードする。

  5. アプリケーションACS URL にhttp://127.0.0.1:35001を入力し、アプリケーションSAML対象者にurn:amazon:webservices:clientvpnを入力する。その後、「送信」を選択する。

  6. アプリケーションが作成されたことを確認する。

属性マッピングの設定

  1. 作成されたアプリケーションの「アクション」から「属性マッピングを編集」を選択する。

  2. 以下のように設定し、「変更の保存」を選択する。

  • 1 つ目の属性の Subject は、値を ${user:email} 、形式 は emailAddress を指定する。
  • 2 つ目の属性は memberOf とし、値を ${user:groups} 、 形式 は unspecified を指定する。

グループの作成

  1. 「グループ」を選択し、「グループを作成」を選択する。

  2. グループ名をVPN-User-Groupとし、「グループを作成」を選択する。

ユーザーの作成

  1. 「ユーザー」を選択し、「ユーザーを追加」を選択する。

  2. 必要なユーザー情報を入力し、ページ下部の「次へ」を選択する。

  • 入力したメールアドレス宛にInvitation to join AWS IAM Identity Center (successor to AWS Single Sign-On)という件名のメールが送信されます。メール内のAccept Invitaionをクリックすると、以下画面に遷移する。パスワードを設定し、アカウントを有効化する。
  1. 先ほど作成したグループにユーザーを割り当てる。

  2. ユーザーの確認と追加 にて「ユーザーを追加」を選択する。

  3. ユーザーが作成されたことを確認する。

アプリケーションへの割り当て

作成したグループをアプリケーションに割り当てる。

  1. 作成したアプリケーションを選択し、「ユーザーを割り当て」を選択する。

  2. 「グループ」タブから、作成したグループを選択し、「ユーザーを割り当て」を選択する。

MFAの有効化

  1. IAM Identity Centerから、左側のナビゲーションにて「設定」を選択する。

  2. 「認証」タブから、多要素認証の箇所の「設定」を選択する。

  3. MFAが促されるよう、「サインインごと (常時オン)」とし、ユーザーログイン時にMFAデバイスの設定ができるよう「登録された MFA デバイスをユーザーが持っていない場合」を選択する。

  4. 「変更を保存」を選択する。

IAM ID プロバイダの作成

  1. AWS コンソール の IAM ページから「IDプロバイダ」を選択し、「プロバイダを追加」を選択する。

  2. プロバイダの種類は「SAML」を選択し、プロバイダ名には任意の名前を入力する。メタデータドキュメントには、IAM Identity centerでのアプリケーション作成時にダウンロードしたメタデータファイルをアップロードする。ファイルアップロード後に、「プロバイダを追加」を選択する。

AWS Client VPN の設定

サーバー証明書の作成

クライアント VPN エンドポイントを作成するには、使用する認証のタイプに関係なく、AWS Certificate Manager でサーバー証明書のプロビジョニングを行う必要がある。そのため、以下の手順を参考に、サーバー証明書を作成する。
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/mutual.html

コマンド抜粋

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エンドポイントの作成

  1. AWS コンソールの VPC ページから「クライアントVPNエンドポイント」を選択し、「クライアント VPN エンドポイントを作成」を選択する。

  1. 名前タグに任意の名前を入力し、今回は、クライアント IPv4 CIDRに、「192.168.0.0/22」を入力する。
  2. サーバー証明書ARNには、先ほど作成したサーバー証明書を選択する。
  3. 認証オプションには、「ユーザーベースの認証を使用」を選択し、ユーザーベースの認証オプションには、「フェデレーション認証」を選択する。SAML プロバイダー ARNと、セルフサービス SAML プロバイダー ARN - オプションには、先ほど作成したプロバイダーのARNを選択する。
  4. その他のパラメータ - オプションでは、「スプリットトンネルを有効化」とし、VPC ID とセキュリティグループ ID の欄に、エンドポイントとするVPC とそのセキュリティグループの IDを入力する。
  5. 「クライアントVPNエンドポイントを作成」を選択する。

スプリットトンネルについて

スプリットトンネルを有効化した場合、VPC向けのトラフィックのみがVPNを通過するように設定される。すなわち、スプリットトンネルを有効化すると、インターネット向けのトラフィックはVPNトンネルを通過しない。
もし、すべてのトラフィックをVPNを通過するようにする場合は、スプリットトンネルを無効化する必要がある。

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

  1. 作成したエンドポイントを選択し、「ターゲットネットワークの関連付ける」を選択する。

  2. 関連付ける VPC とサブネットを選択し、「関連付け」を選択する。

承認ルールの設定

  1. 作成したエンドポイントを選択し、「承認ルール」を選択し、「認証ルールを追加」を選択する。

  2. アクセスを有効にする送信先ネットワークには、許可したいサブネットのCIDR表記を入力する。

  3. 「アクセス権を特定のアクセスグループのユーザーに許可する」を選択する。

  4. アクセスグループ IDには、IAM Identity Centerのグループから今回作成したグループを選択し、その中にあるグループ IDをコピーし、入力する。

  5. 「認証ルールを追加」を選択する。

クライアントからの接続

(注)筆者の環境はmacOSです。

  1. AWS Client VPN用のソフトウェアを下記リンクからダウンロードし、必要に応じてセットアップする。
  1. 作成したエンドポイントを選択し、右上の「クライアント設定のダウンロード」を選択する。

  2. AWS VPN Clientを起動して、「ファイル」から、「プロファイルの管理」を選択する。

  3. 表示名にこのVPN接続として区別するための任意の名前を入力し、VPN 設定ファイルに先ほどダウンロードした設定ファイルを選択する。

  4. 「接続」を選択すると、ブラウザが立ち上がり、ログイン画面に遷移する。

  • 初回接続時は、ユーザー名とパスワードを入力後、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