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 を OktaAzureAD などの他の IdP と統合するブログ記事がありましたが、この記事では、AWS のお客様が無料で利用できる AWS SSO の使用に焦点を当てています。 AWS SSO には組み込みの IdP がありますが、Microsoft Active Directory などの外部 IdP を使用することもできます。 今回は、組み込みの IdP を使用します。

ソリューションの概要

図 1 : AWS Client VPN アーキテクチャ

この記事では、AWS Client VPN を利用して、データベース管理者が DB のサブネットにあるサービスと通信するための VPN 接続を承認し、EC2 アプリケーションサーバーが稼働しているサブネットへの接続は承認しないような使い方を紹介します。AWS SSO のユーザーグループのグループ ID (GID) に基づいた受信の承認により、ユーザーのメンバーシップに基づいて異なるサブネットへの承認が可能です。図 1 は、このようなアーキテクチャを示しています。

上記を実現するための前提条件は以下の通りです。

  1. AWS アカウントが必要です。
  2. AWS SSO が前提条件となる AWS Organizations が必要です。AWSアカウントは、1 つの Organization にしか所属できません。
  3. AWS Client VPN を構成する際に AWS Certificate Manager の証明書を使用します。

AWS SSO のデプロイと設定

このセクションでは、AWS SSO を設定し、AWS Client VPN 用の新しいカスタム SAML 2.0 アプリケーションを作成します。 また、ネットワーク接続の承認の機能を確認するためにユーザーグループを1つ作成します。

  1. AWS コンソールで、AWS SSO のページに移動します。 コンソールページの上部にある検索バーに “sso” と入力します。 図2を参照してください。

    図 2 : AWS Single Sign-On のコンソールに移動

  2. “Enable AWS SSO” ボタンをクリックします。

    図 3 : AWS Singe Sign-On を有効化

  3. しばらくすると “You have successfully enabled AWS SSO” というメッセージが表示されます。
  4. 次に、新しい SSO アプリケーションを作成する必要があります。 ページの左側のメニューで、“Applications” に移動し、“Add a new application” ボタンをクリックしてから、“Add a custom SAML 2.0 application” をクリックします。 図 4 を参照してください。

    図 4 : 新しいシングルサインオンアプリケーションの作成

  5. SAML アプリケーションに名前とわかりやすい説明を付けます。

    図 5 : 新しい SSO アプリケーションの名前と説明を設定

AWS SSO metadataApplication properties の項目は全てデフォルトのままで構いません。メタデータファイルがないので、Application metadata の項目は手動で追加します。これを行うには、Browse ボタンの下のリンクをクリックします。以下の図 6 のような構成になるはずです。

図 6 : AWS SSO アプリケーションの設定

  1. “AWS SSO SAML metadata file” の項目の “Download” をクリックして、メタデータファイルをダウンロードします。 IAM ID プロバイダを作成するときにこのファイルが必要になります。
  2. Application ACS URL には http://127.0.0.1:35001 を入力し、Application SAML audience には urn:amazon:webservices:clientvpn を入力して、“Save changes“ をクリックします。
  3. 次に、属性マッピングを設定する必要があります。 この場合、必要なマッピングは 2 つだけです。 1 つ目の属性の Subject は、値を ${user:email} 、Format は emailAddress を指定します。 2 つ目の属性は memberOf とし、値を ${user:groups} 、 Format は unspecified を指定します。memberOf 属性は、ユーザーがどのグループに属しているかを AWS SSO が渡す方法であるため、重要です。AWS SSO は、この情報をグループ ID (GID) として渡すことに注意してください。これは、後で AWS Client VPN のエンドポイントを設定するときに使用します。 属性マッピング構成は、以下の図 7 のようになります。

    図 7 : SAML アサーションの一部となる属性の構成

  1. 次に、2 つのグループを作成する必要があります。 この例では、VPN_DB_Admins というグループと VPN_DevOps という別のグループを作成します。 グループを作成するには、左側のメニューの “Groups” リンクをクリックして、“Create group” ボタンをクリックします。 各グループに名前とわかりやすい説明を付ける必要があります。 2 つのグループに対してこれを行います。 2 つのグループを作成し、それらを SSO アプリケーションに割り当てると、次の図 8 のようになります。

    図 8 : SSOアプリケーションへのグループ割り当て

  2. グループを作成したら、VPN_DB_Admins グループにユーザーを割り当てます。このグループは、後でテストするために使用します。 AWS SSO でグループを作成する方法の詳細については、ドキュメントを参照してください。
  3. Groups” ページで、VPN_DB_Admins グループをクリックし、“Add users” ボタンをクリックして、グループに追加するユーザーを選択します。
  4. ユーザーを追加したら、“Group ID” をメモします。 長い GUID 文字列になります。 このグループ ID は、後で Client VPN エンドポイント認証を作成するときに必要になります。
  5. グループ内のすべてのユーザーが VPN にアクセスできるようにするには、グループを SSO アプリケーションに割り当てる必要があります。

IAM ID プロバイダの作成

IAM ID プロバイダは、ID プロバイダ (この場合はAWS SSO) と IAM の間のギャップを埋めるもので、ユーザーに適切な IAM 権限を割り当てるのに役立ちます。以下の手順に従うと、構成は以下の図 9 のようになります。

  1. AWS コンソール の IAM ページに移動し、左側のナビゲーションカラムで “Identity providers” をクリックします。
  2. “Add provider” をクリックします。
  3. Provier type として “SAML” を選択し、プロバイダに名前を付けます。
  4. SSO アプリケーションの作成時にダウンロードしたメタデータファイルをアップロードします。
  5. “Add provider” をクリックします。
  6. 作成したプロバイダ名をクリックし、ARN を確認しておきます。図 10 を参照してください。

    図 9 : 新しい IAM ID プロバイダの構成

    図 10 : ARN を確認

AWS Client VPN の設定

次のステップは、AWS Client VPN を設定することです。 ACM ですでにプロビジョニングされている証明書の ARN が必要になります。 また、VPN クライアントに IP アドレスを割り当てるために使用できる /12 〜 /22 の範囲の CIDR を選択する必要があります。

  1. AWS コンソールの VPC ページに移動します。
  2. 下の図 10 に示すように、”VIRTUAL PRIVATE NETWORK(VPN)” というセクションが見つかるまで左側のメニューを下にスクロールし、”Client VPN Endpoints” をクリックします。

    図 11 : VPC コンソールから Client VPN エンドポイントのページに移動

  3. “Create Client VPN Endpoint” をクリックします。
  4. 任意 – Name Tag : AWS Client VPN
  5. 任意 – Description : Something useful that describes your VPN Client Endpoint
  6. Client IPv4 CIDR : 192.168.0.0/22
  7. Server certificate ARN : ドロップダウンからACM証明書を選択
  8. Authentication Options : Use User-based authentication を選択
    1. Federated authentication を選択
  9. SAML provider ARN : 作成した IAM の ARN を指定。例 : arn:aws:iam::00112233445566:saml-provider/SSOVPN
  10. Do you want to log the details on client connections ? : No
  11. Do you want to enable Client Connect Handler ? : No
  12. DNS Server 1 IP address : 1.1.1.1
  13. DNS Server 1 IP address : 1.0.0.1
  14. Transport Protocol : UDP
  15. Enable split-tunnel : Check
  16. VPC ID : VPC の ID を指定します。例 : vpc-xyz12300
    VPC の作成方法については、チュートリアルを参照して、パブリックおよびプライベートサブネットの両方を持つ VPC を作成してください。
  17. Security Group IDs : VPN エンドポイントに関連付けるセキュリティグループを選択
  18. VPN Port : 443

    図 12 : Client VPN エンドポイントの設定

構成は、上記の図 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 と比較してください。

  1. VPC コンソールで、“Client VPN Endpoints” リンクをクリックし、設定したエンドポイントを選択します。
  2. 関連付けを作成するエンドポイントを選択します。
  3. 下のウィンドウで “Associations” タブを選択します。
  4. “Associate” ボタンをクリックします。

    図 13 : Client VPN Endpoint のページで、サブネットを Client VPN エンドポイントに関連付ける

  5. 関連付けを作成する VPC を選択します。
  6. 関連付けるサブネットを選択します。上記の図 1 のアーキテクチャを参考にした場合、Client VPN エンドポイントの関連付けに専用のプライベートサブネットを選択します。
  7. “Associate” ボタンをクリックします。(利用可能になるまで 2 〜 5 分かかる場合があります)
  8. 実稼働環境では、高可用性のために少なくとも 2 つのサブネットを関連付けることが理想的です。

    図 14 : サブネットを Client VPN エンドポイントに関連付ける

上記の図 14 は、サブネットを Client VPN エンドポイントに関連付けるプロセスを示しています。 関連付けを作成したら、次に承認ルールを作成する必要があります。 承認ルールは、VPN クライアントがアクセスできるネットワークのセグメントを管理します。 AWS SSO を利用しているため、データベースを含むネットワークセグメントへデータベース管理者のアクセスを許可するには、AWS SSO のグループ ID が必要になります。 構成は、以下の図 15 のようになります。

  1. Client VPN コンソールページに移動し、“Authorization” タブを選択します。
  2. “Authorize Ingress” ボタンをクリックします。
  3. Destination network to enable : 192.168.10.0/24 (許可したいサブネットのCIDR表記)
  4. Grant access to : Allow access to users in a specific access group を選択
  5. Access group ID : AWS SSO コンソールから取得したグループ ID の GUID(上記で作成したVPN_DB_Admins の Group ID)
  6. Description : DBA Access to database subnets
  7. “Add authorization rule” をクリックします。

    図 15 : Client VPN エンドポイントを使用できる SSO グループの承認ルールを作成

VPN クライアントの設定

  1. まず、環境に応じた Client VPN ソフトウェアをダウンロードします。現在、Windows, macOS, Ubuntu Linux がサポートされています。
  2. ダウンロード後、インストーラーを実行するだけで、簡単にクライアントをワークステーションにインストールすることができます。
  3. クライアントがインストールされている状態で、クライアント設定ファイルをダウンロードしてください。
    1. VPC コンソールの “Client VPN Endpoints” セクションに移動します。
    2. 構成ファイルをダウンロードする Client VPN エンドポイントを選択し、”Download Client Configuration” ボタンをクリックします。
  4. 次に、クライアントに新しい接続プロファイルを追加する必要があります。
    1. File > Manage Profiles をクリックします。
    2. “Add Profile” ボタンをクリックします。
    3. VPN 接続の名前を入力し、手順 3 でダウンロードした構成ファイルを選択します。
    4. “Add Profile” をクリックします。
  5. プロファイルが作成されたら、作成したプロファイルを選択して、Client VPN エンドポイントに接続できるようになります。
  6. 自動的にブラウザが開いて AWS SSO に接続します。 AWS SSOに対してすでに認証されている場合は、”Authentication details received, processing details. You may close this window at any time.” というメッセージが表示されます。 図 16を参照してください。

    図 16 : SSO 認証が完了したことを確認

  7. VPN クライアントに “Connected” と表示されます。

    図 17 :VPN 接続の確認

テスト

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 サーバーを使用する名前解決の出力例を示しています。

図 18:VPC 内のプライベート DNS への接続を確認 – Windowsコマンドプロンプト

図 19:VPC内のプライベートDNSへの接続を確認 – macOS terminal

よくある問題

クライアントをインストールし、Client VPN エンドポイントの “Download Client Configuration” から構成ファイルをダウンロードした後に接続で問題が発生した場合、証明書の問題が発生している可能性があります。 その場合は、テキストエディターで構成ファイルを開き、下部にあるAWSからのルートPEMファイルをコピーして貼り付け、構成を保存して再インポートしてください。

-----BEGIN CERTIFICATE-----
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
sSi6
-----END CERTIFICATE-----

サマリー

この記事では、AWS SSO を使用して安全な VPN ソリューションを簡単にデプロイし、IdP とシングルサインオンの両方の機能を実行する方法を示しました。 最小権限の原則を使用してユーザーをプロビジョニングし、アクセスする必要のあるネットワークのセグメントのみに制限する柔軟性を提供しながら、これを行う方法を示しました。 これらはすべて、AWS のネイティブサービスを使用して実行できます。

Kevin Epstein Headshot

Kevin Epstein

Kevin Epstein は、アマゾン ウェブ サービス (AWS) の米国州および地方政府の公共部門チームのソリューションアーキテクトです。2013 年から AWS にフォーカスし、お客様のクラウド導入・移行を支援しています。自動化による移行と移行後のクラウド運用を専門としています。

Grant Joslyn Headshot

Grant Joslyn

Grant Joslyn は アマゾン ウェブ サービス (AWS) の米国州・地方政府公共部門チームのソリューションアーキテクトです。専門はエンドユーザーコンピュートとクラウド自動化。AWS 上でセキュアなソリューションを構築するお客様に対して、技術的およびアーキテクチャ的なガイダンスを提供。また、お客様が DevOps を実践するための戦略的イニシアチブのサブジェクト・マター・エキスパートであり、ソートリーダーでもあります。

翻訳は Solutions Architect の大松が担当しました。原文はこちらです。