透過偏離偵測偵測偵測堆疊和資源的未受管組態變更 - AWS CloudFormation

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

透過偏離偵測偵測偵測堆疊和資源的未受管組態變更

即使您透過 管理您的資源 CloudFormation,使用者仍可在 之外變更這些資源 CloudFormation。使用者可以使用建立資源的基礎服務來直接編輯資源。例如,您可以使用 Amazon EC2主控台來更新作為 CloudFormation 堆疊一部分建立的伺服器執行個體。有些變更可能是意外,有些則是為了回應時間急迫性運作事件而刻意為之。無論如何,在 之外進行的變更 CloudFormation 可能會使堆疊更新或刪除操作複雜化。您可以使用偏離偵測來識別在 CloudFormation 管理之外對哪些堆疊資源進行組態變更。然後,您可以採取矯正動作,讓堆疊資源與堆疊範本中的定義再次同步,例如直接更新偏離的資源,以符合其範本定義。解決偏離有助於確保組態一致性和成功的堆疊操作。

什麼是偏離?

漂移偵測可讓您偵測堆疊的實際組態是否不同於 (或已漂移) 其預期組態。使用 CloudFormation 偵測整個堆疊或堆疊內個別資源上的偏離。如果資源的任何實際屬性值不同於預期的屬性值,資源就視為已偏離。這包括是否已刪除屬性或資源。如果堆疊的一個或多個資源已偏離,堆疊就視為已偏離。

若要判斷資源是否偏離, CloudFormation 請決定堆疊範本中定義的預期資源屬性值,以及指定為範本參數的任何值。 CloudFormation 然後, 會將這些預期值與目前存在於堆疊中的這些資源屬性實際值進行比較。如果資源的一個或多個屬性已遭刪除,或值已變更,資源就視為已偏離。

CloudFormation 會針對已漂移的堆疊中的每個資源產生詳細資訊。

CloudFormation 會偵測那些支援偏離偵測 AWS 的資源上的偏離。不支援漂移偵測的資源會被指派 NOT_ 的漂移狀態CHECKED。如需支援偏離偵測 AWS 的資源清單,請參閱 資源類型支援

此外, CloudFormation 支援對可佈建 的私有資源類型進行偏離偵測;也就是佈建類型為 FULLY_MUTABLE或 的私有資源類型IMMUTABLE。若要對私人資源類型的資源執行漂移偵測,您在帳號中註冊之資源類型的預設版本必須是可佈建的資源。如需資源佈建類型的詳細資訊,請參閱 的 ProvisioningType 參數 DescribeType AWS CloudFormation API參考 和 中的 動作 DescribeType 命令AWS CLI 參考 中的 命令。如需私有資源的詳細資訊,請參閱 使用 CloudFormation 登錄檔管理擴充功能

您可以在處於下列狀態的堆疊上執行漂移偵測:CREATE_COMPLETEUPDATE_COMPLETEUPDATE_ROLLBACK_COMPLETEUPDATE_ROLLBACK_FAILED

偵測堆疊上的漂移時, CloudFormation 不會偵測屬於該堆疊的任何巢狀堆疊上的漂移。如需詳細資訊,請參閱使用巢狀堆疊在其他堆疊中嵌入堆疊。反而是,您可以直接在巢狀堆疊上啟動漂移偵測操作。

注意

CloudFormation 只會透過堆疊範本或指定範本參數,來判斷明確設定之屬性值的偏離。這不包含資源屬性的預設值。若要 CloudFormation 追蹤資源屬性以判斷偏離,請明確設定屬性值,即使您將其設定為預設值。

漂移偵測狀態碼

本節中的表格描述用於漂移偵測的各種狀態類型:

  • 漂移偵測操作狀態描述漂移操作的目前狀態。

  • Drift status (偏離狀態)

    針對「堆疊集合」,這會描述整個堆疊集合的偏離狀態,而此狀態是以屬於該堆疊集合堆疊執行個體的偏離狀態為基礎。

    針對「堆疊執行個體」,這會描述堆疊執行個體的偏離狀態,而此狀態是以其相關聯堆疊的偏離狀態為基礎。

    針對「堆疊」,這會描述整個堆疊的偏離狀態,而此狀態是以其資源的偏離狀態為基礎。

  • 資源偏離狀態描述個別資源的偏離狀態。

下表列出 CloudFormation 指派給堆疊偏離偵測操作的狀態碼。

漂移偵測操作狀態 描述

DETECTION_COMPLETE

對於堆疊中支援漂移偵測的所有資源,堆疊漂移偵測操作已成功完成。

DETECTION_FAILED

堆疊中至少一個資源的堆疊漂移偵測操作已失敗。結果將可用於 CloudFormation 成功完成偏離偵測的資源。

DETECTION_IN_PROGRESS

堆疊漂移偵測操作目前進行中。

下表列出 CloudFormation 指派給堆疊的偏離狀態碼。

Drift status (偏離狀態) 描述

DRIFTED

針對堆疊:堆疊不同於或已「偏離」其預期範本組態。如果堆疊的一個或多個資源已偏離,堆疊就視為已偏離。

針對堆疊執行個體:如果與其相關聯的堆疊已發生偏離,則會將堆疊執行個體視為已偏離。

針對堆疊集合:如果有一或多個堆疊執行個體已發生偏離,則會將堆疊集合視為已偏離。

NOT_CHECKED

CloudFormation 尚未檢查堆疊、堆疊集或堆疊執行個體是否與其預期的範本組態不同。

IN_SYNC

每個受支援資源的目前組態符合其預期範本組態。沒有支援偏離偵測之資源的堆疊、堆疊集或堆疊執行個體也會有 IN_ 狀態SYNC。

下表列出 CloudFormation 指派給堆疊資源的偏離狀態碼。

資源偏離狀態 描述

DELETED

資源不同於其預期範本組態,因為已刪除資源。

MODIFIED

資源不同於其預期範本組態。

NOT_CHECKED

CloudFormation 尚未檢查資源是否與其預期的範本組態不同。

IN_SYNC

資源的目前組態符合其預期範本組態。

下表列出 CloudFormation 指派給資源屬性的差異類型狀態碼,這些屬性與其預期的範本組態不同。

屬性差異類型 描述

ADD

作為陣列或清單資料類型的資源屬性已新增一個值。

REMOVE

已從目前的資源組態中移除屬性。

NOT_EQUAL

目前的屬性值不同於堆疊範本中定義的預期值。

偵測偏離時的考量

為了在堆疊上成功執行漂移偵測,使用者必須有以下許可:

  • 對於堆疊包含的每個支援漂移偵測的資源,需要有讀取許可。例如,如果堆疊包含 AWS::EC2::Instance 資源,則您必須有 ec2:DescribeInstances 許可,才能在堆疊上執行漂移偵測。

  • cloudformation:DetectStackDrift

  • cloudformation:DetectStackResourceDrift

  • cloudformation:BatchDescribeTypeConfigurations

如需在 中設定許可的詳細資訊 CloudFormation,請參閱 使用 控制 CloudFormation 存取 AWS Identity and Access Management

在某些情況下, CloudFormation 可能無法一律傳回準確的偏離結果。您應該注意這些極端案例,以適當解讀您的漂移偵測結果。

  • 在某些情況下,屬性陣列包含的物件會回報為偏離,而事實上,它們是由負責資源的基礎服務提供給屬性的預設值。

  • 某些資源與相關資源之間存在附加關係,以致於一個資源實際上可能連接或移除其他資源 (在同一個或另一個範本中定義) 的屬性值。例如,AWS::EC2::SecurityGroupIngressAWS::EC2::SecurityGroupEgress 資源可用來連接和移除 AWS::EC2::SecurityGroup 資源的值。在這些情況下, 會在執行偏離比較之前 CloudFormation 分析附件的堆疊範本。不過, CloudFormation 無法跨堆疊執行此分析,因此 可能不會傳回連接資源位於不同堆疊中的準確偏離結果。

    支援漂移偵測且允許或需要從其他資源附加的資源包括:

    資源類型 附加資源類型

    AWS::SNS::Topic

    AWS::SNS::Subscription

    AWS::IAM::User

    AWS::IAM::UserToGroupAddition

    AWS::IAM::Group

    AWS::IAM::Role

    AWS::IAM::User

    AWS::IAM::Policy

    AWS::IAM::ManagedPolicy

    AWS::ElasticLoadBalancingV2::Listener

    AWS::ElasticLoadBalancingV2::ListenerCertificate

    AWS::EC2::SecurityGroup

    AWS::EC2::SecurityGroupEgress

    AWS::EC2::SecurityGroupIngress

  • CloudFormation 不會對任何資源的 KMSKeyId 屬性執行偏離偵測。由於 AWS KMS 金鑰可以由多個別名參考, CloudFormation 因此無法保證此屬性的一致準確偏離結果。

  • 您可以在堆疊範本中指定某些資源屬性,根據其性質, CloudFormation 將無法與產生的堆疊資源中的屬性進行比較。因此,這些屬性無法納入漂移偵測結果中。這些屬性分為兩大類:

    • CloudFormation 無法在堆疊範本中對應回其初始資源屬性值的屬性值。

      例如, CloudFormation 無法將 Lambda 函數的原始程式碼映射回 Code 的 屬性類型 AWS::Lambda::Function 資源,因此 CloudFormation 無法將其包含在偏離偵測結果中。

    • 負責資源的服務不會傳回的屬性值。

      某些屬性值原本就不可能由資源所屬的服務傳回。這些通常包含機密資訊,例如,不應公開的密碼或其他敏感資料。例如,IAM服務永遠不會傳回 的 Password 屬性值 AWS::IAM::User LoginProfile 屬性類型,因此 CloudFormation 無法將其包含在偏離偵測結果中。

    • 陣列中的物件實際上可能是服務預設,而不是手動新增的漂移。

  • 如果您遇到任何誤報,請使用 CloudFormation 主控台中的意見回饋連結傳送您的意見給我們,或透過 與我們聯絡AWS re:Post

  • 部分屬性的輸入值可能會相等但不相同。為避免誤報,您應確保預期組態與實際組態相符。

    • 例如,資源屬性的預期組態可能是 1024 MB,而相同資源屬性的實際組態可能是 1 GB。1024 MB 和 1 GB 相等,但不相同。

      如果在此資源屬性上執行漂移偵測,漂移偵測會發出漂移結果訊號。

      若要避免此誤報,請將資源屬性的預期組態變更為 1024 MB,然後執行漂移偵測。