Amazon Web Services ブログ
AWS SSO を用いた AWS Client VPN の認証と承認
この記事は Using AWS SSO with AWS Client VPN for authentication and authorization を翻訳したものです。
AWS Client VPN は、ユーザーがどこからでも AWS 環境に接続できるようにするシンプルなソリューションであり、この機能は、昨年からほぼすべての組織にとって重要視されるようになっています。 シングルサインオン (SSO) は、あらゆる規模の組織で広く使用されており、単一のIDプロバイダ (IdP) からのエンタープライズアプリケーションおよび IT サービスへのユーザーのアクセスを認証および承認します。
多くの組織は Microsoft Active Directory または AzureAD を使用していますが、一部の組織はこれらの IdP を使用しておらず、より単純なソリューションを望んでいます。 そのような際に、AWS SSO が役立つ場合があります。 AWS SSO は、組み込みの IdP を備えたシングルサインオン機能を提供します。つまり、ユーザー ID を管理し、すべての SSO を単一のマネージドサービスで提供できます。 この記事では、AWS Client VPN の ID プロバイダとして AWS SSO を活用することに焦点を当てます。
AWS Client VPN は、AWS SSO を利用してユーザーを認証し、ネットワークの 1 つ以上のセグメントへのアクセスをユーザーに対して承認します。 この記事では、AWS Client VPN で AWS SSO を利用し、特定のネットワークサブネットへのアクセスを承認するプロセスの概要を説明します。
以前、AWS Client VPN を Okta や AzureAD などの他の IdP と統合するブログ記事がありましたが、この記事では、AWS のお客様が無料で利用できる AWS SSO の使用に焦点を当てています。 AWS SSO には組み込みの IdP がありますが、Microsoft Active Directory などの外部 IdP を使用することもできます。 今回は、組み込みの IdP を使用します。
ソリューションの概要
この記事では、AWS Client VPN を利用して、データベース管理者が DB のサブネットにあるサービスと通信するための VPN 接続を承認し、EC2 アプリケーションサーバーが稼働しているサブネットへの接続は承認しないような使い方を紹介します。AWS SSO のユーザーグループのグループ ID (GID) に基づいた受信の承認により、ユーザーのメンバーシップに基づいて異なるサブネットへの承認が可能です。図 1 は、このようなアーキテクチャを示しています。
上記を実現するための前提条件は以下の通りです。
- AWS アカウントが必要です。
- AWS SSO が前提条件となる AWS Organizations が必要です。AWSアカウントは、1 つの Organization にしか所属できません。
- AWS Client VPN を構成する際に AWS Certificate Manager の証明書を使用します。
AWS SSO のデプロイと設定
このセクションでは、AWS SSO を設定し、AWS Client VPN 用の新しいカスタム SAML 2.0 アプリケーションを作成します。 また、ネットワーク接続の承認の機能を確認するためにユーザーグループを1つ作成します。
- AWS コンソールで、AWS SSO のページに移動します。 コンソールページの上部にある検索バーに “sso” と入力します。 図2を参照してください。
- “Enable AWS SSO” ボタンをクリックします。
- しばらくすると “You have successfully enabled AWS SSO” というメッセージが表示されます。
- 次に、新しい SSO アプリケーションを作成する必要があります。 ページの左側のメニューで、“Applications” に移動し、“Add a new application” ボタンをクリックしてから、“Add a custom SAML 2.0 application” をクリックします。 図 4 を参照してください。
- SAML アプリケーションに名前とわかりやすい説明を付けます。
AWS SSO metadata とApplication properties の項目は全てデフォルトのままで構いません。メタデータファイルがないので、Application metadata の項目は手動で追加します。これを行うには、Browse ボタンの下のリンクをクリックします。以下の図 6 のような構成になるはずです。
- “AWS SSO SAML metadata file” の項目の “Download” をクリックして、メタデータファイルをダウンロードします。 IAM ID プロバイダを作成するときにこのファイルが必要になります。
- Application ACS URL には
http://127.0.0.1:35001
を入力し、Application SAML audience にはurn:amazon:webservices:clientvpn
を入力して、“Save changes“ をクリックします。 - 次に、属性マッピングを設定する必要があります。 この場合、必要なマッピングは 2 つだけです。 1 つ目の属性の
Subject
は、値を${user:email}
、Format はemailAddress
を指定します。 2 つ目の属性はmemberOf
とし、値を${user:groups}
、 Format はunspecified
を指定します。memberOf
属性は、ユーザーがどのグループに属しているかを AWS SSO が渡す方法であるため、重要です。AWS SSO は、この情報をグループ ID (GID) として渡すことに注意してください。これは、後で AWS Client VPN のエンドポイントを設定するときに使用します。 属性マッピング構成は、以下の図 7 のようになります。
- 次に、2 つのグループを作成する必要があります。 この例では、
VPN_DB_Admins
というグループとVPN_DevOps
という別のグループを作成します。 グループを作成するには、左側のメニューの “Groups” リンクをクリックして、“Create group” ボタンをクリックします。 各グループに名前とわかりやすい説明を付ける必要があります。 2 つのグループに対してこれを行います。 2 つのグループを作成し、それらを SSO アプリケーションに割り当てると、次の図 8 のようになります。 - グループを作成したら、
VPN_DB_Admins
グループにユーザーを割り当てます。このグループは、後でテストするために使用します。 AWS SSO でグループを作成する方法の詳細については、ドキュメントを参照してください。 - Groups” ページで、
VPN_DB_Admins
グループをクリックし、“Add users” ボタンをクリックして、グループに追加するユーザーを選択します。 - ユーザーを追加したら、“Group ID” をメモします。 長い GUID 文字列になります。 このグループ ID は、後で Client VPN エンドポイント認証を作成するときに必要になります。
- グループ内のすべてのユーザーが VPN にアクセスできるようにするには、グループを SSO アプリケーションに割り当てる必要があります。
IAM ID プロバイダの作成
IAM ID プロバイダは、ID プロバイダ (この場合はAWS SSO) と IAM の間のギャップを埋めるもので、ユーザーに適切な IAM 権限を割り当てるのに役立ちます。以下の手順に従うと、構成は以下の図 9 のようになります。
- AWS コンソール の IAM ページに移動し、左側のナビゲーションカラムで “Identity providers” をクリックします。
- “Add provider” をクリックします。
- Provier type として “SAML” を選択し、プロバイダに名前を付けます。
- SSO アプリケーションの作成時にダウンロードしたメタデータファイルをアップロードします。
- “Add provider” をクリックします。
- 作成したプロバイダ名をクリックし、ARN を確認しておきます。図 10 を参照してください。
AWS Client VPN の設定
次のステップは、AWS Client VPN を設定することです。 ACM ですでにプロビジョニングされている証明書の ARN が必要になります。 また、VPN クライアントに IP アドレスを割り当てるために使用できる /12 〜 /22 の範囲の CIDR を選択する必要があります。
- AWS コンソールの VPC ページに移動します。
- 下の図 10 に示すように、”VIRTUAL PRIVATE NETWORK(VPN)” というセクションが見つかるまで左側のメニューを下にスクロールし、”Client VPN Endpoints” をクリックします。
- “Create Client VPN Endpoint” をクリックします。
- 任意 – Name Tag :
AWS Client VPN
- 任意 – Description :
Something useful that describes your VPN Client Endpoint
- Client IPv4 CIDR :
192.168.0.0/22
- Server certificate ARN :
ドロップダウンからACM証明書
を選択 - Authentication Options :
Use User-based authentication
を選択Federated authentication
を選択
- SAML provider ARN : 作成した IAM の ARN を指定。例 :
arn:aws:iam::00112233445566:saml-provider/SSOVPN
- Do you want to log the details on client connections ? :
No
- Do you want to enable Client Connect Handler ? :
No
- DNS Server 1 IP address :
1.1.1.1
- DNS Server 1 IP address :
1.0.0.1
- Transport Protocol :
UDP
- Enable split-tunnel :
Check
- VPC ID : VPC の ID を指定します。例 :
vpc-xyz12300
VPC の作成方法については、チュートリアルを参照して、パブリックおよびプライベートサブネットの両方を持つ VPC を作成してください。 - Security Group IDs : VPN エンドポイントに関連付けるセキュリティグループを選択
- VPN Port :
443
構成は、上記の図 12 のようになります。 上記の設定について、いくつか注意したいことがあります。この構成では設定で “Enable split-tunnel” を選択しました。これは、VPC 向けのトラフィックのみが VPN トンネルを通過するという意味で、インターネットトラフィックなどの他のすべてのトラフィックは、トンネルを通過しません。多くの場合、これは VPN を介した全体的なトラフィックを削減するために推奨されますが、場合によっては、すべてのトラフィックがトンネルを通過するようにすることをお勧めします。たとえば、インターネットに転送する前に仮想アプライアンスまたはサービスを使って、インターネットトラフィックを検査する必要がある場合です。このような場合は、“Enable split-tunnel” オプションのチェックを外します。
最後に、この記事では、パブリック DNS サーバー 1.1.1.1 と 1.0.0.1 を使用しています。これは、パブリックインターネットアドレスを解決するだけなので、特定の用途では有用ではないかもしれません。そういった場合は、独自の DNS サーバーに変更する必要があります。
VPN エンドポイントを VPC に関連付け、承認ルールを作成する
VPN クライアントエンドポイントを使用する前に、VPC に関連付ける必要があります。また、承認ルールを作成する必要があります。 理想的には、高可用性を実現するために、VPN エンドポイント用に VPC との関連付けを 2 つ別々のアベイラビリティーゾーンに作成します。関連付けの構成は簡単です。以下の手順に従い構成を以下の図 13 と比較してください。
- VPC コンソールで、“Client VPN Endpoints” リンクをクリックし、設定したエンドポイントを選択します。
- 関連付けを作成するエンドポイントを選択します。
- 下のウィンドウで “Associations” タブを選択します。
- “Associate” ボタンをクリックします。
- 関連付けを作成する VPC を選択します。
- 関連付けるサブネットを選択します。上記の図 1 のアーキテクチャを参考にした場合、Client VPN エンドポイントの関連付けに専用のプライベートサブネットを選択します。
- “Associate” ボタンをクリックします。(利用可能になるまで 2 〜 5 分かかる場合があります)
- 実稼働環境では、高可用性のために少なくとも 2 つのサブネットを関連付けることが理想的です。
上記の図 14 は、サブネットを Client VPN エンドポイントに関連付けるプロセスを示しています。 関連付けを作成したら、次に承認ルールを作成する必要があります。 承認ルールは、VPN クライアントがアクセスできるネットワークのセグメントを管理します。 AWS SSO を利用しているため、データベースを含むネットワークセグメントへデータベース管理者のアクセスを許可するには、AWS SSO のグループ ID が必要になります。 構成は、以下の図 15 のようになります。
- Client VPN コンソールページに移動し、“Authorization” タブを選択します。
- “Authorize Ingress” ボタンをクリックします。
- Destination network to enable :
192.168.10.0/24
(許可したいサブネットのCIDR表記) - Grant access to :
Allow access to users in a specific access group
を選択 - Access group ID :
AWS SSO コンソールから取得したグループ ID の GUID
(上記で作成したVPN_DB_Admins の Group ID) - Description :
DBA Access to database subnets
- “Add authorization rule” をクリックします。
VPN クライアントの設定
- まず、環境に応じた Client VPN ソフトウェアをダウンロードします。現在、Windows, macOS, Ubuntu Linux がサポートされています。
- ダウンロード後、インストーラーを実行するだけで、簡単にクライアントをワークステーションにインストールすることができます。
- クライアントがインストールされている状態で、クライアント設定ファイルをダウンロードしてください。
- VPC コンソールの “Client VPN Endpoints” セクションに移動します。
- 構成ファイルをダウンロードする Client VPN エンドポイントを選択し、”Download Client Configuration” ボタンをクリックします。
- 次に、クライアントに新しい接続プロファイルを追加する必要があります。
- File > Manage Profiles をクリックします。
- “Add Profile” ボタンをクリックします。
- VPN 接続の名前を入力し、手順 3 でダウンロードした構成ファイルを選択します。
- “Add Profile” をクリックします。
- プロファイルが作成されたら、作成したプロファイルを選択して、Client VPN エンドポイントに接続できるようになります。
- 自動的にブラウザが開いて AWS SSO に接続します。 AWS SSOに対してすでに認証されている場合は、”Authentication details received, processing details. You may close this window at any time.” というメッセージが表示されます。 図 16を参照してください。
- VPN クライアントに “Connected” と表示されます。
テスト
VPN 接続が実際に機能していることをテストする簡単な方法は、VPC で利用可能な Route 53 リゾルバーを使用することです。 たとえば、VPC CIDR が 10.10.0.0/16 の場合、Route 53 リゾルバーの IP アドレスは 10.10.0.2 になります。例えば次のようなコマンド nslookup 10.10.0.2 10.10.0.2
を使ってリゾルバを参照できます。これは、10.10.0.2 のリゾルバーを使用して IP アドレス 10.10.0.2 を解決しようとします。このコマンドは Mac と Windows の両方でそのまま使用でき、出力は少し異なりますが、コマンドが機能したかどうか(VPN が正しく接続されているかどうか)を簡単に確認できます。
図 18 と 19 は、VPN 経由でのみ利用可能なプライベート DNS サーバーを使用する名前解決の出力例を示しています。
よくある問題
クライアントをインストールし、Client VPN エンドポイントの “Download Client Configuration” から構成ファイルをダウンロードした後に接続で問題が発生した場合、証明書の問題が発生している可能性があります。 その場合は、テキストエディターで構成ファイルを開き、下部にあるAWSからのルートPEMファイルをコピーして貼り付け、構成を保存して再インポートしてください。
サマリー
この記事では、AWS SSO を使用して安全な VPN ソリューションを簡単にデプロイし、IdP とシングルサインオンの両方の機能を実行する方法を示しました。 最小権限の原則を使用してユーザーをプロビジョニングし、アクセスする必要のあるネットワークのセグメントのみに制限する柔軟性を提供しながら、これを行う方法を示しました。 これらはすべて、AWS のネイティブサービスを使用して実行できます。
翻訳は Solutions Architect の大松が担当しました。原文はこちらです。