用 AWS WAF 於在 API Gateway 中保護您的其餘 API - Amazon API 网关

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

用 AWS WAF 於在 API Gateway 中保護您的其餘 API

AWS WAF 是一種網絡應用程序防火牆,可幫助保護 Web 應用程序和 API 免受攻擊。可讓您設定一組稱為 web 存取控制清單 (web ACL) 的規則,該組規則可根據您定義的可自訂 Web 安全規則與條件來允許、封鎖或計數 Web 請求。如需詳細資訊,請參閱如何 AWS WAF 運作

您可以使用 AWS WAF 來保護您的 API Gateway REST API 不受常見的 Web 入侵攻擊,例如 SQL 插入和跨網站指令碼 (XSS) 攻擊。這些可能會影響 API 可用性和效能、危及安全性,或耗用過多的資源。例如,您可以建立規則,允許或封鎖來自指定 IP 地址、來自 CIDR 區塊的請求,或源自特定國家或區域,其中包含惡意 SQL 程式碼或惡意指令碼的請求。

您也可以在 HTTP 標頭、方法、查詢字串、URI 和要求主體 (限制在前 64 KB) 中建立符合指定字串或規則運算式模式的規則。此外,您可以建立規則以封鎖來自特定使用者代理程式、惡意機器人和內容抓取器的攻擊。例如,您可以使用以速率為基礎的規則,以指定每個用戶端 IP 在尾隨、持續更新的 5 分鐘期間,允許的 Web 請求數。

重要

AWS WAF 是您針對網絡漏洞利用的第一道防線。在 API 上啟 AWS WAF 用時, AWS WAF 規則會先評估其他存取控制功能 (例如資源政策、IAM 政策Lambda 授權者Amazon Cognito 授權者)。例如,如果 AWS WAF 封鎖來自資源原則允許之 CIDR 區塊的存取,則優 AWS WAF 先順序且不會評估資源原則。

要 AWS WAF 為您的 API 啟用,您需要執行以下操作:

  1. 使用 AWS WAF 主控台、 AWS SDK 或 CLI 建立 Web ACL,其中包含所需的 AWS WAF 受管規則和您自訂規則的組合。如需詳細資訊,請參閱開始使用 AWS WAFWeb 存取控制清單 (Web ACL)

    重要

    API Gateway 需要區域應用程式或 AWS WAFV2 網路 ACL 的 AWS WAF Classic 區域性 網頁 ACL。

  2. 建立 AWS WAF 網頁 ACL 與 API 階段的關聯。您可以使用 AWS WAF 主控台、 AWS SDK、CLI 或使用 API Gateway 主控台來執行此操作。

使用 API Gateway 主控台將 AWS WAF 網頁 ACL 與 API Gateway API 階段建立關聯

若要使用 API Gateway 主控台將 AWS WAF Web ACL 與現有的 API Gateway API 階段建立關聯,請使用下列步驟:

  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  2. 選擇現有的 API 或建立新的 API。

  3. 在主導覽窗格中,選擇階段,然後選擇一個階段。

  4. 階段詳細資訊區段中,選擇編輯

  5. Web 應用程式防火牆 (AWS WAF) 下,選取您的 Web ACL。

    如果您正在使用 AWS WAFV2,請為區域應用程式選取 AWS WAFV2 Web ACL。Web ACL 及其使用的任何其他 AWS WAFV2 資源必須與您的 API 位於相同的區域中。

    如果您正在使用 AWS WAF Classic 區域性,請選取區域網頁 ACL。

  6. 選擇儲存變更

使用「」將 AWS WAF 網頁 ACL 與 API Gateway API 階段建立關聯 AWS CLI

若要使用 AWS CLI 將區域應用程式的 AWS WAFV2 Web ACL 與現有的 API Gateway API 階段建立關聯,請呼叫associate-web-acl命令,如下列範例所示:

aws wafv2 associate-web-acl \ --web-acl-arn arn:aws:wafv2:{region}:111122223333:regional/webacl/test-cli/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --resource-arn arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod

若要使用 AWS CLI 將 AWS WAF Classic 區域性 Web ACL 與現有 API Gateway API 階段產生關聯,請呼叫associate-web-acl命令,如下列範例所示:

aws waf-regional associate-web-acl \ --web-acl-id 'aabc123a-fb4f-4fc6-becb-2b00831cadcf' \ --resource-arn 'arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod'

使用 AWS WAF REST API 將 AWS WAF 網路 ACL 與 API 階段建立關聯

若要使用 AWS WAFV2 REST API 將區域應用程式的 AWS WAFV2 Web ACL 與現有的 API Gateway API 階段相關聯,請使用 AssociateWebACL 命令,如下列範例所示:

import boto3 wafv2 = boto3.client('wafv2') wafv2.associate_web_acl( WebACLArn='arn:aws:wafv2:{region}:111122223333:regional/webacl/test/abc6aa3b-fc33-4841-b3db-0ef3d3825b25', ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod' )

若要使用 AWS WAF REST API 來建立 AWS WAF Classic 區域性 網頁 ACL 與現有 API Gateway API 階段的關聯,請使用 AssociateWebACL 命令,如下列範例所示:

import boto3 waf = boto3.client('waf-regional') waf.associate_web_acl( WebACLId='aabc123a-fb4f-4fc6-becb-2b00831cadcf', ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod' )