CloudWatch Contrôles Amazon - AWS Control Tower

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

CloudWatch Contrôles Amazon

[CT.CLOUDWATCH.PR.1] Exiger une alarme CloudWatch Amazon pour qu'une action soit configurée pour l'état de l'alarme

Ce contrôle vérifie si au moins une action CloudWatch d'une alarme Amazon est configurée pour l'état de l'alarme.

  • Objectif de contrôle : établir une journalisation et une surveillance

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::CloudWatch::Alarm

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.CLOUDWATCH.PR.1

Détails et exemples

Explication

AWS Control Tower recommande de configurer des actions pour les alarmes afin de vous avertir automatiquement lorsqu'une alarme est en état d'alarme et que la métrique surveillée dépasse le seuil défini. Cette configuration garantit que les alarmes sont surveillées et que les mesures nécessaires sont prises lorsque l'alarme est déclenchée. Les alarmes de surveillance vous aident à identifier les activités inhabituelles et à réagir rapidement aux problèmes de sécurité et de fonctionnement. Vous pouvez spécifier les actions qu'une alarme doit effectuer lorsqu'elle passe aux états OK, ALARM et INSUFFIENT_DATA. L'action CloudWatch d'alarme la plus courante en état d'alarme consiste à avertir un ou plusieurs utilisateurs en envoyant un message à une rubrique Amazon Simple Notification Service (Amazon SNS).

Remédiation en cas de défaillance des règles

Sélectionnez AlarmActions une liste contenant une ou plusieurs valeurs d'action d'alarme.

Les exemples suivants montrent comment mettre en œuvre cette correction.

Amazon CloudWatch Alarm - Exemple

Une CloudWatch alarme Amazon configurée pour avertir un sujet SNS lorsque l' CloudWatch alarme est en état d'alarme. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "Alarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 1, "Period": 300, "Threshold": 1.0, "Namespace": "AWS/Lambda", "MetricName": "Errors", "TreatMissingData": "missing", "Statistic": "Sum", "DatapointsToAlarm": 1, "ActionsEnabled": true, "AlarmActions": [ { "Ref": "Topic" } ] } } }

Exemple YAML

Alarm: Type: AWS::CloudWatch::Alarm Properties: ComparisonOperator: GreaterThanOrEqualToThreshold EvaluationPeriods: 1 Period: 300 Threshold: 1.0 Namespace: AWS/Lambda MetricName: Errors TreatMissingData: missing Statistic: Sum DatapointsToAlarm: 1 ActionsEnabled: true AlarmActions: - !Ref 'Topic'

Spécification de la règle CT.CLOUDWATCH.PR.1

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # cloudwatch_alarm_action_check # # Description: # This control checks whether an Amazon CloudWatch alarm has at least one action configured for the alarm state. # # Reports on: # AWS::CloudWatch::Alarm # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any CloudWatch alarm resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch alarm resource # And: 'AlarmActions' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch alarm resource # And: 'AlarmActions' has been provided as an empty list # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation Hook Document # And: The input document contains a CloudWatch alarm resource # And: 'AlarmActions' has been provided as a non-empty list # Then: PASS # # Constants # let CLOUDWATCH_ALARM_TYPE = "AWS::CloudWatch::Alarm" let INPUT_DOCUMENT = this # # Assignments # let cloudwatch_alarms = Resources.*[ Type == %CLOUDWATCH_ALARM_TYPE ] # # Primary Rules # rule cloudwatch_alarm_action_check when is_cfn_template(%INPUT_DOCUMENT) %cloudwatch_alarms not empty { check(%cloudwatch_alarms.Properties) << [CT.CLOUDWATCH.PR.1]: Require an Amazon CloudWatch alarm to have an action configured for the alarm state [FIX]: Set 'AlarmActions' to a list with one or more alarm action values. >> } rule cloudwatch_alarm_action_check when is_cfn_hook(%INPUT_DOCUMENT, %CLOUDWATCH_ALARM_TYPE) { check(%INPUT_DOCUMENT.%CLOUDWATCH_ALARM_TYPE.resourceProperties) << [CT.CLOUDWATCH.PR.1]: Require an Amazon CloudWatch alarm to have an action configured for the alarm state [FIX]: Set 'AlarmActions' to a list with one or more alarm action values. >> } # # Parameterized Rules # rule check(cloudwatch_alarm){ %cloudwatch_alarm { # Scenario 2 AlarmActions exists # Scenarios 3 and 4 AlarmActions is_list AlarmActions not empty } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists }

Exemples de modèles CT.CLOUDWATCH.PR.1

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: Topic: Type: AWS::SNS::Topic Properties: {} Alarm: Type: AWS::CloudWatch::Alarm Properties: ComparisonOperator: GreaterThanOrEqualToThreshold EvaluationPeriods: 1 Period: 300 Threshold: 1.0 Namespace: AWS/Lambda MetricName: Errors TreatMissingData: missing Statistic: Sum DatapointsToAlarm: 1 ActionsEnabled: true AlarmActions: - Ref: Topic

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: Alarm: Type: AWS::CloudWatch::Alarm Properties: ComparisonOperator: GreaterThanOrEqualToThreshold EvaluationPeriods: 1 Period: 300 Threshold: 1.0 Namespace: AWS/Lambda MetricName: Errors TreatMissingData: missing Statistic: Sum DatapointsToAlarm: 1 ActionsEnabled: true

[CT.CLOUDWATCH.PR.2] Exiger qu'un groupe de journaux CloudWatch Amazon soit conservé pendant au moins un an

Ce contrôle vérifie si la période de rétention d'Amazon CloudWatch Log Group est définie sur une valeur supérieure ou égale à 365 jours.

  • Objectif de contrôle : établir une journalisation et une surveillance

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::Logs::LogGroup

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.CLOUDWATCH.PR.2

Détails et exemples

Explication

Amazon CloudWatch Logs centralise les journaux de tous vos systèmes, applications et AWS services au sein d'un seul service hautement évolutif. Vous pouvez utiliser Amazon CloudWatch Logs pour surveiller, stocker et récupérer vos fichiers journaux à partir d'instances Amazon EC2 CloudTrail, de Route 53 et d'autres sources. La conservation de vos journaux pendant au moins un an peut vous aider à respecter les normes de conservation des journaux.

Remédiation en cas de défaillance des règles

Omettez la valeur du champ de RetentionInDays pour adopter le paramètre de rétention par défaut deNever expire, ou définissez RetentionInDays une valeur entière supérieure ou égale à 365.

Les exemples suivants montrent comment mettre en œuvre cette correction.

Amazon CloudWatch Log Group - Exemple

Un groupe de CloudWatch journaux Amazon configuré pour conserver les journaux pendant un an (365 jours). L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "LogGroup": { "Type": "AWS::Logs::LogGroup", "Properties": { "RetentionInDays": 365 } } }

Exemple YAML

LogGroup: Type: AWS::Logs::LogGroup Properties: RetentionInDays: 365

Spécification de la règle CT.CLOUDWATCH.PR.2

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # cloudwatch_log_group_retention_period_check # # Description: # This control checks whether an Amazon CloudWatch Log Group retention period is set to a value greater than or equal to 365 days. # # Reports on: # AWS::Logs::LogGroup # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any CloudWatch log group resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch log group resource # And: 'RetentionInDays' has been provided and set to a non integer value or # integer value less than 365 # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch log group resource # And: 'RetentionInDays' has not been provided # Then: PASS # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation Hook Document # And: The input document contains a CloudWatch log group resource # And: 'RetentionInDays' has been provided and set to an integer value greater than or equal to 365 # Then: PASS # # Constants # let CLOUDWATCH_LOGS_TYPE = "AWS::Logs::LogGroup" let MINIMUM_RETENTION_IN_DAYS = 365 let INPUT_DOCUMENT = this # # Assignments # let cloudwatch_log_groups = Resources.*[ Type == %CLOUDWATCH_LOGS_TYPE ] # # Primary Rules # rule cloudwatch_log_group_retention_period_check when is_cfn_template(%INPUT_DOCUMENT) %cloudwatch_log_groups not empty { check(%cloudwatch_log_groups.Properties) << [CT.CLOUDWATCH.PR.2]: Require an Amazon CloudWatch log group to be retained for at least one year [FIX]: Omit the field value of 'RetentionInDays' to adopt the default retention setting of 'Never expire', or set 'RetentionInDays' to an integer value greater than or equal to 365. >> } rule cloudwatch_log_group_retention_period_check when is_cfn_hook(%INPUT_DOCUMENT, %CLOUDWATCH_LOGS_TYPE) { check(%INPUT_DOCUMENT.%CLOUDWATCH_LOGS_TYPE.resourceProperties) << [CT.CLOUDWATCH.PR.2]: Require an Amazon CloudWatch log group to be retained for at least one year [FIX]: Omit the field value of 'RetentionInDays' to adopt the default retention setting of 'Never expire', or set 'RetentionInDays' to an integer value greater than or equal to 365. >> } # # Parameterized Rules # rule check(cloudwatch_log_group){ %cloudwatch_log_group { # Scenario 3 RetentionInDays not exists or # Scenarios 2 and 4 RetentionInDays >= %MINIMUM_RETENTION_IN_DAYS } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists }

Exemples de modèles CT.CLOUDWATCH.PR.2

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: LogGroup: Type: AWS::Logs::LogGroup Properties: RetentionInDays: 365

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: LogGroup: Type: AWS::Logs::LogGroup Properties: RetentionInDays: 1

[CT.CLOUDWATCH.PR.3] Exiger qu'un groupe de journaux CloudWatch Amazon soit chiffré au repos avec une clé KMS AWS

Ce contrôle vérifie si un groupe de CloudWatch journaux Amazon Logs est chiffré au repos à l'aide d'une clé AWS KMS

  • Objectif de contrôle : crypter les données au repos

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::Logs::LogGroup

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.CLOUDWATCH.PR.3

Détails et exemples

Explication

Les groupes de CloudWatch journaux Amazon Logs sont chiffrés par défaut à l'aide du chiffrement côté serveur. Pour un contrôle accru sur les clés de chiffrement, vous pouvez utiliser des clés gérées par le client depuis AWS KMS. Vous avez le contrôle total de ces clés KMS, notamment en établissant et en gérant leurs politiques clés, leurs politiques IAM et leurs autorisations, en activant et en désactivant les clés, en faisant pivoter leur matériel cryptographique, en ajoutant des balises, en créant des alias faisant référence aux clés KMS et en planifiant la suppression des clés KMS.

Remédiation en cas de défaillance des règles

KmsKeyIdDéfini sur l'ARN d'une clé AWS KMS gérée par le client configurée avec des autorisations permettant au principal du CloudWatch service d'utiliser la clé.

Les exemples suivants montrent comment mettre en œuvre cette correction.

Amazon CloudWatch Logs Group - Exemple

Un groupe de CloudWatch journaux Amazon configuré pour chiffrer les journaux à l'aide d'une clé gérée par le AWS KMS client. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "LogGroup": { "Type": "AWS::Logs::LogGroup", "Properties": { "KmsKeyId": { "Fn::GetAtt": [ "KMSKey", "Arn" ] } } } }

Exemple YAML

LogGroup: Type: AWS::Logs::LogGroup Properties: KmsKeyId: !GetAtt 'KMSKey.Arn'

Spécification de la règle CT.CLOUDWATCH.PR.3

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # cloudwatch_log_group_encrypted_check # # Description: # This control checks whether an Amazon CloudWatch log group is encrypted at rest with an AWS KMS key # # Reports on: # AWS::Logs::LogGroup # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any CloudWatch log group resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch log group resource # And: 'KmsKeyId' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch log group resource # And: 'KmsKeyId' has been provided as an empty string or invalid local reference to a KMS Key # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch log group resource # And: 'KmsKeyId' has been provided as a non-empty string or valid local reference to a KMS Key # Then: PASS # # Constants # let CLOUDWATCH_LOGS_TYPE = "AWS::Logs::LogGroup" let INPUT_DOCUMENT = this # # Assignments # let cloudwatch_log_groups = Resources.*[ Type == %CLOUDWATCH_LOGS_TYPE ] # # Primary Rules # rule cloudwatch_log_group_encrypted_check when is_cfn_template(%INPUT_DOCUMENT) %cloudwatch_log_groups not empty { check(%cloudwatch_log_groups.Properties) << [CT.CLOUDWATCH.PR.3]: Require an Amazon CloudWatch log group to be encrypted at rest with an AWS KMS key [FIX]: Set 'KmsKeyId' to the ARN of an AWS KMS customer managed key configured with permissions that allow the CloudWatch service principal to use the key. >> } rule cloudwatch_log_group_encrypted_check when is_cfn_hook(%INPUT_DOCUMENT, %CLOUDWATCH_LOGS_TYPE) { check(%INPUT_DOCUMENT.%CLOUDWATCH_LOGS_TYPE.resourceProperties) << [CT.CLOUDWATCH.PR.3]: Require an Amazon CloudWatch log group to be encrypted at rest with an AWS KMS key [FIX]: Set 'KmsKeyId' to the ARN of an AWS KMS customer managed key configured with permissions that allow the CloudWatch service principal to use the key. >> } # # Parameterized Rules # rule check(cloudwatch_log_group){ %cloudwatch_log_group { # Scenario 2 KmsKeyId exists # Scenario 3 and 4 check_is_string_and_not_empty(KmsKeyId) or check_local_references(%INPUT_DOCUMENT, KmsKeyId, "AWS::KMS::Key") } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists } rule check_is_string_and_not_empty(value) { %value { this is_string this != /\A\s*\z/ } } rule check_local_references(doc, reference_properties, referenced_resource_type) { %reference_properties { 'Fn::GetAtt' { query_for_resource(%doc, this[0], %referenced_resource_type) <<Local Stack reference was invalid>> } or Ref { query_for_resource(%doc, this, %referenced_resource_type) <<Local Stack reference was invalid>> } } } rule query_for_resource(doc, resource_key, resource_type) { let referenced_resource = %doc.Resources[ keys == %resource_key ] %referenced_resource not empty %referenced_resource { Type == %resource_type } }

Exemples de modèles CT.CLOUDWATCH.PR.3

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: KMSKey: Type: AWS::KMS::Key Properties: KeyPolicy: Version: 2012-10-17 Id: example-cloudwatch-logs-key-policy Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: Fn::Sub: arn:${AWS::Partition}:iam::${AWS::AccountId}:root Action: kms:* Resource: "*" - Sid: Enable Logs Effect: Allow Principal: Service: Fn::Sub: logs.${AWS::Region}.amazonaws.com Action: - kms:Encrypt* - kms:Decrypt* - kms:ReEncrypt* - kms:GenerateDataKey* - kms:Describe Resource: "*" Condition: ArnEquals: kms:EncryptionContext:aws:logs:arn: Fn::Sub: arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:* LogGroup: Type: AWS::Logs::LogGroup Properties: KmsKeyId: Fn::GetAtt: - KMSKey - Arn

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: LogGroup: Type: AWS::Logs::LogGroup Properties: {}

[CT.CLOUDWATCH.PR.4] Exiger une alarme Amazon CloudWatch pour activer les actions

Ce contrôle vérifie si des actions sont activées pour une CloudWatch alarme Amazon.

  • Objectif de contrôle : établir une journalisation et une surveillance

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::CloudWatch::Alarm

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.CLOUDWATCH.PR.4

Détails et exemples

Explication

Les actions d'alarme vous alertent automatiquement lorsqu'une métrique surveillée dépasse le seuil défini. Si l'action d'alarme est désactivée, aucune action n'est exécutée lorsque l'alarme change d'état. Vous ne serez donc pas alerté des modifications des mesures surveillées. AWS Control Tower recommande CloudWatch d'activer les actions d'alarme pour vous aider à réagir rapidement aux problèmes opérationnels et de sécurité.

Remédiation en cas de défaillance des règles

Définissez ActionsEnabled true ou ne fournissez pas la ActionsEnabled propriété.

Les exemples suivants montrent comment mettre en œuvre cette correction.

Amazon CloudWatch Alarm - Exemple

Une CloudWatch alarme Amazon configurée avec des actions d'alarme activées. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "Alarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmActions": [ { "Ref": "Topic" } ], "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 1, "Period": 300, "Threshold": 1.0, "Namespace": "AWS/Lambda", "MetricName": "Errors", "TreatMissingData": "missing", "Statistic": "Sum", "DatapointsToAlarm": 1, "ActionsEnabled": true } } }

Exemple YAML

Alarm: Type: AWS::CloudWatch::Alarm Properties: AlarmActions: - !Ref 'Topic' ComparisonOperator: GreaterThanOrEqualToThreshold EvaluationPeriods: 1 Period: 300 Threshold: 1.0 Namespace: AWS/Lambda MetricName: Errors TreatMissingData: missing Statistic: Sum DatapointsToAlarm: 1 ActionsEnabled: true

Spécification de la règle CT.CLOUDWATCH.PR.4

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # cloudwatch_alarm_action_enabled_check # # Description: # This control checks whether an Amazon CloudWatch alarm has actions enabled. # # Reports on: # AWS::CloudWatch::Alarm # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any CloudWatch alarm resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch alarm resource # And: 'ActionsEnabled' has been provided and set to a value other than bool(true) # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a CloudWatch alarm resource # And: 'ActionsEnabled' has not been provided # Then: PASS # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation Hook Document # And: The input document contains a CloudWatch alarm resource # And: 'ActionsEnabled' has been provided with a value of bool(true) # Then: PASS # # Constants # let CLOUDWATCH_ALARM_TYPE = "AWS::CloudWatch::Alarm" let INPUT_DOCUMENT = this # # Assignments # let cloudwatch_alarms = Resources.*[ Type == %CLOUDWATCH_ALARM_TYPE ] # # Primary Rules # rule cloudwatch_alarm_action_enabled_check when is_cfn_template(%INPUT_DOCUMENT) %cloudwatch_alarms not empty { check(%cloudwatch_alarms.Properties) << [CT.CLOUDWATCH.PR.4]: Require an Amazon CloudWatch alarm to have actions activated [FIX]: Set 'ActionsEnabled' to 'true' or do not provide the 'ActionsEnabled' property. >> } rule cloudwatch_alarm_action_enabled_check when is_cfn_hook(%INPUT_DOCUMENT, %CLOUDWATCH_ALARM_TYPE) { check(%INPUT_DOCUMENT.%CLOUDWATCH_ALARM_TYPE.resourceProperties) << [CT.CLOUDWATCH.PR.4]: Require an Amazon CloudWatch alarm to have actions activated [FIX]: Set 'ActionsEnabled' to 'true' or do not provide the 'ActionsEnabled' property. >> } # # Parameterized Rules # rule check(cloudwatch_alarm){ %cloudwatch_alarm { # Scenario 3 ActionsEnabled not exists or # Scenarios 2 and 4 ActionsEnabled == true } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists }

Exemples de modèles CT.CLOUDWATCH.PR.4

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: Topic: Type: AWS::SNS::Topic Properties: {} Alarm: Type: AWS::CloudWatch::Alarm Properties: AlarmActions: - Ref: Topic ComparisonOperator: GreaterThanOrEqualToThreshold EvaluationPeriods: 1 Period: 300 Threshold: 1.0 Namespace: AWS/Lambda MetricName: Errors TreatMissingData: missing Statistic: Sum DatapointsToAlarm: 1 ActionsEnabled: true

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: Topic: Type: AWS::SNS::Topic Properties: {} Alarm: Type: AWS::CloudWatch::Alarm Properties: AlarmActions: - Ref: Topic ComparisonOperator: GreaterThanOrEqualToThreshold EvaluationPeriods: 1 Period: 300 Threshold: 1.0 Namespace: AWS/Lambda MetricName: Errors TreatMissingData: missing Statistic: Sum DatapointsToAlarm: 1 ActionsEnabled: false