Skip to content

All Rules

The AWS CloudFormation lexicon provides 64 rules: 3 lint rules and 61 post-synth checks.

IDSeverityCategoryDescription
WAW001warningsecurityHardcoded AWS Region
WAW006warningsecurityS3 Bucket Encryption
WAW009warningsecurityIAM Wildcard Resource

Post-synth checks validate the serialized output after the build pipeline completes.

IDDescription
COR020Circular resource dependency — detects cycles in the resource dependency graph
EXT001Extension constraint violation — cross-property validation from cfn-lint extension schemas
WAW010Redundant DependsOn — target is already referenced via Ref or Fn::GetAtt in Properties
WAW011Deprecated Lambda runtime — flags deprecated or approaching-EOL Lambda runtimes
WAW013Child project has no stackOutput() exports — parent can’t reference anything
WAW014Nested stack outputs never referenced from parent — could just be a separate build
WAW015Circular dependency between nested stacks would cause infinite build recursion
WAW016Deprecated property usage — flags properties marked as deprecated in the CloudFormation Registry
WAW017Missing tags on taggable resource — suggests adding tags for cost allocation and compliance
WAW018S3 bucket missing public access block — all public access should be blocked
WAW019Security group allows unrestricted ingress on sensitive ports (SSH, RDP, database)
WAW020IAM policy uses wildcard Action — use specific actions following least privilege
WAW021RDS instance or cluster storage is not encrypted — enable encryption at rest
WAW022Lambda function is not configured with a VPC — consider adding VpcConfig for network isolation
WAW023CloudFront distribution has no WAF web ACL — consider attaching one for protection
WAW024Application Load Balancer does not have access logging enabled
WAW025SNS topic is not encrypted — add KmsMasterKeyId for encryption at rest
WAW026SQS queue is not encrypted — enable SqsManagedSseEnabled or set KmsMasterKeyId
WAW027DynamoDB table does not have point-in-time recovery enabled
WAW028EBS volume is not encrypted — enable encryption at rest
WAW029Invalid DependsOn target — dangling reference or self-reference
WAW030Missing DependsOn for known CloudFormation ordering patterns
WAW031EKS Addon missing ServiceAccountRoleArn for addons that require IRSA
WAW032EFS volume on Fargate task has transit encryption disabled
WAW033Solr SOLR_HEAP exceeds 50% of Fargate task memory
WAW034Fargate task running Solr has insufficient memory (< 2048MB)
WAW035Solr container missing nofile ulimit >= 65535
WAW036Non-ASCII characters in EC2/IAM/CW string properties — rejected at changeset time
WAW037Null values in CFN resource properties — caused by invalid AttrRef (.PropName) usage
WAW038RDS instance is publicly accessible — keep databases inside the VPC
WAW039RDS instance or cluster has automated backups disabled — set a positive BackupRetentionPeriod
WAW040RDS instance or cluster does not have DeletionProtection enabled (full tier)
WAW041RDS Proxy does not require TLS for client connections
WAW042S3 bucket missing a TLS-only bucket policy — deny requests over plaintext
WAW043KMS customer-managed key does not have automatic key rotation enabled
WAW044ALB HTTP listener does not redirect to HTTPS (full tier)
WAW045ALB HTTPS/TLS listener does not use a modern (TLS 1.2+) SslPolicy
WAW046ECS container passes a secret-looking value via plaintext Environment instead of Secrets
WAW047ECS container runs privileged — drop elevated host access
WAW048ECS container does not have a LogConfiguration — enable logging for audit trails
WAW049Security group allows unrestricted ingress on a port other than ALB:80/443
WAW050Cognito UserPool does not have advanced security (risk-based auth) enabled
WAW051Cognito UserPoolClient allows the deprecated implicit OAuth grant
WAW052Cognito UserPool does not require MFA (full tier)
WAW053ECR repository does not scan images on push
WAW054ECR repository does not have immutable image tags
WAW055CloudWatch Logs log group has no retention period set
WAW056SCP guardrail has no Deny statement — it constrains nothing
WAW057SCP guardrail is attached to no targets — it enforces nothing
WAW058Organization audit trail missing, not logging, or scoped down to a single region
WAW059Wildcard Resource where the declared graph enumerates the touched set — tighten to the consumers’ declared Arns
WAW060IAM policy attached to no principal — it grants nothing
WAW061Subnet CidrBlock falls outside its VPC’s CidrBlock — fails at deploy time
WAW062Duplicate export name or explicit resource name within a template — fails at deploy time
WAW063IAM policy denies an action another attached policy on the same role allows — explicit Deny wins, runtime 403
WAW064Transit Gateway route table declares a Blackhole route — confirm the traffic drop is intentional, not an accident
WAW065Transit Gateway route table has associations but no propagations, or an attachment wired into no route table
WAW066Private subnet’s route table has no default route, or its default route targets a gateway that does not exist in the template
WAW067A single-AZ NAT gateway serves private subnets across multiple Availability Zones — single point of failure for cross-AZ egress
WAW068VPN Gateway or Transit Gateway has only one attached VPN Connection — no redundant path for hybrid connectivity
WAW069Template references a condition it never declares — resource/output Condition keys, Fn::If, and Condition references must name an entry in the Conditions section