連線授權 AWS Client VPN - AWS Client VPN

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

連線授權 AWS Client VPN

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

要為客戶端端點配置客戶VPN端連接處理程序,請創建一個將設備,用戶和連接屬性作為輸入的 AWS Lambda 函數,並將決定返回給客戶端VPN服務以允許或拒絕新連接。您可以在用戶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端連線識別碼。

  • endpoint-id— 用戶VPN端端點的識別碼。

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

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

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

  • platform-version – 作業系統的版本。當用戶端連線到用戶端端點時,以及VPN用戶端執行 Windows 平台時,「開啟」用戶VPN端組態中出現--push-peer-info指示詞時,用戶端VPN服務會提供值。

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

  • client-openvpn-version— 用戶端正在使用的「開啟」VPN 版本。

  • 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

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

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

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

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

或者,您可以在 Lambda 函數中執行基本的狀態評估。例如,您可以評估用戶端VPN服務傳遞至 Lambda 函數的platformplatform-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 用戶端連線

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