使用 AWS WAF 來保護您的 AWS AppSync APIs - AWS AppSync

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

使用 AWS WAF 來保護您的 AWS AppSync APIs

AWS WAF 是 Web 應用程式防火牆,可協助保護 Web 應用程式和 APIs 免受攻擊。它可讓您設定一組規則,稱為 Web 存取控制清單 (Web ACL),以根據您定義的可自訂 Web 安全規則和條件,允許、封鎖或監控 (計數) Web 請求。當您將 AWS AppSync API與 整合時 AWS WAF,您可以更全面地控制和掌握 接受的HTTP流量API。若要進一步了解 AWS WAF,請參閱 AWS WAF 開發人員指南中的AWS WAF 運作方式

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

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

若要進一步了解支援的規則類型和其他 AWS WAF 功能,請參閱 AWS WAF 開發人員指南AWS WAF API 參考

重要

AWS WAF 是您防範 Web 漏洞的第一道防線。在 上 AWS WAF 啟用 時API,會在其他存取控制功能之前評估 AWS WAF 規則,例如API金鑰授權、IAM政策、OIDC權杖和 Amazon Cognito 使用者集區。

將 AppSync API與 整合 AWS WAF

您可以使用 AWS WAF AWS CLI AWS CloudFormation、 AWS Management Console或任何其他相容的用戶端API來整合 Appsync。

將 與 AWS AppSync API整合 AWS WAF
  1. 建立 AWS WAF Web ACL。如需使用AWS WAF 主控台 的詳細步驟,請參閱建立 Web ACL

  2. 定義 Web 的規則ACL。規則會在建立 Web 的過程中定義ACL。如需有關如何建構規則的資訊,請參閱AWS WAF 規則 。如需您可以為 定義的實用規則範例 AWS AppSync API,請參閱 建立 Web 的規則 ACL

  3. 將 Web ACL與 建立關聯 AWS AppSync API。您可以在AWS WAF 主控台AppSync 主控台 中執行此步驟。

    • 若要將 Web ACL與 AWS AppSync API AWS WAF 主控台中的 建立關聯,請遵循 AWS WAF 開發人員指南中的將 Web ACL與 AWS 資源建立關聯或取消關聯的指示。

    • 在主控台中 AWS AppSync 將 Web ACL與 AWS AppSync API建立關聯

      1. 登入 AWS Management Console 並開啟AppSync 主控台

      2. 選擇API您要與 Web 建立關聯的 ACL。

      3. 在導覽窗格中,選擇設定

      4. Web 應用程式防火牆區段中,開啟啟用 AWS WAF

      5. Web ACL 下拉式清單中,選擇要與您的 ACL建立關聯的 Web 名稱API。

      6. 選擇儲存,將 Web ACL 與您的 建立關聯API。

注意

在 AWS WAF 主控台ACL中建立 Web 之後,可能需要幾分鐘ACL的時間才能使用新的 Web。如果您在 Web 應用程式防火牆選單ACL中看不到新建立的 Web,請等待幾分鐘,然後重試步驟,將 Web ACL 與 建立關聯API。

注意

AWS WAF 整合僅支援即時端點Subscription registration message的事件。 AWS AppSync 會以錯誤訊息回應,而不是 Subscription registration message封鎖任何 start_ack 的訊息 AWS WAF。

將 Web ACL與 建立關聯後 AWS AppSync API,您將ACL使用 管理 Web AWS WAF APIs。除非您想要將 ACL與 AWS AppSync API不同的 Web 建立關聯,否則您不需要重新建立 Web 與 的關聯 AWS AppSync APIACL。

建立 Web 的規則 ACL

規則會定義如何檢查 Web 請求,以及當 Web 請求符合檢查條件時該怎麼做。規則本身不存在於 中 AWS WAF 。您可以在規則群組或定義規則ACL的 Web 中,依名稱存取規則。如需詳細資訊,請參閱AWS WAF 規則 。下列範例示範如何定義和關聯有助於保護 的規則 AppSync API。

範例 限制請求主體大小的 Web ACL規則

以下是限制請求主體大小的規則範例。在 AWS WAF 主控台ACL中建立 Web 時,這會輸入規則JSON編輯器

{ "Name": "BodySizeRule", "Priority": 1, "Action": { "Block": {} }, "Statement": { "SizeConstraintStatement": { "ComparisonOperator": "GE", "FieldToMatch": { "Body": {} }, "Size": 1024, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "BodySizeRule", "SampledRequestsEnabled": true } }

ACL 使用上述範例規則建立 Web 之後,您必須將其與 建立關聯 AppSync API。除了使用 之外 AWS Management Console,您也可以 AWS CLI 執行下列命令,在 中執行此步驟。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn

變更可能需要幾分鐘的時間才能傳播,但在執行此命令之後,包含大於 1024 個位元組內文的請求將被 拒絕 AWS AppSync。

注意

在 AWS WAF 主控台ACL中建立新 Web 之後,可能需要幾分鐘ACL的時間,才能讓 Web 與 建立關聯API。如果您執行 CLI 命令並發生錯誤WAFUnavailableEntityException,請等待幾分鐘,然後重試執行 命令。

範例 限制來自單一 IP 地址請求的 Web ACL規則

以下是從單一 IP 地址將 AppSync API限制為 100 個請求的規則範例。在 AWS WAF 主控台中建立ACL具有速率型規則的 Web 時,這會輸入規則JSON編輯器

{ "Name": "Throttle", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Throttle" }, "Statement": { "RateBasedStatement": { "Limit": 100, "AggregateKeyType": "IP" } } }

ACL 使用上述範例規則建立 Web 之後,您必須將其與 建立關聯 AppSync API。您可以執行下列命令 AWS CLI ,在 中執行此步驟。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn
範例 Web ACL規則,以防止 GraphQL __schema 對 的簡介查詢 API

以下是防止 GraphQL __schema 向 提出查詢的規則範例API。包含字串 "__schema" 的任何HTTP內文都會遭到封鎖。在 AWS WAF 主控台ACL中建立 Web 時,這會輸入規則JSON編輯器

{ "Name": "BodyRule", "Priority": 5, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "BodyRule" }, "Statement": { "ByteMatchStatement": { "FieldToMatch": { "Body": {} }, "PositionalConstraint": "CONTAINS", "SearchString": "__schema", "TextTransformations": [ { "Type": "NONE", "Priority": 0 } ] } } }

ACL 使用上述範例規則建立 Web 之後,您必須將其與 建立關聯 AppSync API。您可以執行下列命令 AWS CLI ,在 中執行此步驟。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn