CloudFormation Ingest-Stack: Beispiele für CFN-Validatoren - AMS-Leitfaden für fortgeschrittene Anwendungsentwickler

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

CloudFormation Ingest-Stack: Beispiele für CFN-Validatoren

Diese Beispiele können Ihnen helfen, Ihre Vorlage für eine erfolgreiche Aufnahme vorzubereiten.

Validierung des Formats

Stellen Sie sicher, dass die Vorlage einen Abschnitt „Ressourcen“ enthält und dass alle darunter definierten Ressourcen den Wert „Typ“ haben.

{ "AWSTemplateFormatVersion": "2010-09-09", "Description" : "Create a SNS topic", "Resources": { "SnsTopic": { "Type": "AWS::SNS::Topic" } } }

Stellen Sie sicher, dass die Stammschlüssel der Vorlage zulässig sind. Zulässige Stammschlüssel sind:

[ "AWSTemplateFormatVersion", "Description", "Mappings", "Parameters", "Conditions", "Resources", "Rules", "Outputs", "Metadata" ]

Eine manuelle Überprüfung erforderte eine Validierung

Wenn die Vorlage die folgenden Ressourcen enthält, schlägt die automatische Validierung fehl und Sie müssen manuell überprüft werden.

Die aufgeführten Richtlinien stellen aus Sicherheitsgründen Bereiche mit hohem Risiko dar. Eine S3-Bucket-Richtlinie, die es jedem außer bestimmten Benutzern oder Gruppen ermöglicht, Objekte zu erstellen oder Schreibberechtigungen zu erteilen, ist beispielsweise extrem gefährlich. Daher validieren wir die Richtlinien und genehmigen oder verweigern sie auf der Grundlage des Inhalts, und diese Richtlinien können nicht automatisch erstellt werden. Wir untersuchen mögliche Lösungsansätze für dieses Problem.

Derzeit verfügen wir nicht über eine automatisierte Validierung der folgenden Ressourcen.

[ "S3::BucketPolicy", "SNS::TopicPolicy", "SQS::QueuePolicy" ]

Parametervalidierung

Überprüfen Sie, ob für einen Vorlagenparameter ein Standardwert angegeben wurde, wenn für ihn kein Wert angegeben wurde.

Validierung von Ressourcenattributen

Erforderliche Attributprüfung: Bestimmte Attribute müssen für bestimmte Ressourcentypen existieren.

  • "VPCOptions" muss existieren in AWS::OpenSearch::Domain

  • "CludsterSubnetGroupName" muss existieren in AWS::Redshift::Cluster

{ "AWS::OpenSearch::Domain": [ "VPCOptions" ], "AWS::Redshift::Cluster": [ "ClusterSubnetGroupName" ] }

Überprüfung unzulässiger Attribute: Bestimmte Attribute darfen*nicht* für bestimmte Ressourcentypen existieren.

  • "SecretString" darf nicht existieren in "“ AWS::SecretsManager::Secret

  • "MongoDbSettings" darf nicht in "AWS::DMS::Endpoint“ existieren

{ "AWS::SecretsManager::Secret": [ "SecretString" ], "AWS::DMS::Endpoint": [ "MongoDbSettings" ] }

SSM-Parameterprüfung: Für Attribute in der folgenden Liste müssen Werte über Secrets Manager oder Systems Manager Parameter Store (Secure String Parameter) angegeben werden:

{ "RDS::DBInstance": [ "MasterUserPassword", "TdeCredentialPassword" ], "RDS::DBCluster": [ "MasterUserPassword" ], "ElastiCache::ReplicationGroup": [ "AuthToken" ], "DMS::Certificate": [ "CertificatePem", "CertificateWallet" ], "DMS::Endpoint": [ "Password" ], "CodePipeline::Webhook": { "AuthenticationConfiguration": [ "SecretToken" ] }, "DocDB::DBCluster": [ "MasterUserPassword" ] },

Einige Attribute müssen bestimmten Mustern entsprechen. Beispielsweise dürfen Profilnamen von IAM-Instanzen nicht mit reservierten AMS-Präfixen beginnen, und der Attributwert muss der spezifischen Regex entsprechen, wie hier gezeigt:

{ "AWS::EC2::Instance": { "IamInstanceProfile": [ "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+", "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ] }, "AWS::AutoScaling::LaunchConfiguration": { "IamInstanceProfile": [ "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+", "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ] }, "AWS::EC2::LaunchTemplate": { "LaunchTemplateData.IamInstanceProfile.Name": [ "^(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ], "LaunchTemplateData.IamInstanceProfile.Arn": [ "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile\/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ] } }

Validierung von Ressourcen

In der Vorlage können nur Ressourcen angegeben werden, die auf der Zulassungsliste stehen. Diese Ressourcen werden unter beschrieben. Unterstützte Ressourcen

EC2 Stacks und Auto Scaling Scaling-Gruppen (ASGs) sind aufgrund von Patching-Einschränkungen nicht im selben Stack zulässig.

Überprüfung der Regeln für eingehenden Zugriff auf Sicherheitsgruppen

  • Für Anfragen, die aus den CT-Änderungstypen CFN Ingest Create oder Stack Update CT stammen:

    • Wenn (IpProtocolist tcp oder 6) UND (Port ist 80 oder 443), gibt es keine Einschränkungen in Bezug auf den Wert CidrIP

    • Andernfalls kann er CidrIP nicht 0.0.0.0/0 sein

  • Für Anfragen aus Service Catalog (Service Catalog-Produkte):

    • Zusätzlich zur Überprüfung des CT-Änderungstyps CFN Ingest Create oder Stack Update CT ip_protocols kann auf den Port management_ports mit dem eingegebenen Protokoll nur zugegriffen werden über: allowed_cidrs

      { "ip_protocols": ["tcp", "6", "udp", "17"], "management_ports": [22, 23, 389, 636, 1494, 1604, 2222, 3389, 5900, 5901, 5985, 5986], "allowed_cidrs": ["10.0.0.0/8", "100.64.0.0/10", "172.16.0.0/12", "192.168.0.0/16"] }