認証 - AWS Client VPN

認証

認証は AWS クラウドへの最初のエントリポイントで実装されます。クライアントが クライアント VPN エンドポイントへの接続を許可されているかどうかを判断するために使用されます。認証が成功すると、クライアントは クライアント VPN エンドポイントに接続して VPN セッションを確立します。認証が失敗すると、接続は拒否され、クライアントは VPN セッションを確立できなくなります。

クライアント VPN では、次のタイプのクライアント認証を使用できます。

次のいずれか、または組み合わせを使用できます。

  • 相互認証とフェデレーション認証

  • 相互認証と Active Directory 認証

重要

クライアント VPN エンドポイントを作成するには、使用する認証のタイプに関係なく、AWS Certificate Manager でサーバー証明書のプロビジョニングを行う必要があります。サーバー証明書の作成とプロビジョニングの詳細については、「相互認証」の手順を参照してください。

クライアント VPN は AWS Directory Service と統合することによって Active Directory サポートを提供します。Active Directory 認証では、クライアントは既存の Active Directory グループに対して認証されます。AWS Directory Service を使用して、クライアント VPN は AWS またはオンプレミスネットワークでプロビジョニングされた既存の Active Directory に接続できます。これにより、既存のクライアント認証インフラストラクチャを使用することができます。オンプレミスの Active Directory を使用していて、既存の AWS Managed Microsoft AD がない場合は、Active Directory Connector (AD Connector) を設定する必要があります。1 つの Active Directory サーバーを使用してユーザーを認証できます。Active Directory 統合の詳細については、AWS Directory Service Administration Guide を参照してください。

クライアント VPN は、AWS Managed Microsoft AD または AD Connector で有効になっている場合、多要素認証 (MFA) をサポートします。MFA が有効になっている場合、クライアントは クライアント VPN エンドポイントに接続するときにユーザー名、パスワード、および MFA コードを入力する必要があります。MFA を有効にする詳細については、AWS Directory Service Administration Guide の「AWS Managed Microsoft AD の多要素認証を有効にするには」および「AD Connector の多要素認証を有効にするには」を参照してください。

Active Directory を使用してユーザーとグループを設定する場合、次のルールが適用されます。

  • ユーザーは最大 25 個のグループに属することができます。25 番目を超えたグループは無視されます。

  • グループ ID の最大長は 255 文字です。

  • 名前 ID の最大長は 255 文字です。255 番目を超えた文字は切り捨てられます。

相互認証

相互認証では、クライアント VPN は証明書を使用してクライアントとサーバー間の認証を実行します。証明書は、認証機関 (CA) によって発行されたデジタル形式の ID です。クライアントが クライアント VPN エンドポイントに接続を試みると、サーバーはクライアント証明書を使用してクライアントを認証します。

サーバー証明書は AWS Certificate Manager (ACM) にアップロードし、クライアント VPN エンドポイントの作成時に指定する必要があります。クライアント証明書の認証機関 (発行者) がサーバー証明書の認証機関 (発行者) と異なる場合にのみ、クライアント証明書を ACM にアップロードする必要があります。ACM の詳細については、「AWS Certificate Manager ユーザーガイド」を参照してください。

クライアント VPN エンドポイントに接続するクライアントごとに、個別のクライアント証明書とキーを作成できます。これにより、ユーザーが組織を離れた場合に、特定のクライアント証明書を取り消すことができます。この場合、クライアント VPN エンドポイントを作成するときに、クライアント証明書がサーバー証明書と同じ認証局 (発行者) によって発行されていれば、クライアント証明書のサーバー証明書 ARN を指定できます。

クライアント VPN エンドポイントは、1024 ビットおよび 2048 ビットの RSA キーサイズのみサポートしています。

Linux/macOS

次の手順では、OpenVPN easy-rsa を使用してサーバーとクライアントの証明書とキーを生成してから、そのサーバーの証明書とキーを ACM にアップロードします。詳細については、「Easy-RSA 3 Quickstart README」を参照してください。

サーバーとクライアントの証明書とキーを生成し、それらを ACM にアップロードします。

  1. OpenVPN easy-rsa リポジトリのクローンをローカルコンピュータに作成して、easy-rsa/easyrsa3 フォルダに移動します。

    $ git clone https://github.com/OpenVPN/easy-rsa.git
    $ cd easy-rsa/easyrsa3
  2. 新しい PKI 環境を初期化します。

    $ ./easyrsa init-pki
  3. 新しい認証機関 (CA) を構築します。

    $ ./easyrsa build-ca nopass

    画面の指示に従って、CA を構築します。

  4. サーバー証明書とキーを生成します。

    $ ./easyrsa build-server-full server nopass
  5. クライアント証明書とキーを生成します。

    クライアント証明書とクライアントプライベートキーは、クライアントを設定するときに必要になるため、必ず保存してください。

    $ ./easyrsa build-client-full client1.domain.tld nopass

    必要に応じて、クライアント証明書とキーを必要とするクライアント (エンドユーザー) ごとにこの手順を繰り返すことができます。

  6. サーバー証明書とキー、およびクライアント証明書とキーをカスタムフォルダにコピーしてから、カスタムフォルダに移動します。

    証明書とキーをコピーする前に、mkdir コマンドを使用してカスタムフォルダを作成します。次の例では、ホームディレクトリにカスタムフォルダを作成します。

    $ 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/
  7. サーバー証明書とキー、およびクライアント証明書とキーを ACM にアップロードします。次のコマンドは AWS CLI を使用します。

    $ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region region
    $ aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt --region region

    ACM コンソールを使用して証明書をアップロードするには、AWS Certificate Manager ユーザーガイド の「証明書のインポート」を参照してください。

    注記

    証明書とキーは、クライアント VPN エンドポイントを作成する予定のリージョンと同じリージョンに必ずアップロードしてください。

    クライアント証明書を ACM にアップロードする必要があるのは、クライアント証明書の CA がサーバー証明書の CA と異なる場合だけです。上記の手順では、サーバー証明書と同じ CA がクライアント証明書にも使用されます。ただしここでは、完全なプロセスを示すために、クライアント証明書をアップロードする手順も含めています。

Windows

次の手順では、OpenVPN ソフトウェアをインストールし、それを使用してサーバーとクライアントの証明書およびキーを生成します。

サーバーとクライアントの証明書とキーを生成し、それらを ACM にアップロードします。

  1. OpenVPN コミュニティのダウンロードページに移動し、お使いの Windows のバージョン用の Windows インストーラをダウンロードします。

  2. インストーラを実行します。OpenVPN セットアップウィザードの最初のページで、[次へ] を選択します。

  3. [使用許諾契約書] ページで、[同意する] を選択します。

  4. [コンポーネントの選択] ページで、[EasyRSA 2 証明書管理スクリプト] を選択します。[次へ] を選択してから、[インストール] を選択します。

  5. [次へ]、[完了] の順に選択し、インストールを完了します。

  6. 管理者としてコマンドプロンプトを開き、OpenVPN ディレクトリに移動して init-config を実行します。

    C:\> cd \Program Files\OpenVPN\easy-rsa
    C:\> init-config
  7. メモ帳を使用して vars.bat ファイルを開きます。

    C:\> notepad vars.bat
  8. ファイルで、次の操作を行い、変更を保存します。

    • set KEY_SIZE で、値を 2048 に変更します。

    • 次のパラメータの値を指定します。値を空白のままにしないでください。

      • KEY_COUNTRY

      • KEY_PROVINCE

      • KEY_CITY

      • KEY_ORG

      • KEY_EMAIL

  9. コマンドラインで、vars.bat ファイルを実行し、clean-all を実行します。

    C:\> vars
    C:\> clean-all
  10. 新しい認証機関 (CA) を構築します。

    C:\> build-ca

    画面の指示に従って、CA を構築します。すべてのフィールドをデフォルト値のままにすることができます。必要に応じて、Common Name をサーバーのドメイン名 (server.example.com など) に変更できます。

  11. サーバー証明書とキーを生成します。

    C:\> build-key-server server

    プロンプトに従って、証明書とキーを生成します。[共通名] 以外のすべてのフィールドをデフォルト値のままにしておくことができます。このフィールドでは、サーバードメインをドメイン名形式で指定する必要があります。たとえば、server.example.com と指定します。

    証明書に署名するように求められたら、両方のプロンプトで y と入力します。

  12. クライアント証明書とキーを生成します。

    C:\> build-key client

    プロンプトに従って、証明書とキーを生成します。[共通名] 以外のすべてのフィールドをデフォルト値のままにしておくことができます。このフィールドでは、クライアントドメインをドメイン名形式で指定する必要があります。たとえば、client.example.com と指定します。

    証明書に署名するように求められたら、両方のプロンプトで y と入力します。

    必要に応じて、クライアント証明書とキーを必要とするクライアント (エンドユーザー) ごとにこの手順を繰り返すことができます。

  13. サーバー証明書とキー、およびクライアント証明書とキーを ACM にアップロードします。次のコマンドは AWS CLI を使用します。

    C:\> aws acm import-certificate --certificate fileb://"C:\Program Files\OpenVPN\easy-rsa\keys\server.crt" --private-key fileb://"C:\Program Files\OpenVPN\easy-rsa\keys\server.key" --certificate-chain fileb://"C:\Program Files\OpenVPN\easy-rsa\keys\ca.crt" --region region
    C:\> aws acm import-certificate --certificate fileb://"C:\Program Files\OpenVPN\easy-rsa\keys\client.crt" --private-key fileb://"C:\Program Files\OpenVPN\easy-rsa\keys\client.key" --certificate-chain fileb://"C:\Program Files\OpenVPN\easy-rsa\keys\ca.crt" --region region

    ACM コンソールを使用して証明書をアップロードするには、AWS Certificate Manager ユーザーガイド の「証明書のインポート」を参照してください。

    注記

    証明書とキーは、クライアント VPN エンドポイントを作成する予定のリージョンと同じリージョンに必ずアップロードしてください。

    クライアント証明書を ACM にアップロードする必要があるのは、クライアント証明書の CA がサーバー証明書の CA と異なる場合だけです。上記の手順では、サーバー証明書と同じ CA がクライアント証明書にも使用されます。ただしここでは、完全なプロセスを示すために、クライアント証明書をアップロードする手順も含めています。

シングルサインオン (SAML 2.0 ベースのフェデレーション認証)

AWS クライアント VPN は クライアント VPN エンドポイントに対して、Security Assertion Markup Language 2.0 (SAML 2.0) を使用して ID フェデレーションをサポートしています。SAML 2.0 をサポートする ID プロバイダー (IdP) を使用して、一元化されたユーザー ID を作成できます。その後、SAML ベースのフェデレーション認証が使用されるように クライアント VPN エンドポイントを設定し、IdP に関連付けることができます。その後、ユーザーは、一元化された認証情報を使用して クライアント VPN エンドポイントに接続します。

SAML ベースの IdP を クライアント VPN エンドポイントに使用するには、次の操作を行う必要があります。

  1. AWS クライアント VPN と連携するには、選択した IdP で SAML ベースのアプリを作成するか、既存のアプリを使用します。

  2. AWS との信頼関係を確立するために IdP を設定します。リソースについては、「SAML ベースの IdP 設定リソース」を参照してください。

  3. IdP で、組織を IdP として定義するフェデレーションメタデータドキュメントを生成し、ダウンロードします。この署名付き XML ドキュメントは、AWS と IdP の間の信頼関係を確立するために使用されます。

  4. クライアント VPN エンドポイントと同じ AWS アカウントで IAM SAML ID プロバイダーを作成します。IAM SAML ID プロバイダーは、IdP によって生成されたメタデータドキュメントを使用して、組織の IdP と AWS の信頼関係を定義します。詳細については、IAM ユーザーガイド の「SAML ID プロバイダーの作成」を参照してください。後で IdP のアプリ設定を更新する場合は、新しいメタデータドキュメントを生成し、IAM SAML ID プロバイダーを更新します。

    注記

    IAM SAML ID プロバイダーを使用するために IAM ロールを作成する必要はありません。

  5. クライアント VPN エンドポイントの作成認証タイプとしてフェデレーション認証を指定し、作成した IAM SAML ID プロバイダーを指定します。詳細については、「クライアント VPN エンドポイントを作成する」を参照してください。

  6. クライアント設定ファイルをエクスポートし、ユーザーに配布します。AWS が提供するクライアントの最新バージョンをダウンロードし、これを使用して設定ファイルをロードして、クライアント VPN エンドポイントに接続するようにユーザーに指示します。

認証ワークフロー

次の図に、SAML ベースのフェデレーション認証を使用する クライアント VPN エンドポイントの認証ワークフローの概要を示します。クライアント VPN エンドポイントを作成および設定するときは、IAM SAML ID プロバイダーを指定します。


		                    認証ワークフロー
  1. ユーザーは、デバイス上で AWS が提供するクライアントを開き、クライアント VPN エンドポイントへの接続を開始します。

  2. クライアント VPN エンドポイントは、IAM SAML ID プロバイダーで提供された情報に基づいて IdP URL と認証リクエストをクライアントに送信します。

  3. AWS が提供するクライアントは、ユーザーのデバイス上で新しいブラウザウィンドウを開きます。ブラウザは IdP にリクエストを送信し、ログインページを表示します。

  4. ユーザーがログインページに認証情報を入力し、IdP は署名付き SAML アサーションをクライアントに返します。

  5. AWS が提供するクライアントは SAML アサーションを クライアント VPN エンドポイントに送信します。

  6. クライアント VPN エンドポイントはアサーションを検証し、ユーザーへのアクセスを許可または拒否します。

SAML ベースのフェデレーション認証の要件と考慮事項

SAML ベースのフェデレーション認証の要件と考慮事項を次に示します。

  • SAML ベースの IdP を使用してユーザーとグループを設定する場合、次のルールが適用されます。

    • ユーザーは最大 25 個のグループに属することができます。25 番目を超えたグループは無視されます。

    • グループ ID の最大長は 255 文字です。

    • 名前 ID の最大長は 255 文字です。255 番目を超えた文字は切り捨てられます。

  • SAML 応答は署名済みで、暗号化されていない必要があります。

  • SAML 応答でサポートされる最大サイズは 128 KB です。

  • AWS クライアント VPN では署名付き認証リクエストが提供されません。

  • SAML シングルログアウトはサポートされていません。ユーザーは、AWS が提供するクライアントから切断してログアウトすることも、接続を終了することもできます。

  • 1 つの クライアント VPN エンドポイントでサポートされるのは、単一の IdP のみです。

  • IdP で有効になっている場合は Multi-Factor Authentication (MFA) がサポートされます。

  • ユーザーは AWS が提供するクライアントを使用して クライアント VPN エンドポイントに接続する必要があります。バージョン 1.2.0 以降を使用する必要があります。詳細については、「AWS が提供するクライアントを使用して接続する」を参照してください。

  • IdP 認証は、Apple Safari、Google Chrome、Microsoft Edge、Mozilla Firefox の各ブラウザでサポートされています。

  • AWS が提供するクライアントは、SAML 応答用にユーザーのデバイス上の TCP ポート 35001 を予約します。

  • 正しくない URL または悪意のある URL で IAM SAML ID プロバイダーのメタデータドキュメントが更新されると、ユーザーの認証の問題が発生したり、フィッシング攻撃につながる可能性があります。このため、IAM SAML ID プロバイダーに対して行われる更新は、AWS CloudTrail を使用してモニタリングすることをお勧めします。詳細については、IAM ユーザーガイド の「AWS CloudTraill による IAM および AWS STS コールのログ記録」を参照してください。

  • AWS クライアント VPN は、HTTP リダイレクトバインディングを介して IdP に AuthN リクエストを送信します。このため、HTTP リダイレクトバインディングが IdP でサポートされ、IdP のメタデータドキュメントに存在する必要があります。

  • SAML アサーションでは、NameID 属性に E メールアドレス形式を使用する必要があります。

SAML ベースの IdP 設定リソース

次の表に、AWS クライアント VPN での使用がテストされている SAML ベースの IdP と、IdP の設定に役立つリソースを示します。

アプリを作成するためのサービスプロバイダー情報

上の表に記載されていない IdP を使用して SAML ベースのアプリを作成するには、次の情報を使用して AWS クライアント VPN サービスプロバイダー情報を設定します。

  • Assertion Consumer Service (ACS) URL: http://127.0.0.1:35001

  • Audience URI: urn:amazon:webservices:clientvpn

以下の属性は必須です:

属性 説明
NameID ユーザーの E メールアドレス。
FirstName ユーザーの名。
LastName ユーザーの姓。
memberOf ユーザーが属するグループ (複数も可)。