在多區域、多帳戶組織中設定 AWS CloudFormation 漂移偵測 - AWS 方案指引

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

在多區域、多帳戶組織中設定 AWS CloudFormation 漂移偵測

由拉姆·康達斯瓦米(AWS)創建

環境:生產

技術:管理與治理、雲端原生、基礎架構、營運、現代化

工作負載:所有其他工作

AWS 服務:Amazon SNS;AWS Config;AWS Lambda;AWS CloudFormation

Summary

Amazon Web Services (AWS) 上的客戶通常都在尋找一種有效的方法來偵測資源組態不相符,包括 AWS CloudFormation 堆疊中的漂移,並儘快修復它們。使用 AWS Control Tower 或 AWS 登陸區域解決方案時,尤其是這種情況。

此模式提供了規範性的解決方案,藉由使用合併的資源組態變更並採取這些變更來產生結果,有效地解決問題。此解決方案是針對在多個區域或多個帳戶或兩者的組合中建立多個 CloudFormation 堆疊的案例而設計。該解決方案的目標如下:

  • 簡化漂移檢測過程

  • 設定通知和警示

  • 設定合併報告

先決條件和限制

先決條件

  • 在必須監控的所有區域和帳戶中啟用 AWS Config

限制

  • 產生的報告僅支援 .csv 或 .json 輸出格式。

架構

目標技術堆疊

目前的指引將協助組織使用下列服務的組合來達成目標:

  • AWS Config 規則

  • Amazon CloudWatch 法則 

  • AWS Identity and Access Management (IAM)

  • AWS Lambda

  • Amazon Simple Notification Service (Amazon SNS)

  1. AWS 組態規則可偵測漂移。

  2. 其他帳戶中的漂移偵測結果會傳送至管理帳戶。

  3. 該 CloudWatch 規則會呼叫 Lambda。

  4. Lambda 會查詢 AWS Config 規則以取得彙總結果。

  5. Lambda 通知 Amazon SNS,該 SNS 會發送有關漂移的電子郵件通知。

自動化和規模

此處介紹的解決方案可以針對其他區域和帳戶進行擴展。

工具

AWS 組態 — AWS Config 提供 AWS 帳戶中 AWS 資源組態的詳細檢視。這包含資源彼此之間的關係和之前的組態方式,所以您可以看到一段時間中組態和關係的變化。使用 AWS Config,您可以評估、稽核和評估 AWS 資源的組態。

Amazon CloudWatch — Amazon 即時 CloudWatch 監控您的 AWS 資源和您在 AWS 上執行的應用程式。您可以用 CloudWatch 來收集和追蹤指標,這些指標是您可以針對資源和應用程式測量的變數。

AWS Lambda — AWS Lambda 是一種運算服務,可支援執行程式碼,而無需佈建或管理伺服器。Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。只需為使用的運算時間支付費用,一旦未執行程式碼,就會停止計費。

Amazon SNS — Amazon Simple Notification Service (Amazon SNS) 是一種受管服務,可提供從發佈者到訂閱者 (也稱為生產者和消費者) 的訊息傳遞。

史诗

任務描述所需技能
建立彙總器。

在 AWS Config 主控台上,在管理帳戶中建立彙總工具。確定已開啟資料複寫,以便 AWS Config 可以從來源帳戶擷取資料。此外,請選取所有適用的地區和帳戶。您可以根據組織選取帳戶。這是建議使用的方法,因為組織中的新帳戶會自動成為彙總器的一部分。

雲端架構師
建立 AWS 受管規則。

新增 cloudformation-stack-drift-detection-check AWS 受管規則。規則需要一個參數值:cloudformationArn。輸入具有偵測堆疊漂移許可的 IAM 角色 Amazon 資源名稱 (ARN)。此外,該角色必須具有可讓 AWS Config 擔任該角色的信任政策。

雲端架構師
建立彙總器的進階查詢區段。

若要從多個來源擷取漂移的堆疊,請建立下列查詢:

SELECT resourceId, configuration.driftInformation.stackDriftStatus WHERE resourceType = 'AWS::CloudFormation::Stack'  AND configuration.driftInformation.stackDriftStatus IN ('DRIFTED')

雲架構師、開發人員
自動執行查詢並發佈。

使用所附加的程式碼建立 Lambda 函數。Lambda 會將結果發佈到 Amazon SNS 主題,該主題在 Lambda 函數中以環境變數形式提供。此外,若要接收警示,請建立現有 Amazon SNS 主題的電子郵件訂閱。

雲架構師、開發人員
建立 CloudWatch 規則。

建立以排程為基礎的 CloudWatch 規則,以呼叫 Lambda 函數,此函數負責警示。

雲端架構師

資源

其他資訊

考量

使用涉及特定時間間隔的 API 呼叫的自訂解決方案,在每個 CloudFormation 堆疊或堆疊集上啟動漂移偵測並不是最佳選擇。它會導致大量 API 調用並影響性能。由於 API 呼叫的數目,可能會發生節流。另一個潛在問題是,如果僅根據排程識別資源變更,則偵測延遲。

常見問答集

問:是否應該搭配 AWS 著陸區使用附加元件型解決方案?

答:由於 AWS Config 中提供進階查詢功能以及彙總器,建議您使用 AWS Config 而不是附加元件。

問:這個解決方案如何解決 CloudFormation StackSets?

答:由於堆棧集是由堆棧組成的,因此您可以使用此解決方案。堆疊執行個體詳細資料也可做為解決方案的一部分使用。

附件

若要存取與此文件相關聯的其他內容,請解壓縮下列檔案:attachment.zip