接続承認 - AWS クライアント VPN

接続承認

クライアント VPN エンドポイントのクライアント接続ハンドラーを設定できます。ハンドラーを使用すると、デバイス、ユーザー、および接続属性に基づいて、新しい接続を許可するカスタムロジックを実行できます。クライアント接続ハンドラーは、クライアント VPN サービスがデバイスとユーザーを認証した後に実行されます。

クライアント VPN エンドポイントのクライアント接続ハンドラーを設定するには、デバイス、ユーザー、および接続属性を入力として受け取り、新しい接続を許可または拒否する決定をクライアント VPN サービスに返す AWS Lambda 関数を作成します。クライアント VPN エンドポイントで Lambda 関数を指定します。デバイスがクライアント VPN エンドポイントに接続すると、クライアント VPN サービスはユーザーに代わって Lambda 関数を呼び出します。Lambda 関数によって承認された接続に対して、クライアント VPN エンドポイントへの接続が許可されます。

注記

現在、サポートされているクライアント接続ハンドラーのタイプは Lambda 関数だけです。

要件と考慮事項

クライアント接続ハンドラーの要件と考慮事項を次に示します。

  • Lambda 関数の名前は、 AWSClientVPN- プレフィックスで始まる必要があります。

  • 認定済みの Lambda 関数がサポートされています。

  • Lambda 関数は、クライアント VPN エンドポイントと同じ AWS リージョンおよび同じ AWS アカウントに存在する必要があります。

  • Lambda 関数は 30 秒後にタイムアウトします。この値は変更できません。

  • Lambda 関数は同期的に呼び出されます。これは、デバイスとユーザーの認証後、および承認ルールが評価される前に呼び出されます。

  • 新しい接続に対して Lambda 関数が呼び出され、クライアント VPN サービスが関数から期待されるレスポンスを取得しない場合、クライアント VPN サービスは接続要求を拒否します。これは、Lambda 関数がスロットルされた、タイムアウトした、またはその他の予期しないエラーが発生した場合、関数のレスポンスが有効な形式でない場合などに発生します。

  • Lambda 関数にプロビジョニングされた同時実行数を設定して、レイテンシーの変動なしに関数をスケーリングできるようにすることをお勧めします。

  • Lambda 関数を更新しても、クライアント VPN エンドポイントへの既存の接続は影響を受けません。既存の接続を終了してから、新しい接続を確立するようクライアントに指示できます。詳細については、「」を参照してくださいクライアント接続の終了

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

Lambda インターフェイス

Lambda 関数は、クライアント VPN サービスからの入力として、デバイス属性、ユーザー属性、および接続属性を受け取ります。その後、クライアント VPN サービスに接続を許可または拒否するかどうかを決定する必要があります。

リクエストスキーマ

Lambda 関数は、次のフィールドを含む JSON BLOB を入力として受け取ります。

{ "connection-id": <connection ID>, "endpoint-id": <client VPN endpoint ID>, "common-name": <cert-common-name>, "username": <user identifier>, "platform": <OS platform>, "platform-version": <OS version>, "public-ip": <public IP address>, "client-openvpn-version": <client OpenVPN version>, "groups": <group identifier>, "schema-version": "v2" }
  • connection-id — クライアント VPN エンドポイントへのクライアント接続の ID。

  • endpoint-id — クライアント VPN エンドポイントの ID。

  • common-name — デバイス識別子。デバイス用に作成するクライアント証明書では、共通名によってデバイスが一意に識別されます。

  • username — ユーザー ID (該当する場合)。Active Directory 認証の場合、これはユーザー名です。SAML ベースのフェデレーション認証の場合、これは NameID です。相互認証の場合、このフィールドは空です。

  • platform — クライアントのオペレーティングシステムプラットフォーム。

  • platform-version — オペレーティングシステムのバージョン。クライアント VPN サービスは、クライアントがクライアント VPN エンドポイントに接続するとき、およびクライアントが Windows プラットフォームを実行しているときに --push-peer-info ディレクティブが OpenVPN クライアント設定に存在する場合に値を提供します。

  • public-ip — 接続デバイスのパブリック IP アドレス。

  • client-openvpn-version — クライアントが使用している OpenVPN バージョン。

  • groups — グループ ID (該当する場合)。Active Directory 認証の場合、これはActive Directory グループの一覧になります。SAML ベースのフェデレーション認証の場合、これは ID プロバイダー (IdP) グループの一覧になります。相互認証の場合、このフィールドは空です。

  • schema-version — スキーマバージョン。デフォルト: v2

レスポンススキーマ

Lambda 関数は次のフィールドを返す必要があります。

{ "allow": boolean, "error-msg-on-denied-connection": "", "posture-compliance-statuses": [], "schema-version": "v2" }
  • allow — 必須。新しい接続を許可または拒否するかどうかを示すブール値 (true | false)。

  • error-msg-on-denied-connection — 必須。Lambda 関数によって接続が拒否された場合に、クライアントにステップとガイダンスを提供するために使用できる最大 255 文字の文字列。Lambda 関数の実行中に障害が発生した場合 (スロットリングなどの理由で)、次のデフォルトメッセージがクライアントに返されます。

    Error establishing connection. Please contact your administrator.
  • posture-compliance-statuses — 必須。体制評価に Lambda 関数を使用する場合、これは接続デバイスのステータスのリストです。デバイスの体制評価カテゴリ (compliantquarantinedunknown など) に従って、ステータス名を定義します。各名前の最大長は 255 文字です。最大 10 個のステータスを指定できます。

  • schema-version — 必須。スキーマバージョン。デフォルト: v2

同じリージョン内の複数のクライアント VPN エンドポイントに対して、同じ Lambda 関数を使用できます。

Lambda 関数の作成の詳細については、AWS Lambda デベロッパーガイドの「AWS Lambda の開始方法」を参照してください。

体制評価のためのクライアント接続ハンドラーの使用

クライアント接続ハンドラーを使用して、クライアント VPN エンドポイントを既存のデバイス管理ソリューションと統合し、接続デバイスの体制コンプライアンスを評価できます。Lambda 関数がデバイス承認ハンドラーとして機能するには、クライアント VPN エンドポイントに相互認証を使用します 。クライアント VPN エンドポイントに接続するクライアント (デバイス) ごとに、一意のクライアント証明書とキーを作成します。Lambda 関数は、クライアント証明書の一意の共通名 (クライアント VPN サービスから渡される) を使用して、デバイスを識別し、デバイス管理ソリューションから体制コンプライアンスステータスを取得できます。相互認証をユーザーベースの認証と組み合わせることができます。

または、Lambda 関数自体で基本的な体制評価を行うこともできます。たとえば、クライアント VPN サービスによって Lambda 関数に渡される platform および platform-version フィールドを評価できます。

クライアント接続ハンドラーの有効化

クライアント接続ハンドラーを有効にするには、クライアント VPN エンドポイントを作成または変更し、Lambda 関数の Amazon リソースネーム (ARN) を指定します。詳細については、「クライアント VPN エンドポイントを作成する」および「クライアント VPN エンドポイントを変更する」を参照してください。

サービスにリンクされたロール

AWS Client VPN は、AWSServiceRoleForClientVPNConnections というアカウントに、サービスにリンクされたロールを自動的に作成します。ロールには、クライアント VPN エンドポイントへの接続が行われたときに Lambda 関数を呼び出すアクセス許可があります。詳細については、「」を参照してくださいクライアント VPN のサービスにリンクされたロールの使用

接続承認失敗のモニタリング

クライアント VPN エンドポイントへの接続の接続承認ステータスを表示できます。詳細については、「」を参照してくださいクライアント接続の表示

体制評価にクライアント接続ハンドラーを使用すると、クライアント VPN エンドポイントに接続するデバイスの体制コンプライアンスステータスを接続ログに表示することもできます。詳細については、「」を参照してください接続ログ

デバイスが接続承認に失敗した場合、接続ログの connection-attempt-failure-reason フィールドから次の失敗理由のいずれかが返されます。

  • client-connect-failed — Lambda 関数によって接続が確立されませんでした。

  • client-connect-handler-timed-out — Lambda 関数がタイムアウトしました。

  • client-connect-handler-other-execution-error — Lambda 関数で予期しないエラーが発生しました。

  • client-connect-handler-throttled — Lambda 関数がスロットルされました。

  • client-connect-handler-invalid-response — Lambda 関数が無効なレスポンスを返しました。

  • client-connect-handler-service-error — 接続試行中にサービス側のエラーが発生しました。