本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 AWS WAF Web ACL 與使用者集區建立關聯
AWS WAF 是 Web 應用程式防火牆。使用 AWS WAF Web 存取控制清單 (Web ACL),您可以保護您的使用者集區免於對傳統託管 UI、受管登入和 Amazon Cognito API 服務端點提出不必要的請求。Web ACL 可讓您對使用者集區回應的所有 HTTPS Web 要求進行精細控制。如需有關 AWS WAF Web ACL 的詳細資訊,請參閱 AWS WAF 開發人員指南中的管理和使用 Web 存取控制清單 (Web ACL)。
當您有與使用者集區相關聯的 AWS WAF Web ACL 時,Amazon Cognito 會將來自使用者之所選非機密標頭和請求內容轉送至 AWS WAF。 會 AWS WAF 檢查請求的內容,將其與您在 Web ACL 中指定的規則進行比較,並將回應傳回給 Amazon Cognito。Amazon Cognito 轉送的請求元件 AWS WAF 取決於請求類型。對於受管登入和傳統託管 UI,Amazon Cognito 不會轉送請求內文。如需詳細資訊,請參閱AWS WAF Web ACLs 和 Amazon Cognito 的須知事項。
AWS WAF Web ACLs 和 Amazon Cognito 的須知事項
-
您無法設定 Web ACL 規則以符合使用者集區請求中的個人身分識別資訊 (PII),例如使用者名稱、密碼、電話號碼或電子郵件地址。此資料將無法供 使用 AWS WAF。反之,請將 Web ACL 規則設定為與標頭、路徑和內文中的工作階段資料相符,例如 IP 地址、瀏覽器代理程式和請求的 API 操作。
-
Amazon Cognito 僅支援對使用者集區 API 的請求的內文型 Web ACL 規則。對於受管登入和傳統託管 UI,Amazon Cognito 不會轉送請求內文,並僅檢查標頭和其他非內文元件。
-
Web ACL 規則只有在瀏覽器載入受管登入頁面時,才能傳回您的自訂區塊回應。在不重新載入的情況下傳送頁面的請求,例如當使用者提交登入表單時, 會改為接收預設
403區塊回應。 -
封鎖的請求 AWS WAF 不會計入任何請求類型的請求率配額。在 API 層級調節 AWS WAF 處理常式之前呼叫處理常式。
-
當您建立 Web ACL 時,在 Web ACL 完全傳播並可供 Amazon Cognito 使用之前會經歷一小段時間。傳播時間可以是幾秒鐘到幾分鐘。當您嘗試在 Web ACL 完全傳播之前建立關聯
WAFUnavailableEntityException時 AWS WAF , 會傳回 。 -
您可以將一個 Web ACL 與每個使用者集區建立關聯。
-
您的請求可能會導致負載大於 AWS WAF 可以檢查的限制。請參閱《 AWS WAF 開發人員指南》中的過大請求元件處理,了解如何設定 如何處理來自 Amazon Cognito AWS WAF 的過大請求。
-
您無法將使用 AWS WAF Fraud Control 帳戶接管預防 (ATP) 的 Web ACL 與 Amazon Cognito 使用者集區建立關聯。ATP 功能位於
AWS-AWSManagedRulesATPRuleSet受管規則群組中。將 Web ACL 與使用者集區建立關聯之前,請確定它不會使用此受管規則群組。 -
當您的 AWS WAF Web ACL 與使用者集區相關聯,且 Web ACL 中的規則顯示 CAPTCHA 時,這可能會導致受管登入 TOTP 註冊發生無法復原的錯誤。若要建立具有 CAPTCHA 動作且不會影響受管登入 TOTP 的規則,請參閱 設定您的 AWS WAF Web ACL 以進行受管登入 TOTP MFA。
-
當 Web ACL 中的規則傳回自訂區塊回應時,Amazon Cognito 會將 Content-Security-Policy 標頭新增至該回應。此政策僅允許來自與使用者集區網域相同原始伺服器的指令碼, AWS WAF 以及來自 Amazon Cognito 提供的 CAPTCHA 和挑戰指令碼的指令碼。它會封鎖任何其他內嵌或第三方指令碼,包括您的自訂回應內文用來重新導向使用者的指令碼。如需詳細資訊,請參閱自訂區塊回應上的 Content-Security-Policy。
-
當 Web ACL 中的規則傳回 HTTP 狀態碼為 500 或更高的自訂區塊回應,以回應受管登入或傳統託管 UI 請求時,Amazon Cognito 會改為傳回
403 (Forbidden)狀態碼。如需詳細資訊,請參閱自訂區塊回應中的狀態碼。
AWS WAF 會檢查對下列端點的請求。
- 受管登入和傳統託管 UI
-
對 使用者集區端點和受管登入參考 中所有端點的請求。
- 公有 API 操作
-
從您的應用程式請求不使用 AWS 登入資料進行授權的 Amazon Cognito API。此包括如 InitiateAuth、RespondToAuthChallenge 和 GetUser 的 API 作業。在 範圍內的 API 操作 AWS WAF 不需要使用 AWS 登入資料進行身分驗證。其未經身分驗證,或使用工作階段字串或存取字符進行授權。如需詳細資訊,請參閱依授權模型分組的 API 操作清單。
您可使用 Count (計數)、Allow (允許)、Block (封鎖) 或顯示 CAPTCHA (驗證碼) 以回應與規則相符之請求的規則作業,來設定 Web ACL 中的規則。如需詳細資訊,請參閱《AWS WAF 開發人員指南》中的 AWS WAF 規則。依據規則動作,您可自訂 Amazon Cognito 傳回給使用者的回應。
重要
自訂錯誤回應的選項取決於您提出 API 請求的方式。
-
您可以自訂受管登入請求的錯誤碼和回應內文。Amazon Cognito 會傳回自訂錯誤代碼 500 和更新版本作為
403。如需詳細資訊,請參閱自訂區塊回應中的狀態碼。您只能為使用者提供 CAPTCHA,以便在受管登入中解決此問題。 -
對於您使用 Amazon Cognito 使用者集區 API 提出的請求,您可自訂接收 封鎖 回應請求的回應主體。您還可於 400–499 範圍內指定自訂錯誤代碼。
-
AWS Command Line Interface (AWS CLI) 和 AWS SDKs會傳回
ForbiddenException錯誤給產生區塊或 CAPTCHA 回應的請求。
自訂區塊回應上的 Content-Security-Policy
如果您的自訂區塊回應依賴指令碼,此政策可能會影響其行為。當 Web ACL 規則傳回自訂區塊回應至受管登入或傳統託管 UI 時,Amazon Cognito 會將 Content-Security-Policy (CSP) 標頭新增至該回應。CSP 是一種瀏覽器安全機制,可限制頁面可以載入哪些指令碼和其他資源。此政策會限制回應,如下所示:
-
回應可以包含來自與您使用者集區網域相同原始伺服器的指令碼和其他資源。
-
回應可以包含 Amazon Cognito 提供的 AWS WAF CAPTCHA 和挑戰指令碼。Amazon Cognito 允許列出這些指令碼,以便 AWS WAF CAPTCHA 和挑戰規則動作繼續運作。
不會執行任何其他內嵌指令碼,以及在使用者集區網域以外的網域上託管的任何指令碼。這包括自訂回應內文用來重新導向使用者、提交表單或傳送網路請求的指令碼。
如果您的自訂回應需要重新導向使用者,請傳回 HTTP 3xx 狀態碼和Location標頭,而不是以指令碼為基礎的重新導向。此模式不依賴於指令碼執行,也不受 CSP 影響。
此行為適用於 AWS 區域 您可以將 Web ACL 與使用者集區建立關聯的所有 。
自訂區塊回應中的狀態碼
Amazon Cognito 不會從 AWS WAF 自訂區塊回應傳回5xx狀態碼。當 Web ACL 規則傳回狀態碼為 500 或更高的自訂區塊回應時,Amazon Cognito 會改為使用403 (Forbidden)狀態碼回應。回應仍然包含自訂回應中的標頭和內文。此行為適用如下:
-
受管登入頁面 – 當瀏覽器載入受管登入頁面時,Amazon Cognito 會傳回自訂回應
403中的標頭和內文。頁面在不重新載入的情況下傳送的請求,例如表單提交,會接收預設403區塊回應,而不需要您的自訂標頭或內文。 -
傳統託管 UI 頁面和其他使用者集區端點 – Amazon Cognito 會從傳統託管 UI 頁面的自訂回應中傳回
403標頭和內文。無論您的使用者集區使用受管登入或傳統託管 UI 品牌,身分提供者和依賴方端點的行為都相同。 -
使用者集區 API – 使用者集區 API 只會在 400–499 的範圍內傳回您的自訂狀態碼,並傳回
403其他狀態碼。
將 Web ACL 與您的使用者集區建立關聯
若要在使用者集區中使用 Web ACL,您的 AWS Identity and Access Management (IAM) 主體必須具有下列 Amazon Cognito 和 AWS WAF 許可。如需 AWS WAF 許可的相關資訊,請參閱《 AWS WAF 開發人員指南》中的 AWS WAF API 許可。
雖然您必須授予 IAM 許可,但列出的動作僅限許可,不會對應至任何 API 操作。
AWS WAF 為您的使用者集區啟用 並關聯 Web ACL
-
在導覽窗格中,選擇 User Pools (使用者集區),然後選擇您要編輯的使用者集區。
-
選擇安全區段中的AWS WAF索引標籤。
-
選擇編輯。
-
選取 AWS WAF 搭配您的使用者集區使用。
-
選擇您已建立的 AWS WAF Web ACL,或選擇在 中建立 Web ACL AWS WAF,以在 的新 AWS WAF 工作階段中建立一個 AWS 管理主控台。
-
選擇儲存變更。
若要以程式設計方式將 Web ACL 與 AWS Command Line Interface 或 SDK 中的使用者集區建立關聯,請從 AWS WAF API 使用 AssociateWebACL。Amazon Cognito 沒有關聯 Web ACL 的單獨 API 操作。
測試和記錄 AWS WAF Web ACLs
當您將規則動作設定為 Web ACL 中的計數時, 會將請求 AWS WAF 新增至符合規則的請求計數。如要使用您的使用者集區測試 Web ACL,請將規則動作設定為 Count (計數),並考慮與每個規則相符的請求量。例如,若您要設定為 Block (封鎖) 動作的規則與您確定為正常使用者流量的大量請求相符合,您可能需要重新設定您的規則。如需詳細資訊,請參閱《 開發人員指南》中的測試和調校您的 AWS WAF 保護。 AWS WAF
您也可以設定 AWS WAF 將請求標頭記錄到 Amazon CloudWatch Logs 日誌群組、Amazon Simple Storage Service (Amazon S3) 儲存貯體或 Amazon Data Firehose。您可透過 x-amzn-cognito-client-id 和 x-amzn-cognito-operation-name 識別您使用使用者集區 API 提出的 Amazon Cognito 請求。受管登入請求僅包含 x-amzn-cognito-client-id標頭。如需詳細資訊,請參閱《AWS WAF 開發人員指南》中的記錄 Web ACL 流量。
AWS WAF Web ACLs可在所有使用者集區功能計劃中使用。的安全功能可 AWS WAF 補充 Amazon Cognito 威脅防護。您可於使用者集區中啟動這兩項功能。 AWS WAF 會單獨用於檢查使用者集區請求的帳單。如需詳細資訊,請參閱AWS WAF 定價
記錄 AWS WAF 請求資料需由您以日誌為目標的服務額外計費。如需詳細資訊,請參閱《AWS WAF 開發人員指南》中的記錄 Web ACL 流量資訊的定價。