での接続認可 AWS Client VPN - AWS Client VPN

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

での接続認可 AWS Client 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 Client 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>, "aws-client-version": <AWS client version>, "groups": <group identifier>, "schema-version": "v3" }
  • connection-id — クライアントVPNエンドポイントへのクライアント接続の ID。

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

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

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

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

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

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

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

  • aws-client-version — AWS クライアントバージョン。

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

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

レスポンススキーマ

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

{ "allow": boolean, "error-msg-on-denied-connection": "", "posture-compliance-statuses": [], "schema-version": "v3" }
  • 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 — 必須。スキーマバージョン。デフォルト: v3

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

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

体制評価にクライアント接続ハンドラーを使用する

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

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

注記

接続ハンドラーを使用して最小 AWS Client VPN アプリケーションバージョンを適用できますが、接続ハンドラーaws-client-versionの フィールドは AWS Client VPN アプリケーションにのみ適用され、ユーザーデバイスの環境変数から入力されます。

クライアント接続ハンドラーを有効にする

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

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

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

接続認証の失敗をモニタリングする

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

クライアント接続ハンドラーを体制評価に使用すると、接続ログでクライアントVPNエンドポイントに接続するデバイスの体制コンプライアンスステータスを表示することもできます。詳細については、「AWS Client 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 — 接続試行中にサービス側のエラーが発生しました。