本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
連線授權 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 函數評估狀態,此即為連線裝置的狀態清單。您可以根據裝置的狀態評估類別定義狀態名稱,例如compliant
、quarantined
、unknown
等等。每個名稱的長度上限為 255 個字元。您最多可以指定 10 種狀態。 -
schema-version
– 必要。結構描述版本。預設值為v3
。
您可以在相同區域中的多個用戶VPN端端點使用相同的 Lambda 函數。
如需建立 Lambda 函數的詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 AWS Lambda入門。
使用用戶端連線處理常式進行狀態評估
您可以使用用戶端連線處理常式,將 Client VPN 端點與現有裝置管理解決方案整合,以評估連線裝置的狀態符合性。若要讓 Lambda 函數當做裝置授權處理常式運作,請為用戶VPN端端點使用相互驗證。為將連線到 Client 端點的每個用戶端 (裝置) 建立唯一的用戶VPN端憑證和金鑰。Lambda 函數可以使用用戶端憑證的唯一一般名稱 (從 Client 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 用戶端連線。
使用用戶端連線處理常式進行狀態評估時,您也可以在連線記錄檔中檢視連線到 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
– 嘗試連線期間在服務端發生錯誤。