

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

# 將 AWS WAF Web ACL 與使用者集區建立關聯
<a name="user-pool-waf"></a>

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)](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html)。

當您有與使用者集區相關聯的 AWS WAF Web ACL 時，Amazon Cognito 會將來自使用者之所選非機密標頭和請求內容轉送至 AWS WAF。 會 AWS WAF 檢查請求的內容，將其與您在 Web ACL 中指定的規則進行比較，並將回應傳回給 Amazon Cognito。

## AWS WAF Web ACLs 和 Amazon Cognito 的須知事項
<a name="user-pool-waf-things-to-know"></a>
+ 您無法設定 Web ACL 規則以符合使用者集區請求中的個人身分識別資訊 (PII)，例如使用者名稱、密碼、電話號碼或電子郵件地址。此資料將無法供 使用 AWS WAF。反之，請將 Web ACL 規則設定為符合標頭、路徑和內文中的工作階段資料，例如 IP 地址、瀏覽器代理程式和請求的 API 操作。
+ Web ACL 規則條件只能將使用者**第一個**請求的自訂區塊回應傳回使用者互動受管登入頁面。當後續連線符合自訂區塊回應條件時，它們會傳回您的自訂狀態碼、標頭和重新導向回應，但會傳回預設區塊訊息。
+ 封鎖的請求 AWS WAF 不會計入任何請求類型的請求率配額。在 API 層級調節 AWS WAF 處理常式之前呼叫處理常式。
+ 當您建立 Web ACL 時，在 Web ACL 完全傳播並可供 Amazon Cognito 使用之前會經歷一小段時間。傳播時間可以是幾秒鐘到幾分鐘。當您嘗試在 Web ACL 完全傳播之前建立關聯[https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html#API_AssociateWebACL_Errors](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html#API_AssociateWebACL_Errors)時 AWS WAF ， 會傳回 。
+ 您可以將一個 Web ACL 與每個使用者集區建立關聯。
+ 您的請求可能會導致負載大於 AWS WAF 可以檢查的限制。請參閱《 *AWS WAF 開發人員指南*》中的[過大請求元件處理](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-oversize-handling.html)，了解如何設定 如何處理來自 Amazon Cognito AWS WAF 的過大請求。
+ 您無法將使用 AWS WAF [Fraud Control 帳戶接管預防 (ATP)](https://docs.aws.amazon.com/waf/latest/developerguide/waf-atp.html) 的 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](user-pool-settings-mfa-totp.md#totp-waf)。

AWS WAF 會檢查對下列端點的請求。

**受管登入和傳統託管 UI**  
對 [使用者集區端點和受管登入參考](cognito-userpools-server-contract-reference.md) 中所有端點的請求。

**公有 API 操作**  
從您的應用程式請求不使用 AWS 登入資料進行授權的 Amazon Cognito API。此包括如 [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) 和 [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html) 的 API 作業。在 範圍內的 API 操作 AWS WAF 不需要使用 AWS 登入資料進行身分驗證。其未經身分驗證，或使用工作階段字串或存取字符進行授權。如需詳細資訊，請參閱[依授權模型分組的 API 操作清單](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth)。

您可使用 **Count** (計數)、**Allow** (允許)、**Block** (封鎖) 或顯示 **CAPTCHA** (驗證碼) 以回應與規則相符之請求的規則作業，來設定 Web ACL 中的規則。如需詳細資訊，請參閱《*AWS WAF 開發人員指南*》中的 [AWS WAF 規則](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html)。依據規則動作，您可自訂 Amazon Cognito 傳回給使用者的回應。

**重要**  
自訂錯誤回應的選項取決於您提出 API 請求的方式。  
您可以自訂受管登入請求的錯誤碼和回應內文。您只能為您的使用者提供 CAPTCHA，以便在受管登入中解決此問題。
對於您使用 Amazon Cognito [使用者集區 API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) 提出的請求，您可自訂接收 **封鎖** 回應請求的回應主體。您還可於 400–499 範圍內指定自訂錯誤代碼。
 AWS Command Line Interface (AWS CLI) 和 AWS SDKs會傳回`ForbiddenException`錯誤給產生**區塊**或 **CAPTCHA** 回應的請求。

## 將 Web ACL 與您的使用者集區建立關聯
<a name="user-pool-waf-setting-up"></a>

若要在使用者集區中使用 Web ACL，您的 AWS Identity and Access Management (IAM) 主體必須具有下列 Amazon Cognito 和 AWS WAF 許可。如需 AWS WAF 許可的相關資訊，請參閱《 *AWS WAF 開發人員指南*》中的 [AWS WAF API 許可](https://docs.aws.amazon.com/waf/latest/developerguide/waf-api-permissions-ref.html)。

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "AllowWebACLUserPool",
			"Effect": "Allow",
			"Action": [
				"cognito-idp:ListResourcesForWebACL",
				"cognito-idp:GetWebACLForResource",
				"cognito-idp:AssociateWebACL"
			],
			"Resource": [
				"arn:aws:cognito-idp:*:{{123456789012}}:userpool/*"
			]
		},
		{
			"Sid": "AllowWebACLUserPoolWAFv2",
			"Effect": "Allow",
			"Action": [
				"wafv2:ListResourcesForWebACL",
				"wafv2:AssociateWebACL",
				"wafv2:DisassociateWebACL",
				"wafv2:GetWebACLForResource"
			],
			"Resource": "arn:aws:wafv2:*:{{123456789012}}:*/webacl/*/*"
		},
		{
			"Sid": "DisassociateWebACL1",
			"Effect": "Allow",
			"Action": "wafv2:DisassociateWebACL",
			"Resource": "*"
		},
		{
			"Sid": "DisassociateWebACL2",
			"Effect": "Allow",
			"Action": [
				"cognito-idp:DisassociateWebACL"
			],
			"Resource": [
				"arn:aws:cognito-idp:*:{{123456789012}}:userpool/*"
			]
		}
	]
}
```

------

雖然您必須授予 IAM 許可，但列出的動作僅限許可，不會對應至任何 [API 操作](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html)。

**AWS WAF 為您的使用者集區啟用 並關聯 Web ACL**

1. 登入 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)。

1. 在導覽窗格中，選擇 **User Pools** (使用者集區)，然後選擇您要編輯的使用者集區。

1. 選擇**安全**區段中的**AWS WAF**索引標籤。

1. 選擇**編輯**。

1. 選取** AWS WAF 搭配您的使用者集區使用**。  
![已選取使用 AWS WAF 搭配您的使用者集區的 AWS WAF 對話方塊螢幕擷取畫面。](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/cup-WAF-console.png)

1. 選擇您已建立的 **AWS WAF Web ACL**，或選擇在 **中建立 Web ACL AWS WAF**，以在 的新 AWS WAF 工作階段中建立一個 AWS 管理主控台。

1. 選擇**儲存變更**。

若要以程式設計方式將 Web ACL 與 AWS Command Line Interface 或 SDK 中的使用者集區建立關聯，請從 AWS WAF API 使用 [AssociateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html)。Amazon Cognito 沒有關聯 Web ACL 的單獨 API 操作。

## 測試和記錄 AWS WAF Web ACLs
<a name="user-pool-waf-evaluating-and-logging"></a>

當您將規則動作設定為 Web ACL 中的**計數**時， 會將請求 AWS WAF 新增至符合規則的請求計數。如要使用您的使用者集區測試 Web ACL，請將規則動作設定為 **Count** (計數)，並考慮與每個規則相符的請求量。例如，若您要設定為 **Block** (封鎖) 動作的規則與您確定為正常使用者流量的大量請求相符合，您可能需要重新設定您的規則。如需詳細資訊，請參閱《 開發人員指南》中的[測試和調校您的 AWS WAF 保護](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-testing.html)。 *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 流量](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html)。

AWS WAF Web ACLs可在所有使用者集區[功能計劃](cognito-sign-in-feature-plans.md)中使用。的安全功能可 AWS WAF 補充 Amazon Cognito 威脅防護。您可於使用者集區中啟動這兩項功能。 AWS WAF 會單獨用於檢查使用者集區請求的帳單。如需詳細資訊，請參閱[AWS WAF 定價](https://aws.amazon.com/waf/pricing)。

記錄 AWS WAF 請求資料需由您以日誌為目標的服務額外計費。如需詳細資訊，請參閱《*AWS WAF 開發人員指南*》中的[記錄 Web ACL 流量資訊的定價](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html#logging-pricing)。