CloudFormation stacks should have notifications enabled
CloudFormation stack operations can fail silently or trigger unintended resource changes. Without SNS notifications, engineers miss rollback events, failed updates, and drift-related operations until they manually inspect the console or CLI. That delay can extend outages and leave partially deployed infrastructure undetected.
Attaching an SNS topic to every stack creates a push-based alerting path that feeds into incident management tools, ChatOps channels, or ticketing systems. It also gives security teams near-real-time visibility into infrastructure changes, which matters when investigating unauthorized modifications.
Retrofit consideration
Updating notification_arns on an existing stack triggers a stack update, which may cause brief disruption depending on the stack's change set behavior. Test in non-production first.
Implementation
Choose the approach that matches how you manage Terraform.
Use AWS provider resources directly. See docs for the resources involved: aws_cloudformation_stack.
resource "aws_cloudformation_stack" "this" {
disable_rollback = false
name = "pofix-abc123"
notification_arns = ["arn:aws:sns:us-east-1:123456789012:example-topic"]
template_body = jsonencode({ AWSTemplateFormatVersion = "2010-09-09", Description = "Empty stack", Resources = { NullResource = { Type = "AWS::CloudFormation::WaitConditionHandle" } } })
}
What this control checks
The control checks that the aws_cloudformation_stack resource includes the notification_arns argument with at least one valid SNS topic ARN. A stack passes when notification_arns contains one or more ARN strings, e.g. notification_arns = [aws_sns_topic.stack_events.arn]. It fails when notification_arns is omitted or set to an empty list []. The SNS topic must exist before the stack is created or updated, so declare the aws_sns_topic resource and reference its arn attribute. For stack sets managed via aws_cloudformation_stack_set, note that aws_cloudformation_stack_set does not directly expose notification_arns; configure notifications through the stack operations that create or update stack instances, or through organizational automation.
Common pitfalls
Empty list passes Terraform validation but fails the control
An empty
notification_arns = []is syntactically valid and will apply without error, but the control treats it the same as a missing argument. Pass at least one ARN.SNS topic in a different region or account
Cross-region ARNs in
notification_arnscause stack operations to fail outright. CloudFormation requires the SNS topic to be in the same region as the stack. Cross-account topics may work, but only when the SNS topic policy explicitly allows the CloudFormation service principal and the relevant caller context.Stack sets do not propagate notification_arns to instances
For stack sets, notification configuration has to happen at the instance level.
aws_cloudformation_stack_sethas nonotification_arnsargument, so the setting must be applied through individual stack instance operations or a service-managed deployment that wraps each instance with the appropriate notification settings.Deleted or unsubscribed SNS topic
If the SNS topic referenced in
notification_arnsis deleted after stack creation, CloudFormation silently drops notifications. The stack still shows the ARN but no events are delivered. Check for orphaned topic ARNs as part of routine audits.
Audit evidence
Auditors will want compliance evaluation results from AWS Config custom or organization rules, or equivalent policy tooling, showing all in-scope stacks as compliant. Console evidence means navigating to each CloudFormation stack's settings and confirming the "SNS topic" field contains a valid ARN. For programmatic evidence, run aws cloudformation describe-stacks and verify the NotificationARNs array is non-empty for every stack in scope.
CloudTrail logs for CreateStack and UpdateStack API calls should show the NotificationARNs parameter populated. Prowler or Steampipe report output showing this check passing across all accounts and regions in scope also works.
Framework-specific interpretation
PCI DSS v4.0: For systems in the cardholder data environment, Requirement 10 asks for automated monitoring of all infrastructure changes, and Requirement 12.10 ties that monitoring to incident response readiness. Automated SNS alerts on stack operations cover both. Examiners will want to see that change events from CDE-adjacent stacks are reaching someone who can act on them.
NIST SP 800-53 Rev 5: SI-4 (System Monitoring) and IR-6 (Incident Reporting) expect automated alerting when infrastructure changes occur. Attaching an SNS topic to every stack gives monitoring and incident response teams a direct feed of stack events without requiring manual console checks.
NIST Cybersecurity Framework v2.0: DE.CM and DE.AE both call for continuous monitoring and analysis of events that could signal an adverse condition. SNS notifications on CloudFormation stacks feed that requirement directly, pushing infrastructure change events into whatever monitoring pipeline the team is already running.
Related controls
Tool mappings
Use these identifiers to cross-reference this control across tools, reports, and evidence.
Compliance.tf Control:
cloudformation_stack_notifications_enabledAWS Config Managed Rule:
CLOUDFORMATION_STACK_NOTIFICATION_CHECKCheckov Check:
CKV_AWS_124Powerpipe Control:
aws_compliance.control.cloudformation_stack_notifications_enabledKICS Query:
b72d0026-f649-4c91-a9ea-15d8f681ac09
Last reviewed: 2026-03-08