概觀

本文件概述了針對 AWS 邊緣服務 (例如 CloudFront、Lambda@Edge 和 AWS WAF) 組態導入變更的最佳實務。這些變更可能包括更新 CloudFront 函數程式碼、修改 Lambda@Edge 函數的執行期、在 CloudFront 中新增快取行為、更新 WAF 規則,或啟用 HTTP/3 等新 CloudFront 功能。如果您具有相對靜態且簡單的組態,並且更偏好適用於手動管理的 UI,則可依靠 AWS Console。然而,針對更複雜的設定,建議善用 CI/CD 管道,以受控方式來部署組態變更和程式碼更新。

CI/CD 管道

基礎架構即程式碼 (IaaC)

CI/CD 管道透過提高開發速度、提供更高的程式碼品質,以及透過自動化減少人為錯誤,來增強軟體發布週期。AWS 邊緣服務 (例如 CloudFront) 和邊緣函數可使用基礎設施即程式碼 (IaC),在 CI/CD 管道內進行管理。邊緣資源可透過 API (例如 CloudFront 的 API)、AWS CLI 或更高層級抽象工具 (例如 CloudFormationTerraformAWS Cloud Development Kit (CDK)) 來部署邊緣資源。

以 CDK 為基礎的 IAC

CDK 以 CloudFormation 為基礎,可讓您使用程式設計語言來部署 AWS 資源,藉此提供最高等級的抽象。例如,下列三行 JavaScript 程式碼可部署一個 S3 儲存貯體,以 CloudFront 作為原點:

const myBucket = new s3.Bucket(this, 'myBucket');
new cloudfront.Distribution(this, 'myDist', {
  defaultBehavior: { origin: new origins.S3Origin(myBucket) },
});

查看 CDK 建構程式庫,獲取可重複使用的建構模組,以包含在 CDK 程式碼中。

部署和協同運作

在 CI/CD 管道中,您需要 AWS CodeCommit 等儲存庫來存放程式碼 (CDK 程式碼、邊緣函數程式碼)、AWS CodeDeploy 等工具來部署基礎設施,以及 AWS CodePipeline 等協同運作工具來管理管道步驟。這篇部落格文章示範了如何使用 AWS 開發人員工具來實作 CloudFront 的 CI/CD 管道,但您也可使用偏好的 CI/CD 工具。建置適用於 AWS 邊緣服務的 CI/CD 管道時,請考慮下列限制:

  • CloudFront、CloudFront Functions 和區域 AWS WAF WebACL 可從任何 AWS 區域部署
  • Lambda@Edge 和 CloudFront 的 WAF WAF WebACL 只能從維吉尼亞北部的 us-east-1 區域部署。
  • Firewall Manager 政策必須部署在 Firewall Manager 管理員 AWS 帳戶中

測試和暫存

您的邊緣組態可以在不同層級進行測試。首先,您可以在測試帳戶中使用 AWS WAF WebACL 複製您的基礎設施 (例如 CloudFront 分發)。這可在開發階段進行,或在前進至生產之前,用於執行自動化功能測試。請注意,您無法使用具有相同 CNAME 的兩個 CloudFront 分發。因此,您需要根據 CI/CD 階段,來區分 CloudFront 資源的 CNAME 組態。舉例來說,您可以將 CloudFront 的網域名稱 (例如 xyz.cloudfront.net) 用於開發階段,然後將專用 CNAME 用於暫存 (例如 staging.www.example.com),最後將公用 CNAME 用於生產環境部署 (例如 www.example.com)。您還可以按階段區分安全控制項,例如在暫存階段使用 AWS WAF 限制對特定 IP 的存取。

在新組態通過測試之後,您可以使用 CloudFront 的持續部署功能實作 Canary 發布方法,在生產環境中,針對一小部分流量測試變更。您可以使用此功能,為生產分佈建立不同的組態,並僅傳送部分全域流量。您可以採用兩種選項來將流量路由到新組態:使用特定要求標頭,這對於進行合成測試相當實用,或使用加權政策將可配置的流量百分比路由到新組態,並可選擇啟用黏性。在此功能的目前版本中,您僅能在 CloudFront 組態參數的子集上測試變更。請參閱文件,以進一步了解您可使用此功能測試的內容。

動態組態

考慮一個案例,其中多個團隊對 CloudFront 組態導入變更,但單一團隊會管理所有團隊的 CI/CD 管道。例如,不同的團隊可管理單獨的微型服務,所有團隊都會在單一 CloudFront 分發託管的主網域上暴露其 API。如果您允許每個團隊存取 CloudFront 分佈的完整組態,就會增加單一惡性變更的影響範圍。相反地,如果您只允許 CI/CD 團隊對 CloudFront 分佈進行變更,則會降低開發速度並在發布生命週期中產生瓶頸。取而代之的是,您可根據每個微型服務團隊擁有的部分組態,動態產生組態。在簡單的實作中,每個團隊都可在託管於 S3 儲存貯體中的文字型檔案中,管理自己的路由 (快取、邊緣函數等)。您可以在您的 CI/CD 管道中導入一個額外的步驟,以使用不同的部分組態檔案,動態建立最終 CloudFront 組態。

AWS WAF 和 AWS Shield 部署

您可以在 CI/CD 管道中使用前述的相同工具來部署 Shield 和 WAF 服務。

但是,建議您使用 AWS Firewall Manager 來部署 WAF 規則和 Shield 防護,以獲得以下優勢:

  • 有助於執行中央安全管理 (例如將中央規則部署與應用程式團隊管理的規則結合)
  • 它提供更快的部署,這對於使用 AWS WAF 修補重大漏洞至關重要。
  • 它可簡化跨帳戶和異質 CI/CD 管道的部署 (例如,從擷取中繼承)。然而,採用這種方法,如果您使用具有漂移偵測的 CI/CD 管道,則需要管理漂移。

此外,您可以使用 CI/CD 管道來變更管理員帳戶中的 Firewall Manager 政策,這些政策則由 Firewall Manager 部署於您的 AWS 組織中,如 OLX 所示範。

您可以使用不同的策略,將 WAF 規則安全地部署到您的生產環境。您可以在計數模式中將新規則新增至現有 WebACL,然後將其變更為封鎖模式。但是,使用這種方法時,您需要注意 WebACL 的最大 WCU。另一種方法是將變更部署到暫存 WebACL,並在暫存環境中測試變更。

資源

本頁面對您是否有幫助?