連線授權 - AWS Client VPN

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

連線授權

您可以為 Client VPN 端點設定「用戶端連線處理常式」。處理常式可讓您根據裝置、使用者和連線屬性,執行可授權新連線的自訂邏輯。用戶端連線處理常式會在 Client VPN 服務驗證過裝置和使用者身分後執行。

若要為 Client VPN 端點設定用戶端連線處理常式,請建立將裝置、使用者和連線屬性視為輸入的 AWS Lambda 函數,並將允許或拒絕新連線的決定傳回 Client VPN 服務。您可以在 Client VPN 端點中指定 Lambda 函數。當裝置連線到 Client VPN 端點時,Client VPN 服務會代您叫用 Lambda 函數。只有經 Lambda 函數授權的連線才可以連線到 Client VPN 端點。

注意

目前唯一支援的用戶端連線處理常式類型是 Lambda 函數。

需求和考量事項

下列是用戶端連線處理常式的需求和考量事項:

  • Lambda 函數的名稱必須以 AWSClientVPN- 前綴開頭。

  • 支援合格的 Lambda 函數。

  • Lambda 函數必須位於與 Client VPN 端點位於相同 AWS 區域且 AWS 帳戶相同。

  • Lambda 函數會在 30 秒後逾時。此值無法變更。

  • 會以同步方式呼叫 Lambda 函數。在驗證設備和使用者身分後、評估授權規則前呼叫。

  • 如果為新連線呼叫 Lambda 函數,但 Client VPN 服務未從函數獲取得預期的回應,則 Client VPN 服務會拒絕此連線要求。例如,如果 Lambda 函數被調節、逾時或遇到其他未預期的錯誤,或者函數的回應格式不正確,就會發生這個問題。

  • 建議您為 Lambda 函數設定佈建並行,使其能在不造成延遲波動的情況下擴展。

  • 如果您更新 Lambda 函數,現有的 Client VPN 端點連線不會受到影響。您可以終止現有的連線,然後指示用戶端建立新的連線。如需詳細資訊,請參閱 終止用戶端連線

  • 如果用戶端使用 AWS 提供的用戶端連線至 Client VPN 端點,則必須為 Windows 使用 1.2.6 或更新版本,而 macOS 則必須使用 1.2.4 或更新版本。如需詳細資訊,請參閱使用 AWS 提供的用戶端連線

Lambda 界面

Lambda 函數會將裝置屬性、使用者屬性和連線屬性視為來自 Client VPN 服務的輸入。然後,必須將允許或拒絕連線的決定傳回 Client 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 – 連線到 Client VPN 端點的用戶端 ID。

  • endpoint-id – Client VPN 端點的 ID。

  • common-name – 裝置識別符。在您為裝置建立的用戶端憑證中,通用名稱只能識別裝置。

  • username – 使用者識別符 (如果適用)。若為 Active Directory 身分驗證,這是使用者名稱。若為 SAML 型聯合身分驗證,這是 NameID。若要交互身分驗證,此欄位為空白。

  • platform – 用戶端作業系統平台。

  • platform-version – 作業系統的版本。當用戶端連線至 Client VPN 端點,且用戶端正在執行 Windows 平台時,Client VPN 服務會在 OpenVPN 用戶端組態中出現 --push-peer-info 指令時提供一個值。

  • public-ip – 要連線裝置的公有 IP 地址。

  • client-openvpn-version – 用戶端正在使用的 OpenVPN 版本。

  • aws-client-version— 用 AWS 戶端版本。

  • groups – 群組識別符 (如果適用)。若為 Active Directory 身分驗證,這將是 Active Directory 群組的清單。若為 SAML 型聯合身分驗證,這將是身分提供者 (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

您可以為相同區域中的多個 Client VPN 端點使用相同的 Lambda 函數。

如需建立 Lambda 函數的詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 AWS Lambda入門

使用用戶端連線處理常式評估狀態

您可以使用用戶端連線處理常式整合 Client VPN 端點和現有的裝置管理解決方案,以評估連線裝置的狀態合規性。若要讓 Lambda 函數做為裝置授權處理常式運作,請在 Client VPN 端點使用交互身分驗證。您可以為要連線至 Client VPN 端點的每個用戶端 (裝置) 建立唯一的用戶端憑證和金鑰。Lambda 函數可使用用戶端憑證的唯一通用名稱 (從 Client VPN 服務傳出) 來識別裝置,並從您的裝置管理解決方案擷取其狀態合規狀態。您可以將交互身分驗證與使用者型身分驗證結合使用。

或者,您可以在 Lambda 函數中執行基本的狀態評估。例如,您可以評估 Client VPN 服務傳遞給 Lambda 函數的 platformplatform-version 欄位。

注意

雖然連線處理常式可用來強制執行最低 AWS Client VPN 應用程式版本,但連線處理常式aws-client-version中的欄位僅適用於 AWS Client VPN 應用程式,且會從使用者裝置上的環境變數填入。

啟用用戶端連線處理常式

若要啟用用戶端連線處理常式,請建立或修改 Client VPN 端點,並指定 Lambda 函數的 Amazon Resource Name (ARN)。如需更多詳細資訊,請參閱建立 Client VPN 端點。修改 Client VPN 端點

服務連結角色

AWS Client VPN 自動在您的AWSServiceRoleForClientVPNConnections帳戶中建立服務連結角色。連線到 Client VPN 端點時,角色具有呼叫 Lambda 函數的許可。如需更多詳細資訊,請參閱 在 Client VPN 使用服務連結角色

監視連線授權失敗

您可以檢視 Client VPN 端點連線的連線授權狀態。如需更多詳細資訊,請參閱 查看用戶端連線

使用用戶端連線處理常式評估狀態時,您也可以在連線日誌中檢視連線至 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 – 嘗試連線期間在服務端發生錯誤。