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

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

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

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

環境:生產

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

工作負載:所有其他工作負載

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

Summary

使用 Amazon Web Services (AWS) 的客戶通常會尋找一種有效的方式來偵測資源組態不相符項目 (包括 AWS CloudFormation 堆疊中的漂移),並儘快修正這些項目。特別是使用 AWS 控制塔或 AWS 登陸區解決方案的情況。

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

  • 簡化漂移偵測過程

  • 設定通知和警示

  • 設定合併報告

先決條件和限制

先決條件

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

限制

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

Architecture

目標技術堆疊

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

  • AWS Config 規則

  • Amazon CloudWatch 規則 

  • AWS Identity and Access Management (IAM)

  • AWS Lambda

  • Amazon Simple Notification Service (Amazon SNS)

  1. AWS Config 規則會偵測漂移。

  2. 其他帳戶的漂移檢測結果被發送到管理帳戶。

  3. 雲端監視規則會呼叫 Lambda。

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

  5. Lambda 通知 Amazon SNS,它發送漂移的電子郵件通知。

自動化和擴充

此處提供的解決方案可以擴充其他區域和帳戶。

Tools

AWS Config— 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) 是一種受管服務,可提供發佈商到訂閱者 (也稱為生產者和消費者) 的訊息傳遞。

Epics

任務描述所需技能
建立彙整工具。

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

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

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

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

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

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

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

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

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

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

雲端架構師

資源

其他資訊

考量

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

常見問答集

問:是否應該在 AWS 登陸區使用基於附加元件的解決方案?

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

問:此解決方案如何解決 CloudFormation StackSets?

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

Attachments

attachment.zip