こんにちは、近藤(りょう)です!
AWS Client VPNを相互認証(証明書ベース)で導入することは、スタートアップとしては簡単です。しかし、証明書の管理や作成には専用の環境が必要となり開発ベンダーごとに証明書を発行する必要がある場合、運用が煩雑になる可能性があります。証明書の数が増えると、更新作業の負担も大きくなります。
そこで、今回は AWS Client VPNでフェデレーション認証を行い、IAM Identity Centerを用いて認証を一元管理する方法をご紹介します。この方法で、証明書の管理や運用の手間を軽減し、効率的に認証管理を行うことができます。
- 今回の構成
- 前提
- 事前作業
- IAM Identity Center 設定
- IAM IDプロバイダ 設定
- クライアント VPN エンドポイント設定
- VPNクライアント設定
- 【セルフサービスポータルの場合】VPNクライアント設定
- VPNクライアント接続
- まとめ
今回の構成
Client VPN アカウント:AWS Client VPN の接続で利用
管理アカウント:IAM Identity Center の認証で利用
以降、アカウント毎で作業項目が異なりますので適宜読替えて実施お願いします。
前提
管理アカウント:
IAM Identity Centerの有効化が完了していること
下記、手順を参照のこと
https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/get-set-up-for-idc.html
管理アカウント:
IAM Identity Centerのユーザとグループの作成が完了していること
グループ:任意
ユーザ:任意 ※作成したグループに所属
下記、手順を参照のこと
デフォルトの IAM アイデンティティセンターディレクトリを使用してユーザーアクセスを設定する - AWS IAM Identity Center
Client VPN アカウント:
VPC,サブネット,NATGWの作成が完了していること
※EC2への接続確認を行いたい方は任意でEC2のセットアップお願いします。
事前作業
Client VPN アカウント:サーバ証明書作成(easy-rsa)
以下、CloudShell で実行します。
- OpenVPN easy-rsa リポジトリのクローン
git clone https://github.com/OpenVPN/easy-rsa.git
- PKI 環境を初期化
cd easy-rsa/easyrsa3 ./easyrsa init-pki
- 有効期限を100年に変更するためのvarsファイル作成
vi pki/vars --- 設定内容(ここから) --- set_var EASYRSA_CA_EXPIRE 36500 set_var EASYRSA_CERT_EXPIRE 36500 set_var EASYRSA_CRL_DAYS 36500 --- 設定内容(ここまで) --- ※36500日(365日✕100年)
- 認証局 (CA) を構築
./easyrsa build-ca nopass --- 以降は、対話型で進める --- 入力項目・・・★ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: ★空Enter Notice ------ CA creation complete. Your new CA certificate is at: * /home/cloudshell-user/easy-rsa/easyrsa3/pki/ca.crt
- サーバー証明書とキーを生成
※SANsとCNは適切なものに置き換えてください。
./easyrsa --san=DNS:server build-server-full server nopass
- ACM登録
certificateとprivate-keyは適切なファイル名に置き換えてください。
mkdir ~/custom_folder/ cp pki/ca.crt ~/custom_folder/ cp pki/issued/server.crt ~/custom_folder/ cp pki/private/server.key ~/custom_folder/ cd ~/custom_folder/ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt
- ACM登録確認
Client VPN アカウント:クライアント VPN エンドポイント用 ロググループ作成
- CloudWatchにアクセスして「ロググループを作成」を押下する。
以下、設定内容
* ロググループ名:<任意> * 保持期間の設定:1週間(7日) * ログクラス:スタンダード * KMS キー ARN - オプション:ー(空欄)
- 作成したロググループで「ログストリームを作成」を押下する。
以下、設定内容
* ログストリーム名:<任意>
Client VPN アカウント:クライアント VPN エンドポイント用 SG作成
- セキュリティグループを作成する
以下、SG設定内容
* セキュリティグループ名:<任意> * 説明 :<任意> * VPC :作成したVPCを指定 * インバウンドルール * 設定なし * アウトバウンドルール * タイプ:すべてのトラフィック * 送信先:カスタム 0.0.0.0/0
インバウンドトラフィックは クライアント VPNエンドポイント の内部メカニズムによって制御されているようで 特定のインバウンドルールを設定しなくても通信が許可されます。
利用用途としては VPC 内の別のリソースでこのセキュリティグループをソースとして許可する時になると思います。
クライアント VPN エンドポイントでセキュリティグループを指定しない場合はデフォルトのセキュリティグループが付与されてしまうので管理といった面で作成することをお勧めします。
IAM Identity Center 設定
管理アカウント:カスタム SAML 2.0 アプリケーション設定
本設定項目は クライアントVPN用 と セルフサービスポータル用のカスタム SAML 2.0 アプリケーション設定の両方を記載しています。
- 「IAM Identity Center」-「アプリケーション」の「アプリケーションを作成」を押下する。
- 以下、項目を選択して「次へ」を押下する。
* 設定するアプリケーションがある * SAML 2.0
- 以下、項目を入力する。
項目 | クライアントVPN用 | セルフサービスポータル用 |
---|---|---|
表示名 | <任意> | <任意> |
説明 | <任意> | <任意> |
- IAM Identity Center メタデータをダウンロードする。
- 以下、項目を入力して「送信」を押下する。
項目 | クライアントVPN用 | セルフサービスポータル用 |
---|---|---|
アプリケーションメタデータ | メタデータ値をマニュアルで入力する | メタデータ値をマニュアルで入力する |
アプリケーションACS URL | http://127.0.0.1:35001 | https://self-service.clientvpn.amazonaws.com/api/auth/sso/saml |
アプリケーションSAML対象者 | urn:amazon:webservices:clientvpn | urn:amazon:webservices:clientvpn |
クライアントVPN用 設定値 参考
AWS SSO を用いた AWS Client VPN の認証と承認 | Amazon Web Services ブログ
- 引用
- Application ACS URL には http://127.0.0.1:35001 を入力し、Application SAML audience には urn:amazon:webservices:clientvpn を入力して、“Save changes“ をクリックします。
セルフサービスポータル用 設定値 参考
シングルサインオン (SAML 2.0 ベースのフェデレーション認証) - AWS クライアント VPN
- 引用
- セルフサービスポータルのサポート
- クライアント VPN エンドポイントでセルフサービスポータルを有効にした場合、ユーザーは SAML ベースの IdP 認証情報を使用してポータルにログインします。
- IdP が複数の Assertion Consumer Service (ACS) URL をサポートしている場合は、次の ACS URL をアプリに追加します。
- クライアント VPN エンドポイントでセルフサービスポータルを有効にした場合、ユーザーは SAML ベースの IdP 認証情報を使用してポータルにログインします。
- セルフサービスポータルのサポート
- 作成したアプリケーションの「属性マッピングを編集」を押下する。
- 以下、項目を入力して「設定の保存」を押下する。
アプリケーションのユーザー属性 | この文字列値またはIAM Identity Centerのユーザー属性にマッピング | 形式 |
---|---|---|
Subject | ${user:email} | emailAddress |
memberOf | ${user:groups} | unspecified |
- 作成したアプリケーションの「ユーザーとグループを割り当てる」を押下する。
- IAM Identity Center で事前に作成したグループを選択して「ユーザーを割り当て」を押下する。
IAM IDプロバイダ 設定
Client VPN アカウント:IAM IDプロバイダ設定
本設定項目は クライアントVPN用 と セルフサービスポータル用のIAM IDプロバイダ 設定の両方を記載しています。
- 「IAM」- 「ID プロバイダ」から「プロバイダを追加」を押下する。
- 以下、項目を入力して「プロバイダを追加」を押下する。
項目 | クライアントVPN用 | セルフサービスポータル用 |
---|---|---|
プロバイダのタイプ | SAML | SAML |
プロバイダ名 | <任意> | <任意> |
メタデータドキュメント | IAM Identity Center メタデータ クライアントVPN用 をアップロード | IAM Identity Center メタデータ セルフサービスポータル用 をアップロード |
クライアント VPN エンドポイント設定
Client VPN アカウント:クライアント VPN エンドポイント 設定
セルフサービスポータルを使用する場合は「セルフサービスポータルを有効化」と「セルフサービスSAMLプロバイダーARN」の設定してください。
「セルフサービスSAMLプロバイダーARN」の指定を忘れる変更することができない(※)ので再作成となります。
※:クライアント VPN エンドポイントを変更
Client VPN endpoints - AWS Client VPN
- 引用
- 注記
- Client VPN エンドポイントへの変更 (証明書失効リスト (CRL) の変更を含む) は、Client VPN サービスによってリクエストが受け入れられてから 4 時間以内に有効になります。
- クライアント VPN エンドポイントの作成後に、クライアントの IPv4 CIDR 範囲、認証オプション、クライアント証明書またはトランスポートプロトコルを変更することはできません。
- 注記
- 「VPC」-「クライアント VPN エンドポイント」から「クライアント VPN エンドポイントを作成」を押下する。
- 以下、項目を入力して「クライアント VPN エンドポイントを作成」を押下する。
詳細
項目 | 設定値 | 備考 |
---|---|---|
名前タグ | <任意> | |
説明 | <任意> | |
クライアント CIDR | <任意> | CIDR ブロックは、/12 より大きい、または /22 より小さいサイズにすることはできません。 |
認証情報
項目 | 設定値 | 備考 |
---|---|---|
サーバー証明書 ARN | 作成してACMに登録したサーバ証明書 | |
認証オプション | ■ユーザーベースの認証を使用 | |
ユーザーベースの認証オプション | ■フェデレーション認証 | |
SAMLプロバイダー ARN | 作成した クライアントVPN用 IDプロバイダ | |
セルフサービス SAML プロバイダー ARN | セルフサービスポータル用 |
接続ログ記録
項目 | 設定値 | 備考 |
---|---|---|
クライアント接続のログの詳細を有効化 | ■ | |
CloudWatch Logs のロググループ名 | 作成したロググループ名 | |
CloudWatch Logs のログストリーム名 - オプション | 作成したログストリーム名 |
クライアント接続ハンドラー
項目 | 設定値 | 備考 |
---|---|---|
クライアント接続ハンドラー ARN | □ |
その他
項目 | 設定値 | 備考 |
---|---|---|
DNS サーバー 1 IP アドレス | ー(空欄) | |
DNS サーバー 2 IP アドレス | ー(空欄) | |
トランスポートプロトコル | UDP | |
スプリットトンネルを有効化 | ■ | |
VPC ID | ClientVPN接続 対象のVPC | |
セキュリティグループ ID | 作成したSG | |
VPN ポート | 443 | |
セルフサービスポータルを有効化 | ■ | |
セッションタイムアウト (時間) | 24 | |
クライアントログインバナーを有効化 | □ |
タグ
項目 | 設定値 | 備考 |
---|---|---|
Name | デフォルトのまま | 自動反映 |
- 作成したクライアント VPN エンドポイントの「ターゲットネットワークの関連付け」の「ターゲットネットワークを関連付ける」を押下する。
- 「VPC」と「関連付けるサブネット」を選択して「ターゲットネットワークを関連付ける」を押下する。
- 作成したクライアント VPN エンドポイントの「認証ルール」の「認証ルールを追加」を押下する。
- 以下、項目を入力して「認証ルールを追加」を押下する。
項目 | 設定値 |
---|---|
アクセスを有効にする送信先ネットワーク | 0.0.0.0/0 |
アクセス権を以下に付与する | ■アクセス権を特定のアクセスグループのユーザーに許可する |
アクセスグループ ID | クライアントVPNを行うIAM Identity Center のグループID |
説明 | <任意> |
VPNクライアント設定
作業PC:VPNクライアントインストール
- VPNクライアント(AWS公式)をダウンロードしてインストール
以下、VPNクライアントをダウンロードしてインストールしてください。
AWS Client VPN のダウンロード | Amazon Web Services
Client VPN アカウント:クライアント VPN クライアント設定 ダウンロード
- 作成したクライアント VPN エンドポイントを選択して「クライアント設定をダウンロード」を押下する。
- 「クライアント設定をダウンロード」を押下する。
作業PC:VPNクライアントプロファイル設定
- 先ほど取得したクライアント設定をVPNクライアントのプロファイルに設定してください。
【セルフサービスポータルの場合】VPNクライアント設定
作業PC:VPNクライアントインストール/クライアント VPN クライアント設定 ダウンロード
- セルフサービスポータルへアクセスする。
クライアントVPNエンドポイントの「詳細」-「セルフサービスポータル URL」にアクセスしてください。
※IAM Identity Centerのユーザログインが必用です。- VPNクライアントインストール/クライアント VPN クライアント設定 ダウンロード する
対象のファイルをダウンロードする。
作業PC:VPNクライアントプロファイル設定
- 先ほど取得したクライアント設定をVPNクライアントのプロファイルに設定してください。
VPNクライアント接続
作業PC:VPNクライアント接続
- VPNクライアントを起動後に対象プロファイルの選択して「接続」を押下する。
- ユーザー名を入力して「次へ」を押下する。
- パスワードを入力して「サインイン」を押下する。
- 追加の検証を実施して「サインイン」を押下する。
以下、画面が表示されます。
- VPNクライアントを確認すると「接続済み」と表示されています。
まとめ
IAM Identity CenterのユーザーがAWS Client VPN接続を利用することで、相互認証と比較して証明書の管理や運用の手間を軽減し、効率的に認証管理を行うことができます。また、セルフサービスポータルを有効にすることで、VPNクライアントおよびクライアント情報の配布が簡素化されました。
AWS Client VPN以外にも他のサービスと連携することが可能ですので、今回の取り組みをきっかけに認証管理を充実させることができればと思いました。