

**推出 的新主控台體驗 AWS WAF**

您現在可以使用更新後的體驗，在主控台的任何位置存取 AWS WAF 功能。如需詳細資訊，請參閱[使用 主控台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

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

# 地理比對規則陳述式
地理比對地理比對陳述式現在會將標籤新增至國家和區域的請求

您現在可以將地理比對與標籤比對結合，在區域層級管理地理請求原始伺服器。

本節說明什麼是地理比對陳述式及其運作方式。

使用地理或地理比對陳述式，根據原始國家/地區和區域來管理 Web 請求。地理比對陳述式會將標籤新增至 Web 請求，指出來源國家/地區和來源區域。無論陳述式條件是否符合請求，它都會新增這些標籤。地理比對陳述式也會針對請求的原始國家/地區執行比對。

## 如何使用地理比對陳述式


您可以使用地理比對陳述式進行國家或地區比對，如下所示：
+ **國家**/地區 — 您可以使用地理比對規則本身，僅根據請求的來源國家/地區來管理請求。規則陳述式符合國家/地區代碼。您也可以遵循地理比對規則，並在原始國家/地區標籤上使用符合的標籤比對規則。
**注意**  
若要篩選來自香港的流量，請使用地理比對陳述式`HK`中的 ISO 3166-1 alpha-2 國家/地區代碼。
+ **區域** — 使用地理比對規則，後面接著標籤比對規則，根據其來源區域來管理請求。您無法單獨使用地理比對規則來比對區域代碼。

如需使用標籤比對規則的詳細資訊，請參閱 [標籤比對規則陳述式](waf-rule-statement-type-label-match.md)和 [中的 Web 請求標籤 AWS WAF](waf-labels.md)。

## 地理比對陳述式的運作方式


使用地理比對陳述式， AWS WAF 管理每個 Web 請求，如下所示：

1. **確定請求的國家和區域代碼** — 根據請求的 IP 地址 AWS WAF 確定請求的國家和區域。根據預設， AWS WAF 會使用 Web 請求原始伺服器的 IP 地址。您可以在規則陳述式設定中啟用轉送的 IP 組態`X-Forwarded-For`， AWS WAF 指示 使用來自替代請求標頭的 IP 地址，例如 。

   AWS WAF 決定使用 MaxMind GeoIP 資料庫的請求位置。MaxMind 在國家/地區層級報告非常高的資料準確性，但準確性會根據國家/地區和 IP 類型等因素而有所不同。如需 MaxMind 的詳細資訊，請參閱 [MaxMind IP 地理位置](https://support.maxmind.com/hc/en-us/sections/4407519834267-IP-Geolocation)。如果您認為任何 GeoIP 資料不正確，您可以在 [MaxMind Correct GeoIP2 Data](https://support.maxmind.com/hc/en-us/articles/4408252036123-GeoIP-Correction) 向 Maxmind 提交更正請求。

   AWS WAF 使用國際標準化組織 (ISO) 3166 標準中的 alpha-2 國家和區域代碼。您可以在下列位置找到代碼：
   + 在 ISO 網站上，您可以在 [ISO Online Browsing Platform (OBP)](https://www.iso.org/obp/ui#home) 搜尋國家/地區代碼。
   + 在維基百科，國家/地區代碼列於 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)。

     國家/地區的區域代碼列於 URL `https://en.wikipedia.org/wiki/ISO_3166-2:<ISO country code>`。例如，美國區域位於 [ISO 3166-2：US](https://en.wikipedia.org/wiki/ISO_3166-2:US)，烏克蘭區域位於 [ISO 3166-2：UA](https://en.wikipedia.org/wiki/ISO_3166-2:UA)。

1. **決定要新增至請求的國家/地區標籤和區域標籤** — 這些標籤指出地理比對陳述式是使用原始 IP 還是轉送 IP 組態。
   + **原始 IP** 

     國家/地區標籤為 `awswaf:clientip:geo:country:<ISO country code>`。美國的範例：`awswaf:clientip:geo:country:US`。

     區域標籤為 `awswaf:clientip:geo:region:<ISO country code>-<ISO region code>`。美國奧勒岡州的範例：`awswaf:clientip:geo:region:US-OR`。
   + **轉送的 IP** 

     國家/地區標籤為 `awswaf:forwardedip:geo:country:<ISO country code>`。美國的範例：`awswaf:forwardedip:geo:country:US`。

     區域標籤為 `awswaf:forwardedip:geo:region:<ISO country code>-<ISO region code>`。美國奧勒岡州的範例：`awswaf:forwardedip:geo:region:US-OR`。

   如果請求指定的 IP 地址無法使用國家/地區或區域代碼，則 AWS WAF 會在 `XX`標籤中使用 來取代 值。例如，下列標籤適用於無法使用國家/地區碼的用戶端 IP：`awswaf:clientip:geo:country:XX`而下列標籤適用於轉送 IP，其國家/地區為美國，但其區域碼無法使用：`awswaf:forwardedip:geo:region:US-XX`。

1. **根據規則條件評估請求的國家/地區代碼** 

地理比對陳述式會將國家和區域標籤新增至其檢查的所有請求，無論它是否找到相符項目。

**注意**  
AWS WAF 在規則的 Web 請求評估結束時新增任何標籤。因此，您針對地理比對陳述式中的標籤使用的任何標籤比對，都必須在包含地理比對陳述式的規則以外的個別規則中定義。

如果您只想要檢查區域值，則可以使用 Count動作和單一國家/地區代碼比對來撰寫地理比對規則，然後撰寫區域標籤的標籤比對規則。您必須提供地理比對規則的國家/地區代碼來評估，即使是此方法也是如此。您可以指定不太可能成為網站流量來源的國家/地區，以減少記錄和計數指標。

## CloudFront 分佈和 CloudFront 地理限制功能


對於 CloudFront 分佈，如果您使用 CloudFront 地理限制功能，請注意該功能不會轉送封鎖的請求 AWS WAF。它會將允許的請求轉送至 AWS WAF。如果您想要根據地理位置加上您可以在其中指定的其他條件來封鎖請求 AWS WAF，請使用 AWS WAF 地理比對陳述式，請勿使用 CloudFront 地理限制功能。

## 規則陳述式特性


**可巢狀** – 您可以巢狀此陳述式類型。

**WCUs ** – 1 個 WCU。

**設定** – 此陳述式使用以下設定：
+ **國家/地區代碼** – 要比較地理比對的國家/地區代碼陣列。這些必須是來自 ISO 3166 國際標準 alpha-2 國家 ISO 代碼的兩個字元國家/地區代碼，例如 `["US","CN"]`。
+ **（選用） 轉送 IP 組態** – 根據預設， AWS WAF 會使用 Web 請求原始伺服器中的 IP 地址來判斷原始國家/地區。或者，您可以將規則設定為在 HTTP 標頭中使用轉送的 IP，例如 `X-Forwarded-For` 。 AWS WAF 會使用標頭中的第一個 IP 地址。使用此組態，您也可以指定後援行為，以套用至標頭中 IP 地址格式不正確的 Web 請求。備用行為會將請求的相符結果設定為相符或不相符。如需詳細資訊，請參閱[使用轉送的 IP 地址](waf-rule-statement-forwarded-ip-address.md)。

## 尋找此規則陳述式的位置

+ 主控台上的**規則建置器** – 針對**請求選項**，選擇**來自所在國家/地區的原始伺服器**。
+ **API** – [GeoMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_GeoMatchStatement.html)

## 範例


您可以使用地理比對陳述式來管理來自特定國家或地區的請求。例如，如果您想要封鎖來自某些國家/地區的請求，但仍允許來自這些國家/地區的一組特定 IP 地址的請求，您可以建立將 動作設為 的規則，Block並建立下列巢狀陳述式，如虛擬程式碼所示：
+ AND 陳述式
  + 列出您要封鎖的國家/地區的地理比對陳述式
  + NOT 陳述式 
    + IP 集合陳述式，指定您要允許通過的 IP 地址

或者，如果您想要封鎖某些國家/地區的某些區域，但仍允許來自這些國家/地區的其他區域的請求，您可以先定義地理比對規則，並將 動作設為 Count。然後，定義符合新增地理比對標籤的標籤比對規則，並視需要處理請求。

下列虛擬程式碼說明此方法的範例：

1. Geo 比對陳述式列出具有您要封鎖之區域的國家/地區，但動作設為 Count。無論相符狀態為何，這都會標記每個 Web 請求，也可讓您計算感興趣的國家/地區的指標。

1. `AND` 具有封鎖動作的 陳述式
   + 標籤比對陳述式，指定您要封鎖之國家/地區的標籤
   + `NOT` 陳述式 
     + 標籤比對陳述式，指定您要允許透過哪些國家/地區的區域標籤

下列 JSON 清單顯示先前虛擬程式碼中所述的兩個規則的實作。這些規則會封鎖來自美國的所有流量，但來自奧勒岡州和華盛頓州的流量除外。地理比對陳述式會將國家和區域標籤新增至其檢查的所有請求。標籤比對規則會在地理比對規則之後執行，因此可以比對地理比對規則剛新增的國家和區域標籤。地理比對陳述式使用轉送 IP 地址，因此標籤比對也會指定轉送 IP 標籤。

```
{
   "Name": "geoMatchForLabels",
   "Priority": 10,
   "Statement": {
     "GeoMatchStatement": {
       "CountryCodes": [
         "US"
       ],
       "ForwardedIPConfig": {
           "HeaderName": "X-Forwarded-For",
           "FallbackBehavior": "MATCH"
       }
     }
   },
   "Action": {
     "Count": {}
   },
   "VisibilityConfig": {
     "SampledRequestsEnabled": true,
     "CloudWatchMetricsEnabled": true,
     "MetricName": "geoMatchForLabels"
   }
},
{
   "Name": "blockUSButNotOROrWA",
   "Priority": 11,
   "Statement": {
     "AndStatement": {
       "Statements": [
         {
           "LabelMatchStatement": {
             "Scope": "LABEL",
             "Key": "awswaf:forwardedip:geo:country:US"
           }
         },
         {
           "NotStatement": {
             "Statement": {
                "OrStatement": {
                  "Statements": [
                    {
                       "LabelMatchStatement": {
                         "Scope": "LABEL",
                         "Key": "awswaf:forwardedip:geo:region:US-OR"
                       }
                    },
                    {
                       "LabelMatchStatement": {
                         "Scope": "LABEL",
                         "Key": "awswaf:forwardedip:geo:region:US-WA"
                       }
                    }
                 ]
               }
             }
           }
         }
       ]
     }
   },
   "Action": {
     "Block": {}
   },
   "VisibilityConfig": {
     "SampledRequestsEnabled": true,
     "CloudWatchMetricsEnabled": true,
     "MetricName": "blockUSButNotOROrWA"
   }
}
```

另一個範例是，您可以將地理比對與以速率為基礎的規則結合，為特定國家或地區的使用者排定資源的優先順序。您可以為用於區分使用者的每個地理比對或標籤比對陳述式建立不同的速率型陳述式。為偏好的國家或地區的使用者設定較高的速率限制，並為其他使用者設定較低的速率限制。

下列 JSON 清單顯示地理比對規則，後面接著速率型規則，以限制來自美國的流量速率。這些規則允許來自奧勒岡州的流量以比來自國家/地區其他任何地方的流量更高的速率傳入。

```
{
  "Name": "geoMatchForLabels",
  "Priority": 190,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "geoMatchForLabels"
  }
},
{
  "Name": "rateLimitOregon",
  "Priority": 195,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 3000,
      "AggregateKeyType": "IP",
      "ScopeDownStatement": {
        "LabelMatchStatement": {
          "Scope": "LABEL",
          "Key": "awswaf:clientip:geo:region:US-OR"
        }
      }
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "rateLimitOregon"
  }
},
{
  "Name": "rateLimitUSNotOR",
  "Priority": 200,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 100,
      "AggregateKeyType": "IP",
      "ScopeDownStatement": {
        "AndStatement": {
          "Statements": [
            {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:clientip:geo:country:US"
              }
            },
            {
              "NotStatement": {
                "Statement": {
                  "LabelMatchStatement": {
                    "Scope": "LABEL",
                    "Key": "awswaf:clientip:geo:region:US-OR"
                  }
                }
              }
            }
          ]
        }
      }
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "rateLimitUSNotOR"
  }
}
```