Erkennen von nicht verwalteten Konfigurationsänderungen an Stacks und Ressourcen - AWS CloudFormation

Erkennen von nicht verwalteten Konfigurationsänderungen an Stacks und Ressourcen

Selbst wenn Sie Ihre Ressourcen mit CloudFormation verwalten, können Benutzer diese Ressourcen außerhalb von CloudFormation ändern. Benutzer können Ressourcen direkt bearbeiten, indem sie den zugrunde liegenden Service verwenden, der die Ressource erstellt hat. Beispielsweise können Sie mit der Amazon EC2-Konsole eine Server-Instance aktualisieren, die als Teil eines CloudFormation-Stacks erstellt wurde. Einige Änderungen können versehentlich oder absichtlich vorgenommen werden, um auf zeitkritische Betriebsereignisse zu reagieren. Unabhängig davon können Änderungen, die außerhalb von CloudFormation vorgenommen werden, Stack-Aktualisierungen oder Löschvorgänge erschweren. Mit der Abweichungserkennung können Sie Stack-Ressourcen identifizieren, an denen Konfigurationsänderungen außerhalb des CloudFormation-Managements vorgenommen wurden. Sie können dann Korrekturmaßnahmen ergreifen, damit Ihre Stack-Ressourcen wieder mit ihren Definitionen in der Stack-Vorlage synchronisiert sind, z. B. die abgewichenen Ressourcen direkt aktualisieren, sodass sie mit ihrer Vorlagendefinition übereinstimmen. Die Auflösung von Abweichungen trägt dazu bei, die Konsistenz der Konfiguration und erfolgreiche Stack-Operationen zu gewährleisten.

Was ist Abweichung?

Mit der Abweichungserkennung können Sie feststellen, ob die tatsächliche Konfiguration eines Stacks von seiner erwarteten Konfiguration abweicht. Verwenden Sie CloudFormation, um Abweichungen in einem gesamten Stack oder für einzelne Ressourcen innerhalb des Stacks zu erkennen. Eine Ressource gilt als abgewichen, wenn einer ihrer tatsächlichen Eigenschaftswerte von den erwarteten Eigenschaftswerten abweicht. Dies gilt auch, wenn die Eigenschaft oder Ressource gelöscht wurde. Ein Stack gilt als abgewichen, wenn eine oder mehrere seiner Ressourcen abgewichen sind.

Um zu bestimmen, ob eine Ressource abgewichen ist, bestimmt CloudFormation die erwarteten Ressourceneigenschaftswerte, wie sie in der Stack-Vorlage definiert sind, und alle als Vorlagenparameter angegebenen Werte. CloudFormation vergleicht dann diese Erwartungswerte mit den tatsächlichen Werten dieser Ressourceneigenschaften, wie sie derzeit im Stack vorhanden sind. Eine Ressource gilt als abgewichen, wenn eine oder mehrere ihrer Eigenschaften gelöscht wurden oder ihr Wert geändert wurde.

CloudFormation erzeugt detaillierte Informationen über jede Ressource im Stack, die abgewichen ist.

CloudFormation erkennt die Abweichung der AWS-Ressourcen, die die Abweichungserkennung unterstützen. Ressourcen, die die Abweichungserkennung nicht unterstützen, erhalten den Abweichungsstatus NOT_CHECKED. Eine Liste der AWS-Ressourcen, die die Abweichungserkennung unterstützen, finden Sie unter Ressourcen, die Import- und Abweichungserkennungsoperationen unterstützen.

Darüber hinaus unterstützt CloudFormation die Abweichungserkennung für private Ressourcentypen, die bereitstellbar sind, d. h. deren Bereitstellungstyp entweder FULLY_MUTABLE oder IMMUTABLE ist. Um eine Abweichungserkennung für einen privaten Ressourcentyp ausführen zu können, muss die Standardversion des Ressourcentyps, der in Ihrem Konto registriert ist, bereitstellbar sein. Weitere Informationen zum Ressourcenbereitstellungstyp finden Sie unter dem Parameter ProvisioningType der Aktion DescribeType im AWS CloudFormation API Reference und des Befehls DescribeType im AWS CLI Command Reference. Weitere Informationen zu privaten Ressourcen finden Sie unter Verwenden der CloudFormation-Registrierung.

Sie können die Abweichungserkennung für Stacks mit folgenden Status durchführen: CREATE_COMPLETE, UPDATE_COMPLETE, UPDATE_ROLLBACK_COMPLETE und UPDATE_ROLLBACK_FAILED.

Wenn die Abweichung eines Stacks erkannt wird, erkennt CloudFormation nicht die Abweichung von verschachtelten Stacks, die zu diesem Stack gehören. Stattdessen können Sie eine Abweichungserkennung direkt für den verschachtelten Stack durchführen.

Anmerkung

CloudFormation bestimmt nur die Abweichung für Eigenschaftswerte, die explizit festgelegt werden, entweder über die Stack-Vorlage oder durch die Angabe von Vorlagenparametern. Dies gilt nicht für Standardwerte für Ressourceneigenschaften. Um CloudFormation eine Ressourceneigenschaft zur Bestimmung der Abweichung nachverfolgen zu lassen, legen Sie den Eigenschaftswert explizit fest, auch wenn Sie ihn auf den Standardwert setzen.

Statuscodes für die Abweichungserkennung

Die Tabellen in diesem Abschnitt beschreiben die verschiedenen Statusarten, die bei der Abweichungserkennung verwendet werden:

  • Drift detection operation status (Abweichungserkennungs-Operationsstatus) beschreibt den aktuellen Zustand des Driftvorgangs.

  • Abweichungsstatus

    Bei Stack-Sets beschreibt dies den Abweichungsstatus des Stack-Sets als Ganzes basierend auf dem Abweichungsstatus der Stack-Instances, die zu ihm gehören.

    Bei Stack-Instances beschreibt dies den Abweichungsstatus der Stack-Instance basierend auf dem Abweichungsstatus des zugehörigen Stacks.

    Bei Stacks beschreibt dies den Abweichungsstatus des Stacks als Ganzes basierend auf dem Abweichungsstatus seiner Ressourcen.

  • Resource drift status (Ressourcen-Abweichungsstatus) beschreibt den Abweichungsstatus einer einzelnen Ressource.

Die folgende Tabelle listet die Statuscodes auf, die CloudFormation den Operationen zur Erkennung von Stack-Abweichungen zuordnet.

Drift Detection Operation Status (Abweichungserkennungs-Operationsstatus) Beschreibung

DETECTION_COMPLETE

Der Vorgang zur Erkennung der Stack-Abweichung wurde für alle Ressourcen im Stack, die die Abweichungserkennung unterstützen, erfolgreich abgeschlossen.

DETECTION_FAILED

Die Stack-Abweichungserkennung ist für mindestens eine Ressource im Stack fehlgeschlagen. Die Ergebnisse werden für Ressourcen verfügbar sein, bei denen die Abweichungserkennung erfolgreich von CloudFormation abgeschlossen wurde.

DETECTION_IN_PROGRESS

Der Vorgang zur Erkennung der Stack-Abweichung ist derzeit im Gange.

Die folgende Tabelle listet die Abweichungsstatuscodes auf, die CloudFormation den Stacks zuordnet.

Abweichungsstatus Beschreibung

DRIFTED

Bei Stacks: Der Stack unterscheidet sich von der erwarteten Vorlagenkonfiguration oder ist von ihr abgewichen. Ein Stack gilt als abgewichen, wenn eine oder mehrere seiner Ressourcen abgewichen sind.

Bei Stack-Instances: Eine Stack-Instance gilt als abgewichen, wenn der ihr zugeordnete Stack abgewichen ist.

Bei Stack-Sets: Ein Stack-Set gilt als abgewichen, wenn eine oder mehrere Stack-Instances abgewichen sind.

NOT_CHECKED

CloudFormation hat nicht überprüft, ob der Stack, das Stack-Set oder die Stack-Instance sich von der erwarteten Vorlagenkonfiguration unterscheidet.

IN_SYNC

Die aktuelle Konfiguration jeder unterstützten Ressource entspricht der erwarteten Vorlagenkonfiguration. Ein Stack, Stack-Set oder eine Stack-Instance ohne Ressourcen, die die Abweichungserkennung unterstützen, hat ebenfalls den Status IN_SYNC.

Die folgende Tabelle listet die Abweichungsstatuscodes auf, die CloudFormation den Stack-Ressourcen zuordnet.

Ressourcen-Abweichungsstatus Beschreibung

DELETED

Die Ressource unterscheidet sich von ihrer erwarteten Vorlagenkonfiguration, da die Ressource gelöscht wurde.

MODIFIED

Die Ressource unterscheidet sich von ihrer erwarteten Vorlagenkonfiguration.

NOT_CHECKED

CloudFormation hat nicht geprüft, ob die Ressource von ihrer erwarteten Vorlagenkonfiguration abweicht.

IN_SYNC

Die aktuelle Konfiguration der Ressource entspricht der erwarteten Vorlagenkonfiguration.

Die folgende Tabelle listet die Statuscodes vom Abweichungstypen auf, die CloudFormation den Ressourceneigenschaften zuordnet, die von ihrer erwarteten Vorlagenkonfiguration abweichen.

Eigenschaftsabweichungstypen Beschreibung

ADD

Ein Wert wurde zu einer Ressourceneigenschaft hinzugefügt, die ein Array- oder ein Listendatentyp ist.

REMOVE

Die Eigenschaft wurde aus der aktuellen Ressourcenkonfiguration entfernt.

NOT_EQUAL

Der aktuelle Eigenschaftswert unterscheidet sich von seinem erwarteten Wert, der in der Stack-Vorlage definiert ist.

Überlegungen zur Erkennung von Abweichungen

Um die Abweichungserkennung für einen Stack erfolgreich durchführen zu können, muss ein Benutzer über die folgenden Berechtigungen verfügen:

  • Leseberechtigung für jede Ressource im Stack, die die Abweichungserkennung unterstützt. Wenn der Stack beispielsweise eine AWS::EC2::Instance-Ressource enthält, müssen Sie die Berechtigung ec2:DescribeInstances haben, um die Abweichungserkennung für den Stack durchzuführen.

  • cloudformation:DetectStackDrift

  • cloudformation:DetectStackResourceDrift

Weitere Informationen zum Festlegen von Berechtigungen in CloudFormation finden Sie unter Zugriffssteuerung mit AWS Identity and Access Management.

In bestimmten Sonderfällen kann CloudFormation möglicherweise nicht immer genaue Abweichungsergebnisse liefern. Sie sollten sich dieser Sonderfälle bewusst sein, um die Ergebnisse Ihrer Abweichungserkennung richtig interpretieren zu können.

  • In bestimmten Fällen werden Objekte, die in Eigenschafts-Arrays enthalten sind, als Abweichung gemeldet, während sie in Wirklichkeit Standardwerte sind, die der Eigenschaft vom zugrunde liegenden Service, der für die Ressource verantwortlich ist, zur Verfügung gestellt werden.

  • Bestimmte Ressourcen haben Zuordnungsbeziehungen mit verwandten Ressourcen, sodass eine Ressource Eigenschaftswerte für eine andere Ressource hinzufügen oder entfernen könnte, die in derselben oder einer anderen Vorlage definiert sind. So können beispielsweise die Ressourcen AWS::EC2::SecurityGroupIngress und AWS::EC2::SecurityGroupEgress verwendet werden, um Werte in AWS::EC2::SecurityGroup-Ressourcen hinzuzufügen und zu entfernen. In diesen Fällen analysiert CloudFormation die Stack-Vorlage auf Zuordnungen, bevor es den Abweichungsvergleich durchführt. CloudFormation kann diese Analyse jedoch nicht Stack-übergreifend durchführen und liefert daher möglicherweise keine genauen Abweichungsergebnisse, wenn sich zugeordnete Ressourcen in verschiedenen Stacks befinden.

    Die folgenden Ressourcen unterstützen die Abweichungserkennung und ermöglichen oder erfordern Zuordnungen aus anderen Ressourcen:

    Ressourcentyp Zuordnungsressourcentyp
    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 führt keine Abweichungserkennung für die KMSKeyId-Eigenschaft von Ressourcen durch. Da AWS KMS-Schlüssel durch mehrere Aliase referenziert werden können, kann CloudFormation für diese Eigenschaft keine konstant genauen Abweichungsergebnisse garantieren.

  • Es gibt bestimmte Ressourceneigenschaften, die Sie in Ihrer Stack-Vorlage angeben können, die CloudFormation naturgemäß nicht mit den Eigenschaften in den resultierenden Stack-Ressourcen vergleichen kann. Diese Eigenschaften können daher nicht in die Ergebnisse der Abweichungserkennung einbezogen werden. Solche Eigenschaften lassen sich in zwei Kategorien einteilen:

    • Eigenschaftswerte, die CloudFormation nicht auf ihren ursprünglichen Ressourcen-Eigenschaftswert in der Stack-Vorlage zurückführen kann.

      So kann beispielsweise CloudFormation den Quellcode einer Lambda-Funktion nicht auf den Eigenschaftstyp Code der Ressource Function zurückführen und daher kann CloudFormation nicht in die Ergebnisse der Abweichungserkennung aufgenommen werden.

    • Eigenschaftswerte, die der Service, der für die Ressource verantwortlich ist, nicht zurückgibt.

      Es gibt bestimmte Eigenschaftswerte, die von vornherein nie von dem Service zurückgegeben werden, zu dem die Ressource gehört. Diese enthalten in der Regel vertrauliche Informationen, wie Passwörter oder andere sensible Daten, die nicht preisgegeben werden sollten. So gibt beispielsweise der Service IAM niemals den Wert der Eigenschaft Password des Eigenschaftstyps IAM User LoginProfile zurück, und deshalb kann CloudFormation ihn nicht in die Ergebnisse der Drifterkennung einbeziehen.

    • Objekte in einem Array: Es kann sich dabei um Service-Standards handeln, nicht um eine manuell hinzugefügte Abweichung.

  • Wenn Sie eine falsche positive Feststellung finden, senden Sie uns Ihre Kommentare über den Feedback-Link in der CloudFormation-Konsole oder kontaktieren Sie uns über die AWS-Foren unter https://forums.aws.amazon.com/.