構成図

理解しやすくなると思うので最終的な状態の構成図を先に見ていただきます!

これは何?

AWS Client VPN の認証にて IAM Identity Center の組み込み IdP を利用したフェデレーション認証の導入をやってみたのでその手順を記載した記事です!

何をゴールとするの?

以下の前提条件のもとで要望を満たすことをゴールとします!

前提条件

認証基盤として組み込み IdP を使った IAM Identity Center をすでに利用している

要望

① AWS Client VPN を使ってクライアント PC から VPC への VPN 接続をして NAT ゲートウェイ経由でインターネット接続をしたい
② AWS Client VPN の認証で IAM Identity Center の組み込み IdP を認証基盤を利用してフェデレーション認証をしたい

構成図でいうとそれぞれ以下にあたります。

登場する主な AWS サービスについて

念のために登場する主な AWS サービスについて簡単に説明します!

IAM Identity Center


公式ドキュメント
docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/what-is.html

昔は AWS Single Sign-On という名前だったサービスです。
AWS Organizations と連携してシングルサインオンを提供するサービスです。

AWS Client VPN


公式ドキュメント
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/what-is.html

クライアント PC に VPN クライアントソフトウェアをインストールして、
AWS リソースに対して VPN 接続を実現します。

手順について

まず手順の説明からさせていただきます。

手順上で省略するもの

IAM Identity Center をすでに利用しいる前提条件であるため以下は完了しているものとして手順は省略します。

  • IAM Identity Center の有効化
  • IAM Identity Center のユーザー作成 (ユーザー名 *****@cloudpack.jp をすでに作成しているものとします)

アカウントの呼称について

IAM Identity Center が有効になっているアカウントを [管理アカウント] と呼称します。
AWS Client VPN が動作しているアカウントを [Client VPN 用アカウント] と呼称します。

手順

ここからが手順になります。

[管理アカウント] IAM Identity Center でアプリケーションの割り当てでアプリケーションを追加

まずは [管理アカウント] で操作をします。

以下のように画面遷移します。
[IAM Identity Center] > [アプリケーション]

[アプリケーションを追加] を押下します。

[カスタム SAML 2.0 アプリケーションの追加] を選択して [次] を押下します。

アプリケーションを設定

[表示名] に任意のアプリケーション表示名を記載します。
[説明] に任意の説明を入力します。(今回は表示名と同じにします。)

IAM Identity Center メタデータ

[IAM Identity Center SAML メタデータファイル] をダウンロードします。
※ 後ほど利用します。

アプリケーションメタデータ

[メタデータ値をマニュアルで入力する] を選択します。
[アプリケーション ACS URL] には以下のように入力します。
http://127.0.0.1:35001
[アプリケーション SAML 対象者] には以下のように入力します。
urn:amazon:webservices:clientvpn
[送信] を押下します。

[管理アカウント] IAM Identity Center 追加したアプリケーションで属性マッピングを編集

以下のように画面遷移します。
[IAM Identity Center] > [アプリケーション]

追加したアプリケーション名を押下します。

[アクション] > [属性マッピングを編集] を押下します。

以下のように設定して[変更の保存] を押下します。

アプリケーションのユーザー属性 この文字列値または IAM Identity Center のユーザー属性にマッピング 形式
Subject ${user:email} emailAddress
memberOf ${user:groups} unspecified

[管理アカウント] IAM Identity Center 追加したアプリケーションでユーザー割り当て

以下のように画面遷移します。
[IAM Identity Center] > [アプリケーション]

追加したアプリケーション名を押下します。

[ユーザーを割り当て] を押下します。

最終的に AWS Client VPN で認証させる IAM Identity Center のユーザーを選択します。
[ユーザーを割り当て] を押下します。

[Client VPN 用アカウント] IAM の ID プロバイダ を設定

※ ここからは [Client VPN 用アカウント] で操作を行います。

以下のように画面遷移します。
[IAM] > [ID プロバイダ]

[プロバイダを追加] を押下します。

プロバイダの設定

プロバイダのタイプ に [SAML] を選択します。
[プロバイダ名] に任意のプロバイダ名を記載します。
[メタデータドキュメント] で先ほどダウンロードした IAM Identity Center SAML メタデータファイル をアップロードします。
[プロバイダを追加] を押下します。

[Client VPN 用アカウント] ACM 証明書リクエスト

Client VPN でサーバー証明書として利用するため ACM (AWS Certificate Manager) で証明書をリクエストします。
今回は DNS 検証でパブリック証明書を取得します。
※ 証明書に使うドメインの DNS レコードが設定できる必要があります。

以下のように画面遷移します。
[AWS Certificate Manager] > [証明書をリクエスト]

[パブリック証明書をリクエスト] を選択して [次へ] を押下

[完全修飾ドメイン名] で今回利用するドメインを入力します。
[DNS 検証] を選択します。
[リクエスト] を押下します。

[Client VPN 用アカウント] ACM 証明書の DNS 検証

リクエストしたパブリック証明書を DNS 検証します。

以下のように画面遷移します。
[AWS Certificate Manager] > [証明書を一覧]

リクエストした証明書の証明書 ID を押下します。

DNS 検証用の CNAME レコードが記載されているので、
CNAME 名と CNAME 値で DNS サーバー CNAME レコードを登録証明書に使うドメインの DNS サーバーで CNAME レコードを登録します。

DNS 検証完了を確認

以下のように画面遷移します。
[AWS Certificate Manager] > [証明書を一覧]
リクエストした証明書のステータスが ”発行済み” になっていることを確認します。

[Client VPN 用アカウント] VPC、サブネット 作成

Client VPN 用アカウントの VPC、サブネット を作成します。
今回は以下の設定にします。

リソース種別 Name CIDR 役割 備考欄
VPC hirata-vpn-vpc 10.0.0.0/16 AWS Client VPN 接続先 VPC
サブネット hirata-vpn-sub-public-a 10.0.1.0/24 パブリックサブネット AZ-A NAT ゲートウェイが配置される
サブネット hirata-vpn-sub-public-c 10.0.2.0/24 パブリックサブネット AZ-C
サブネット hirata-vpn-sub-private-a 10.0.3.0/24 プライベートサブネット AZ-A クライアント VPN エンドポイントのネットワークインターフェースが作成される
サブネット hirata-vpn-sub-private-c 10.0.4.0/24 プライベートサブネット AZ-C クライアント VPN エンドポイントのネットワークインターフェースが作成される

[Client VPN 用アカウント] インターネットゲートウェイ、NAT ゲートウェイ 作成

Client VPN 用アカウントの VPC で インターネットゲートウェイ、NAT ゲートウェイ を作成します。
今回は以下の設定にします。

リソース種別 Name 役割
インターネットゲートウェイ hirata-vpn-igw VPC にアタッチするインターネットゲートウェイ
NAT ゲートウェイ hirata-vpn-natgw AWS Client VPN に接続してからインターネットにアクセスする際に利用する NAT ゲートウェイ

ルートテーブル作成、割り当て

Client VPN 用アカウントの VPC で ルートテーブルを設定します。

プライベートサブネットからインターネットにアクセスする際に NAT ゲートウェイを利用するようにルートテーブルを設定します。

設定の詳細は割愛し、代わりに Resource map を添付いたします。

[Client VPN 用アカウント] クライアント VPN エンドポイント用セキュリティグループ作成

この後に作成するクライアント VPN エンドポイント用のセキュリティグループを作成します。

以下のように画面遷移します。
[VPC] > [セキュリティグループ]

[セキュリティグループを作成] を押下します。

[セキュリティグループ名] に任意のセキュリティグループ名を入力します。
[VPC] で クライアント VPN エンドポイント を作成する VPC を選択します。
[インバウンドルール] は 不要なため設定はしません。 ※ このセキュリティグループはインバウンドルールが無くても AWS Client VPN の利用に影響ありません。
[アウトバウンドルール] はデフォルトのままにします。
[セキュリティグループを作成] を押下します。

注意点

ここで作成するセキュリティグループは以下の画像の通り、ネットワークインターフェイスに適用されるセキュリティグループです。

ここは AWS Client VPN に対して外部から直接接続する場所ではありません。
そのため、このセキュリティグループは AWS Client VPN への外部からの接続を制御するためのものではありません。
では何のために使うのかというと、VPC 内の別のリソースでセキュリティグループを設定するときに、この AWS Client VPN のネットワークインターフェイスに適用したセキュリティグループをソースとして設定することで AWS Client VPN 経由で VPC に接続する際の制御をするために使います。
今回はこういった用途では利用しないのですが、クライアント VPN エンドポイント作成時にセキュリティグループを指定しないと default セキュリティグループが設定されてしまうため、それを避けるために専用のセキュリティグループを作成しておくのが好ましいです。

[Client VPN 用アカウント] クライアント VPN エンドポイント作成

AWS Client VPN を提供するためのクライアント VPN エンドポイントを作成します。

以下のように画面遷移します。
[VPC] > [クライアント VPN エンドポイント]

[クライアント VPN エンドポイントを作成] を押下します。

詳細

[名前タグ] で任意の名前を入力します。
[説明] で任意の説明を入力します。
[クライアント IPv4 CIDR] にはクライアント側に割り当てる IP アドレスを指定します。
※ 注意点として、Client VPN 用アカウント の VPC の CIDR とは別であるという点を意識してください。
※ 今回は 172.16.0.0/22 を指定しました。

認証情報

[サーバー証明書 ARN] で先ほど作成した ACM 証明書を指定します。
認証オプション では [ユーザーベースの認証を使用] を選択します。
ユーザーベースの認証オプションで [フェデレーション認証] を選択します。
[SAML プロバイダー ARN] で先ほど作成した IAM の ID プロバイダ を指定します。

その他のパラメータ

DNS サーバーの設定を行います。今回は
[DNS サーバー 1 IP アドレス] に 1.1.1.1
[DNS サーバー 2 IP アドレス] に 1.0.0.1 と設定しました。
[トランスポートプロトコル] には UDP を選択します。
[スプリットトンネルを有効化] ではチェックを外して無効化します。
※ これを無効化にすると AWS Client VPN に接続した状態ではすべてのトラフィックを AWS Client VPN 経由で通信するようになります。
[VPC ID] では クライアント VPN エンドポイント を作成する VPC を選択します。
[セキュリティグループ ID] では先ほど作成した専用のセキュリティグループを選択します。

※ 特に要件がなければ他の変更点はありません。

[クライアント VPN エンドポイントを作成] を押下します。

[Client VPN 用アカウント] クライアント VPN エンドポイントに承認ルールを追加

以下のように画面遷移します。
[VPC] > [クライアント VPN エンドポイント]

先ほど作成した クライアント VPN エンドポイント を選択します。

[承認ルール] タブを選択します。
[認証ルールを追加] を押下します。

詳細

[アクセスを有効にする送信先ネットワーク] に 0.0.0.0/0 を入力します。
※ 今回は特別に制限したいネットワークはなかったため上記の設定にしております。)
[アクセス権を以下に付与する] では今回は アクセス権をすべてのユーザーに許可する を選択します。
※ ここの設定で認証済みのユーザーの中でも特定のグループユーザーのみに特定のネットワークへの接続を許可することができますが、今回は不要なためこの設定にしております。
[認証ルールを追加] を押下します。

[Client VPN 用アカウント] クライアント VPN エンドポイントでルートを作成

AWS Client VPN に接続したら Client VPN 用アカウント のプライベートサブネットのルートテーブルを使って通信して欲しいのでそのためのルートを設定します。

プライベートサブネット (AZ-A) へのルートを設定

まずは プライベートサブネット (AZ-A) へのルートを設定します。

以下のように画面遷移します。
[VPC] > [クライアント VPN エンドポイント]

先ほど作成した クライアント VPN エンドポイント を選択します。

[ルートテーブル] タブを選択します。
[ルートを作成] を押下します。

[ルート送信先] で 0.0.0.0/0 を入力します。
[ターゲットネットワーク関連付けのサブネット ID] で プライベートサブネット (AZ-A) を指定します。
[ルートを作成] を押下します。

プライベートサブネット (AZ-C) へのルートを設定

以下のように画面遷移します。
[VPC] > [クライアント VPN エンドポイント]

先ほど作成した クライアント VPN エンドポイント を選択します。

[ルートテーブル] タブを選択します。
[ルートを作成] を押下します。

[ルート送信先] で 0.0.0.0/0 を入力します。
[ターゲットネットワーク関連付けのサブネット ID] で プライベートサブネット (AZ-C) を指定します。
[ルートを作成] を押下します。

[Client VPN 用アカウント] クライアント VPN エンドポイントでクライアントソフト用の設定ファイルをダウンロード

この後クライアント PC に専用ソフトウェアをインストールしますが、その際に必要な設定ファイルをダウンロードします。

以下のように画面遷移します。
[VPC] > [クライアント VPN エンドポイント]

先ほど作成した クライアント VPN エンドポイント を選択します。

[クライアント設定をダウンロード] を押下します。

設定ファイルがダウンロードできたことを確認します。

[クライアント PC] AWS Client VPN 専用ソフトウェアをダウンロード、インストールする

ここの操作は AWS Client VPN に接続する クライアント PC で行います。

※ 今回は macOS の前提で進めます。

以下の URL から AWS Client VPN 専用ソフトウェアをダウンロードします。
https://aws.amazon.com/jp/vpn/client-vpn-download/

※ 実際は自身のクライアント PC の OS に合わせてダウンロードしてください。

AWS Client VPN 専用ソフトウェアをダウンロードできたらインストーラーに従ってインストールをします。

[クライアント PC] AWS Client VPN 専用ソフトウェアの設定をする

インストールできたら起動します。

メニューで以下のように遷移します。
[ファイル] > [プロファイルの管理]

[プロファイルを追加] を押下します。

表示名には任意の表示名を指定します。
ここで先ほどダウンロードしたクライアントソフト用の設定ファイルを指定します。
[プロファイルを追加] を押下します。

[クライアント PC] AWS Client VPN 接続の動作確認を行う

AWS Client VPN 専用ソフトウェアを起動した状態で、ソフトウェアの画面で先ほど設定したプロファイルを選択します。
[接続] を押下します。

ブラウザで IAM Identity Center のサインイン画面が表示されますのでサインインを行います。

サインインが正常に処理されたらブラウザでは「認証の詳細を受信、詳細を処理中です。このウィンドウをいつでも閉じることができます。」と表示されます。
AWS Client VPN 専用ソフトウェアで「接続済み」と表示されたことを確認します。

これで AWS Client VPN に接続ができました!

インターネットに接続する際の自分の IP アドレスを確認してみましょう。

今回は https://inet-ip.info/ に接続して確認します。

ここにアクセスしたときに表示される IP アドレスが NAT ゲートウェイの IP アドレスになっていることを確認します。

これにより最初にゴールとしていた以下の要望を満たすことができました!

① AWS Client VPN を使ってクライアント PC から VPC への VPN 接続をして NAT ゲートウェイ経由でインターネット接続をしたい
② AWS Client VPN の認証で IAM Identity Center の組み込み IdP を認証基盤を利用してフェデレーション認証をしたい

まとめ

新たなサービスを利用するときにすでに使っている認証基盤を利用したいという要望は多いと思います。

今回は AWS Client VPN の認証基盤として IAM Identity Center の組み込み IdP を利用しましたが、
他の SAML 対応の認証基盤を利用することもできるはずなので、その際にこの記事が参考になりましたら幸いです。