From 8f6810b64e8a1f338be34e629d18724cc5250ce4 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Mon, 29 Jun 2026 14:58:48 -0400 Subject: [PATCH 1/3] Update version --- src/Cargo.lock | 24 +- src/Cargo.toml | 2 +- src/resources/expected/all_templates.json | 918 +++++++++++----------- 3 files changed, 472 insertions(+), 472 deletions(-) diff --git a/src/Cargo.lock b/src/Cargo.lock index 5550310..52a5fdc 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -196,7 +196,7 @@ checksum = "4372b9543397a4b86050cc5e7ee36953edf4bac9518e8a774c2da694977fb6e4" [[package]] name = "bindings-jvm" -version = "1.2.0" +version = "1.3.0" dependencies = [ "cel-engine", "diagnostics", @@ -211,7 +211,7 @@ dependencies = [ [[package]] name = "bindings-wasm" -version = "1.2.0" +version = "1.3.0" dependencies = [ "cel-engine", "console_error_panic_hook", @@ -344,7 +344,7 @@ dependencies = [ [[package]] name = "cel-engine" -version = "1.2.0" +version = "1.3.0" dependencies = [ "anyhow", "cel-interpreter", @@ -398,7 +398,7 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfn-validate" -version = "1.2.0" +version = "1.3.0" dependencies = [ "cel-engine", "chrono", @@ -555,7 +555,7 @@ dependencies = [ [[package]] name = "data-source" -version = "1.2.0" +version = "1.3.0" dependencies = [ "anyhow", "chrono", @@ -573,7 +573,7 @@ dependencies = [ [[package]] name = "diagnostics" -version = "1.2.0" +version = "1.3.0" dependencies = [ "log", "rules", @@ -830,7 +830,7 @@ dependencies = [ [[package]] name = "guard-translator" -version = "1.2.0" +version = "1.3.0" dependencies = [ "guard-lang", "indexmap 1.9.3", @@ -1367,7 +1367,7 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rego-engine" -version = "1.2.0" +version = "1.3.0" dependencies = [ "anyhow", "data-source", @@ -1421,7 +1421,7 @@ dependencies = [ [[package]] name = "rules" -version = "1.2.0" +version = "1.3.0" dependencies = [ "log", "regex", @@ -1515,7 +1515,7 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "schema-validator" -version = "1.2.0" +version = "1.3.0" dependencies = [ "data-source", "diagnostics", @@ -1769,7 +1769,7 @@ dependencies = [ [[package]] name = "template-model" -version = "1.2.0" +version = "1.3.0" dependencies = [ "base64", "diagnostics", @@ -2107,7 +2107,7 @@ dependencies = [ [[package]] name = "validation-engine" -version = "1.2.0" +version = "1.3.0" dependencies = [ "diagnostics", "guard-translator", diff --git a/src/Cargo.toml b/src/Cargo.toml index 95c2c95..dc71bfd 100644 --- a/src/Cargo.toml +++ b/src/Cargo.toml @@ -19,7 +19,7 @@ resolver = "2" name = "cloudformation-validate" [workspace.package] -version = "1.2.0" +version = "1.3.0" edition = "2024" license = "Apache-2.0" description = "AWS CloudFormation Validate" diff --git a/src/resources/expected/all_templates.json b/src/resources/expected/all_templates.json index f321ab8..61fe460 100644 --- a/src/resources/expected/all_templates.json +++ b/src/resources/expected/all_templates.json @@ -2,7 +2,7 @@ "bad/E1150_network_interfaces_groupset_multi.yaml": { "filePath": "bad/E1150_network_interfaces_groupset_multi.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -165,7 +165,7 @@ "bad/E3019_four_way_group.yaml": { "filePath": "bad/E3019_four_way_group.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -429,7 +429,7 @@ "bad/E9001_unknown_resource_type.yaml": { "filePath": "bad/E9001_unknown_resource_type.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -494,7 +494,7 @@ "bad/F2002_ssm_parameter_type_invalid.yaml": { "filePath": "bad/F2002_ssm_parameter_type_invalid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -586,7 +586,7 @@ "bad/W1028_allowedvalues_excludes_literal.yaml": { "filePath": "bad/W1028_allowedvalues_excludes_literal.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -669,7 +669,7 @@ "bad/W3010_full_coverage.yaml": { "filePath": "bad/W3010_full_coverage.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -1346,7 +1346,7 @@ "bad/aurora_with_allocated_storage.yaml": { "filePath": "bad/aurora_with_allocated_storage.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -1496,7 +1496,7 @@ "bad/cloudfront_bad_alias.yaml": { "filePath": "bad/cloudfront_bad_alias.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -1595,7 +1595,7 @@ "bad/cloudfront_bad_origin.yaml": { "filePath": "bad/cloudfront_bad_origin.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -1695,7 +1695,7 @@ "bad/codepipeline_bad_artifact_counts.yaml": { "filePath": "bad/codepipeline_bad_artifact_counts.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -1824,7 +1824,7 @@ "bad/codepipeline_bad_artifacts.yaml": { "filePath": "bad/codepipeline_bad_artifacts.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -1953,7 +1953,7 @@ "bad/conditions.yaml": { "filePath": "bad/conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -2560,7 +2560,7 @@ "bad/conditions/and.yaml": { "filePath": "bad/conditions/and.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -2746,7 +2746,7 @@ "bad/conditions/condition_functions.json": { "filePath": "bad/conditions/condition_functions.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -3157,7 +3157,7 @@ "bad/conditions/equals.yaml": { "filePath": "bad/conditions/equals.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -3399,7 +3399,7 @@ "bad/conditions/equals_not_useful.yaml": { "filePath": "bad/conditions/equals_not_useful.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -3538,7 +3538,7 @@ "bad/conditions/properties_fn_if.json": { "filePath": "bad/conditions/properties_fn_if.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -3674,7 +3674,7 @@ "bad/core/conditions.yaml": { "filePath": "bad/core/conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -4331,7 +4331,7 @@ "bad/core/conditions_list.yaml": { "filePath": "bad/core/conditions_list.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -4389,7 +4389,7 @@ "bad/core/conditions_missing.yaml": { "filePath": "bad/core/conditions_missing.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -4461,7 +4461,7 @@ "bad/core/config_configure_e3012.yaml": { "filePath": "bad/core/config_configure_e3012.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -4560,7 +4560,7 @@ "bad/core/config_invalid_json.json": { "filePath": "bad/core/config_invalid_json.json", "status": "ERROR", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "resourcesScanned": 0, "counts": { @@ -4617,7 +4617,7 @@ "bad/core/config_invalid_yaml.yaml": { "filePath": "bad/core/config_invalid_yaml.yaml", "status": "ERROR", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "resourcesScanned": 0, "counts": { @@ -4670,7 +4670,7 @@ "bad/core/config_parameters.yaml": { "filePath": "bad/core/config_parameters.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -4728,7 +4728,7 @@ "bad/core/directives.yaml": { "filePath": "bad/core/directives.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -5112,7 +5112,7 @@ "bad/core/mandatory_checks.yaml": { "filePath": "bad/core/mandatory_checks.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -5496,7 +5496,7 @@ "bad/core/parse_invalid_map.yaml": { "filePath": "bad/core/parse_invalid_map.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -5672,7 +5672,7 @@ "bad/cross_resource_task10.yaml": { "filePath": "bad/cross_resource_task10.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -6456,7 +6456,7 @@ "bad/deprecated_type.yaml": { "filePath": "bad/deprecated_type.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -6552,7 +6552,7 @@ "bad/duplicate.json": { "filePath": "bad/duplicate.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -6679,7 +6679,7 @@ "bad/duplicate.yaml": { "filePath": "bad/duplicate.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -6785,7 +6785,7 @@ "bad/duplicate_primary_id.yaml": { "filePath": "bad/duplicate_primary_id.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -6939,7 +6939,7 @@ "bad/duplicate_primary_id_multi.yaml": { "filePath": "bad/duplicate_primary_id_multi.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -7061,7 +7061,7 @@ "bad/dynamodb_attribute_mismatch.yaml": { "filePath": "bad/dynamodb_attribute_mismatch.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -7193,7 +7193,7 @@ "bad/dynamodb_prod_no_kms.yaml": { "filePath": "bad/dynamodb_prod_no_kms.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -7273,7 +7273,7 @@ "bad/dynamodb_provisioned_no_throughput.yaml": { "filePath": "bad/dynamodb_provisioned_no_throughput.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -7405,7 +7405,7 @@ "bad/ecr_policy_no_statement.yaml": { "filePath": "bad/ecr_policy_no_statement.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -7485,7 +7485,7 @@ "bad/ecs_awsvpc_port_mismatch.yaml": { "filePath": "bad/ecs_awsvpc_port_mismatch.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -7607,7 +7607,7 @@ "bad/ecs_dynamic_port_no_traffic.yaml": { "filePath": "bad/ecs_dynamic_port_no_traffic.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -7838,7 +7838,7 @@ "bad/ecs_fargate_mismatch.yaml": { "filePath": "bad/ecs_fargate_mismatch.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -8043,7 +8043,7 @@ "bad/ecs_role_no_boundary.yaml": { "filePath": "bad/ecs_role_no_boundary.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -8206,7 +8206,7 @@ "bad/elb_http_443.yaml": { "filePath": "bad/elb_http_443.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -8304,7 +8304,7 @@ "bad/empty_file.yaml": { "filePath": "bad/empty_file.yaml", "status": "ERROR", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "resourcesScanned": 0, "counts": { @@ -8361,7 +8361,7 @@ "bad/equals_wrong_arity.yaml": { "filePath": "bad/equals_wrong_arity.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -8446,7 +8446,7 @@ "bad/fargate_bad_cpu_memory.yaml": { "filePath": "bad/fargate_bad_cpu_memory.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -8658,7 +8658,7 @@ "bad/fargate_daemon.yaml": { "filePath": "bad/fargate_daemon.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -8963,7 +8963,7 @@ "bad/findinmap_bad.yaml": { "filePath": "bad/findinmap_bad.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -9043,7 +9043,7 @@ "bad/formatters.yaml": { "filePath": "bad/formatters.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -9192,7 +9192,7 @@ "bad/functions/foreach_no_transform.yaml": { "filePath": "bad/functions/foreach_no_transform.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -9252,7 +9252,7 @@ "bad/functions/import_value.yaml": { "filePath": "bad/functions/import_value.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -9379,7 +9379,7 @@ "bad/functions/relationship_conditions.yaml": { "filePath": "bad/functions/relationship_conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -9667,7 +9667,7 @@ "bad/functions/sub_needed.yaml": { "filePath": "bad/functions/sub_needed.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -10020,7 +10020,7 @@ "bad/functions_base64.yaml": { "filePath": "bad/functions_base64.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -10146,7 +10146,7 @@ "bad/functions_getaz.yaml": { "filePath": "bad/functions_getaz.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -10586,7 +10586,7 @@ "bad/functions_join.yaml": { "filePath": "bad/functions_join.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -10750,7 +10750,7 @@ "bad/functions_ref.yaml": { "filePath": "bad/functions_ref.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -11358,7 +11358,7 @@ "bad/functions_select.yaml": { "filePath": "bad/functions_select.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -11737,7 +11737,7 @@ "bad/generic.yaml": { "filePath": "bad/generic.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 19, @@ -13218,7 +13218,7 @@ "bad/hard_coded_arn_properties.yaml": { "filePath": "bad/hard_coded_arn_properties.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -13412,7 +13412,7 @@ "bad/hardcoded_partition.yaml": { "filePath": "bad/hardcoded_partition.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -13549,7 +13549,7 @@ "bad/iam_bad_statement.yaml": { "filePath": "bad/iam_bad_statement.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -13611,7 +13611,7 @@ "bad/iam_ref_with_path.yaml": { "filePath": "bad/iam_ref_with_path.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -13730,7 +13730,7 @@ "bad/iam_wildcard_all_types.yaml": { "filePath": "bad/iam_wildcard_all_types.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -13826,7 +13826,7 @@ "bad/if_wrong_arity.yaml": { "filePath": "bad/if_wrong_arity.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -13933,7 +13933,7 @@ "bad/invalid_deletion_policy.yaml": { "filePath": "bad/invalid_deletion_policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -14027,7 +14027,7 @@ "bad/invalid_mapping_structure.yaml": { "filePath": "bad/invalid_mapping_structure.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -14112,7 +14112,7 @@ "bad/invalid_update_replace_policy.yaml": { "filePath": "bad/invalid_update_replace_policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -14206,7 +14206,7 @@ "bad/issues.yaml": { "filePath": "bad/issues.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -14350,7 +14350,7 @@ "bad/json_parse.json": { "filePath": "bad/json_parse.json", "status": "ERROR", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "resourcesScanned": 0, "counts": { @@ -14407,7 +14407,7 @@ "bad/lambda_no_snapstart.yaml": { "filePath": "bad/lambda_no_snapstart.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -14524,7 +14524,7 @@ "bad/lambda_snapstart_bad_runtime.yaml": { "filePath": "bad/lambda_snapstart_bad_runtime.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -14640,7 +14640,7 @@ "bad/lambda_snapstart_no_version.yaml": { "filePath": "bad/lambda_snapstart_no_version.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -14736,7 +14736,7 @@ "bad/lambda_sqs_timeout.yaml": { "filePath": "bad/lambda_sqs_timeout.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -14943,7 +14943,7 @@ "bad/lambda_zip_no_handler.yaml": { "filePath": "bad/lambda_zip_no_handler.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15059,7 +15059,7 @@ "bad/lambda_zipfile_java.yaml": { "filePath": "bad/lambda_zipfile_java.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15192,7 +15192,7 @@ "bad/mappings/name.yaml": { "filePath": "bad/mappings/name.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -15264,7 +15264,7 @@ "bad/mappings/used.yaml": { "filePath": "bad/mappings/used.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15400,7 +15400,7 @@ "bad/module_with_tags.yaml": { "filePath": "bad/module_with_tags.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15461,7 +15461,7 @@ "bad/modules/bad_has_create_policy.yaml": { "filePath": "bad/modules/bad_has_create_policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15522,7 +15522,7 @@ "bad/modules/bad_has_tags.yaml": { "filePath": "bad/modules/bad_has_tags.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15583,7 +15583,7 @@ "bad/modules/bad_has_update_policy.yaml": { "filePath": "bad/modules/bad_has_update_policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15644,7 +15644,7 @@ "bad/modules/bad_uses_module_metadata.yaml": { "filePath": "bad/modules/bad_uses_module_metadata.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -15687,7 +15687,7 @@ "bad/noecho.yaml": { "filePath": "bad/noecho.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -15803,7 +15803,7 @@ "bad/not_cloudformation.yaml": { "filePath": "bad/not_cloudformation.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -15866,7 +15866,7 @@ "bad/opensearch_instance_type.yaml": { "filePath": "bad/opensearch_instance_type.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -16027,7 +16027,7 @@ "bad/override/complete.yaml": { "filePath": "bad/override/complete.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -16262,7 +16262,7 @@ "bad/override/exclude.yaml": { "filePath": "bad/override/exclude.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -16360,7 +16360,7 @@ "bad/override/include.yaml": { "filePath": "bad/override/include.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -16533,7 +16533,7 @@ "bad/override/required.yaml": { "filePath": "bad/override/required.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -16616,7 +16616,7 @@ "bad/param_constraints.yaml": { "filePath": "bad/param_constraints.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -16798,7 +16798,7 @@ "bad/param_number_default.yaml": { "filePath": "bad/param_number_default.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -16912,7 +16912,7 @@ "bad/parameters/configuration.yaml": { "filePath": "bad/parameters/configuration.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -17379,7 +17379,7 @@ "bad/parameters/default.yaml": { "filePath": "bad/parameters/default.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -17695,7 +17695,7 @@ "bad/pipeline_no_source_first_stage.yaml": { "filePath": "bad/pipeline_no_source_first_stage.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -17871,7 +17871,7 @@ "bad/previous_gen_instance.yaml": { "filePath": "bad/previous_gen_instance.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -17989,7 +17989,7 @@ "bad/previous_generation_instances.yaml": { "filePath": "bad/previous_generation_instances.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -18494,7 +18494,7 @@ "bad/properties_ebs.yaml": { "filePath": "bad/properties_ebs.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -18884,7 +18884,7 @@ "bad/properties_password.yaml": { "filePath": "bad/properties_password.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -19396,7 +19396,7 @@ "bad/properties_rt_association.yaml": { "filePath": "bad/properties_rt_association.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -19794,7 +19794,7 @@ "bad/properties_sg_ingress.yaml": { "filePath": "bad/properties_sg_ingress.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -20645,7 +20645,7 @@ "bad/rds_public.yaml": { "filePath": "bad/rds_public.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -20833,7 +20833,7 @@ "bad/redshift_internet_accessible.yaml": { "filePath": "bad/redshift_internet_accessible.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -21143,7 +21143,7 @@ "bad/refs.yaml": { "filePath": "bad/refs.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -21479,7 +21479,7 @@ "bad/resource_policy_no_statement.yaml": { "filePath": "bad/resource_policy_no_statement.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -21591,7 +21591,7 @@ "bad/resources/backup/test_backup_plan_lifecycle_rule.yml": { "filePath": "bad/resources/backup/test_backup_plan_lifecycle_rule.yml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -21634,7 +21634,7 @@ "bad/resources/cloudformation/stack_nested.yaml": { "filePath": "bad/resources/cloudformation/stack_nested.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -21720,7 +21720,7 @@ "bad/resources/cloudformation/stacks.yaml": { "filePath": "bad/resources/cloudformation/stacks.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -21898,7 +21898,7 @@ "bad/resources/codepipeline/stages_second_stage.yaml": { "filePath": "bad/resources/codepipeline/stages_second_stage.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -22060,7 +22060,7 @@ "bad/resources/dynamodb/undefined_attribute_definition.yaml": { "filePath": "bad/resources/dynamodb/undefined_attribute_definition.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -22172,7 +22172,7 @@ "bad/resources/dynamodb/unused_attribute_definition_1.yaml": { "filePath": "bad/resources/dynamodb/unused_attribute_definition_1.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -22266,7 +22266,7 @@ "bad/resources/dynamodb/unused_attribute_definition_2.yaml": { "filePath": "bad/resources/dynamodb/unused_attribute_definition_2.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -22360,7 +22360,7 @@ "bad/resources/elasticache/cache_cluster_failover.yaml": { "filePath": "bad/resources/elasticache/cache_cluster_failover.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -22958,7 +22958,7 @@ "bad/resources/iam/iam_policy.yaml": { "filePath": "bad/resources/iam/iam_policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -23193,7 +23193,7 @@ "bad/resources/iam/managed_policy_description.yaml": { "filePath": "bad/resources/iam/managed_policy_description.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -23258,7 +23258,7 @@ "bad/resources/iam/ref_with_path.yaml": { "filePath": "bad/resources/iam/ref_with_path.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -23535,7 +23535,7 @@ "bad/resources/iam/resource_policy.yaml": { "filePath": "bad/resources/iam/resource_policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -23615,7 +23615,7 @@ "bad/resources/lambda/function_property_value_limits.yaml": { "filePath": "bad/resources/lambda/function_property_value_limits.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -23983,7 +23983,7 @@ "bad/resources/lambda/required_properties.yaml": { "filePath": "bad/resources/lambda/required_properties.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -24239,7 +24239,7 @@ "bad/resources/name.yaml": { "filePath": "bad/resources/name.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -24353,7 +24353,7 @@ "bad/resources/primary_identifiers.yaml": { "filePath": "bad/resources/primary_identifiers.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 13, @@ -25028,7 +25028,7 @@ "bad/resources/properties/atleastone.yaml": { "filePath": "bad/resources/properties/atleastone.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -25147,7 +25147,7 @@ "bad/resources/properties/custom.yaml": { "filePath": "bad/resources/properties/custom.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -25190,7 +25190,7 @@ "bad/resources/properties/list_duplicates.yaml": { "filePath": "bad/resources/properties/list_duplicates.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -25261,7 +25261,7 @@ "bad/resources/properties/primitive_types_map.yaml": { "filePath": "bad/resources/properties/primitive_types_map.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -25409,7 +25409,7 @@ "bad/resources/properties/string_size.yaml": { "filePath": "bad/resources/properties/string_size.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -25549,7 +25549,7 @@ "bad/resources/properties/templated_code.yaml": { "filePath": "bad/resources/properties/templated_code.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -25688,7 +25688,7 @@ "bad/resources/rds/instance_sizes.yaml": { "filePath": "bad/resources/rds/instance_sizes.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -26388,7 +26388,7 @@ "bad/resources/s3/access-control-obsolete.yaml": { "filePath": "bad/resources/s3/access-control-obsolete.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -26510,7 +26510,7 @@ "bad/resources/sns/topic_name.yaml": { "filePath": "bad/resources/sns/topic_name.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -26618,7 +26618,7 @@ "bad/resources/uniqueNames.yaml": { "filePath": "bad/resources/uniqueNames.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -26711,7 +26711,7 @@ "bad/resources_circular_dependency.yaml": { "filePath": "bad/resources_circular_dependency.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -27788,7 +27788,7 @@ "bad/resources_circular_dependency_2.yaml": { "filePath": "bad/resources_circular_dependency_2.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -28138,7 +28138,7 @@ "bad/resources_circular_dependency_dependson.yaml": { "filePath": "bad/resources_circular_dependency_dependson.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -28250,7 +28250,7 @@ "bad/resources_cloudfront_invalid_aliases.yaml": { "filePath": "bad/resources_cloudfront_invalid_aliases.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -28468,7 +28468,7 @@ "bad/resources_cognito_userpool_tag_is_list.yaml": { "filePath": "bad/resources_cognito_userpool_tag_is_list.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -28575,7 +28575,7 @@ "bad/resources_deletionpolicy.yaml": { "filePath": "bad/resources_deletionpolicy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -29012,7 +29012,7 @@ "bad/resources_iam_instanceprofile_roles.yaml": { "filePath": "bad/resources_iam_instanceprofile_roles.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -29080,7 +29080,7 @@ "bad/resources_updatereplacepolicy.yaml": { "filePath": "bad/resources_updatereplacepolicy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -29549,7 +29549,7 @@ "bad/route53.yaml": { "filePath": "bad/route53.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -30477,7 +30477,7 @@ "bad/s3_tiering_bad_days.yaml": { "filePath": "bad/s3_tiering_bad_days.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -30557,7 +30557,7 @@ "bad/sagemaker_instance_types.yaml": { "filePath": "bad/sagemaker_instance_types.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -31488,7 +31488,7 @@ "bad/schema_additional_props.yaml": { "filePath": "bad/schema_additional_props.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -31678,7 +31678,7 @@ "bad/schema_composition.yaml": { "filePath": "bad/schema_composition.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -31845,7 +31845,7 @@ "bad/schema_conditional_type.yaml": { "filePath": "bad/schema_conditional_type.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -31951,7 +31951,7 @@ "bad/schema_enum_violation.yaml": { "filePath": "bad/schema_enum_violation.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -32122,7 +32122,7 @@ "bad/schema_format_violation.yaml": { "filePath": "bad/schema_format_violation.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -32264,7 +32264,7 @@ "bad/schema_lifecycle.yaml": { "filePath": "bad/schema_lifecycle.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -32615,7 +32615,7 @@ "bad/schema_numeric_bounds.yaml": { "filePath": "bad/schema_numeric_bounds.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -32772,7 +32772,7 @@ "bad/schema_property_constraints.yaml": { "filePath": "bad/schema_property_constraints.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -33052,7 +33052,7 @@ "bad/schema_string_length.yaml": { "filePath": "bad/schema_string_length.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -33150,7 +33150,7 @@ "bad/schema_structural.yaml": { "filePath": "bad/schema_structural.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -33512,7 +33512,7 @@ "bad/schema_type_mismatch.yaml": { "filePath": "bad/schema_type_mismatch.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -33654,7 +33654,7 @@ "bad/schema_unique_items.yaml": { "filePath": "bad/schema_unique_items.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -33745,7 +33745,7 @@ "bad/schema_write_only.yaml": { "filePath": "bad/schema_write_only.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -33864,7 +33864,7 @@ "bad/security_issues.yaml": { "filePath": "bad/security_issues.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -33982,7 +33982,7 @@ "bad/sg_bad_port_range.yaml": { "filePath": "bad/sg_bad_port_range.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -34092,7 +34092,7 @@ "bad/sg_open_egress.yaml": { "filePath": "bad/sg_open_egress.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -34192,7 +34192,7 @@ "bad/simple_sub_param.yaml": { "filePath": "bad/simple_sub_param.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -34275,7 +34275,7 @@ "bad/sns_cross_account.yaml": { "filePath": "bad/sns_cross_account.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -34358,7 +34358,7 @@ "bad/some_logs_stream_lambda.yaml": { "filePath": "bad/some_logs_stream_lambda.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -34834,7 +34834,7 @@ "bad/sqs_fifo_no_suffix.yaml": { "filePath": "bad/sqs_fifo_no_suffix.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -35027,7 +35027,7 @@ "bad/sqs_fifo_standard_dlq.yaml": { "filePath": "bad/sqs_fifo_standard_dlq.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -35285,7 +35285,7 @@ "bad/ssm_document_invalid.yaml": { "filePath": "bad/ssm_document_invalid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -35385,7 +35385,7 @@ "bad/stepfunctions_bad_start_at.yaml": { "filePath": "bad/stepfunctions_bad_start_at.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -35497,7 +35497,7 @@ "bad/stepfunctions_invalid_state.yaml": { "filePath": "bad/stepfunctions_invalid_state.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -35626,7 +35626,7 @@ "bad/string.yaml": { "filePath": "bad/string.yaml", "status": "ERROR", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "resourcesScanned": 0, "counts": { @@ -35683,7 +35683,7 @@ "bad/sub_needed.yaml": { "filePath": "bad/sub_needed.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -35797,7 +35797,7 @@ "bad/sub_nested_intrinsic.yaml": { "filePath": "bad/sub_nested_intrinsic.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -35898,7 +35898,7 @@ "bad/subnet_outside_vpc.yaml": { "filePath": "bad/subnet_outside_vpc.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -36056,7 +36056,7 @@ "bad/subnet_overlap.yaml": { "filePath": "bad/subnet_overlap.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -36367,7 +36367,7 @@ "bad/subnet_overlap_multi.yaml": { "filePath": "bad/subnet_overlap_multi.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -36961,7 +36961,7 @@ "bad/template.yaml": { "filePath": "bad/template.yaml", "status": "ERROR", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "resourcesScanned": 0, "counts": { @@ -37014,7 +37014,7 @@ "bad/templates/base.yaml": { "filePath": "bad/templates/base.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -37087,7 +37087,7 @@ "bad/templates/base_date.yaml": { "filePath": "bad/templates/base_date.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -37160,7 +37160,7 @@ "bad/templates/base_null.yaml": { "filePath": "bad/templates/base_null.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -37218,7 +37218,7 @@ "bad/transform/auto_publish_alias.yaml": { "filePath": "bad/transform/auto_publish_alias.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -37294,7 +37294,7 @@ "bad/transform/no_properties.yaml": { "filePath": "bad/transform/no_properties.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -37356,7 +37356,7 @@ "bad/transform_serverless_auto_publish_alias.yaml": { "filePath": "bad/transform_serverless_auto_publish_alias.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -37416,7 +37416,7 @@ "bad/transform_serverless_template.yaml": { "filePath": "bad/transform_serverless_template.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -37508,7 +37508,7 @@ "bad/undefined_condition.yaml": { "filePath": "bad/undefined_condition.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -37586,7 +37586,7 @@ "bad/unique_items.yaml": { "filePath": "bad/unique_items.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -37672,7 +37672,7 @@ "bad/unknown_properties.yaml": { "filePath": "bad/unknown_properties.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -37829,7 +37829,7 @@ "cdk/DemoStack.template.json": { "filePath": "cdk/DemoStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -38309,7 +38309,7 @@ "cdk/amazon-mq-rabbitmq-lambda--AmazonMqRabbitmqLambdaStack.template.json": { "filePath": "cdk/amazon-mq-rabbitmq-lambda--AmazonMqRabbitmqLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 27, @@ -39249,7 +39249,7 @@ "cdk/amplify-console-app--AmplifyConsoleApp.template.json": { "filePath": "cdk/amplify-console-app--AmplifyConsoleApp.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -39372,7 +39372,7 @@ "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json": { "filePath": "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 41, @@ -41338,7 +41338,7 @@ "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json": { "filePath": "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 19, @@ -42089,7 +42089,7 @@ "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json": { "filePath": "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 20, @@ -42830,7 +42830,7 @@ "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json": { "filePath": "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 27, @@ -43813,7 +43813,7 @@ "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json": { "filePath": "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 18, @@ -44520,7 +44520,7 @@ "cdk/api-websocket-lambda-dynamodb--chat-app.template.json": { "filePath": "cdk/api-websocket-lambda-dynamodb--chat-app.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 22, @@ -45035,7 +45035,7 @@ "cdk/application-load-balancer--LoadBalancerStack.template.json": { "filePath": "cdk/application-load-balancer--LoadBalancerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 36, @@ -46624,7 +46624,7 @@ "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json": { "filePath": "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 15, @@ -47077,7 +47077,7 @@ "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json": { "filePath": "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -47460,7 +47460,7 @@ "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json": { "filePath": "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -47863,7 +47863,7 @@ "cdk/aspects--SampleStack.template.json": { "filePath": "cdk/aspects--SampleStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -48195,7 +48195,7 @@ "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json": { "filePath": "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -48298,7 +48298,7 @@ "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json": { "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 29, @@ -49441,7 +49441,7 @@ "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json": { "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 29, @@ -50584,7 +50584,7 @@ "cdk/backup-s3--AwsBackupS3Stack.template.json": { "filePath": "cdk/backup-s3--AwsBackupS3Stack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -50731,7 +50731,7 @@ "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json": { "filePath": "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 41, @@ -51999,7 +51999,7 @@ "cdk/classic-load-balancer--LoadBalancerStack.template.json": { "filePath": "cdk/classic-load-balancer--LoadBalancerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 33, @@ -53371,7 +53371,7 @@ "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json": { "filePath": "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 13, @@ -53646,7 +53646,7 @@ "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json": { "filePath": "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 74, @@ -55983,7 +55983,7 @@ "cdk/cognito-api-lambda--CognitoProtectedApi.template.json": { "filePath": "cdk/cognito-api-lambda--CognitoProtectedApi.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 14, @@ -56534,7 +56534,7 @@ "cdk/custom-logical-names--MyStack.template.json": { "filePath": "cdk/custom-logical-names--MyStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -56614,7 +56614,7 @@ "cdk/custom-resource--CustomResourceDemoStack.template.json": { "filePath": "cdk/custom-resource--CustomResourceDemoStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -56805,7 +56805,7 @@ "cdk/custom-resource-provider--CustomResourceDemoStack.template.json": { "filePath": "cdk/custom-resource-provider--CustomResourceDemoStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -57050,7 +57050,7 @@ "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json": { "filePath": "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 16, @@ -57521,7 +57521,7 @@ "cdk/ec2-instance--EC2Example.template.json": { "filePath": "cdk/ec2-instance--EC2Example.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 28, @@ -58387,7 +58387,7 @@ "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json": { "filePath": "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 29, @@ -59164,7 +59164,7 @@ "cdk/ecs-cluster--MyFirstEcsCluster.template.json": { "filePath": "cdk/ecs-cluster--MyFirstEcsCluster.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 33, @@ -60284,7 +60284,7 @@ "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json": { "filePath": "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 25, @@ -61179,7 +61179,7 @@ "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json": { "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -61359,7 +61359,7 @@ "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json": { "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -62038,7 +62038,7 @@ "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json": { "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -62339,7 +62339,7 @@ "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json": { "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -62879,7 +62879,7 @@ "cdk/ecs-ecs-service-with-logging--Willkommen.template.json": { "filePath": "cdk/ecs-ecs-service-with-logging--Willkommen.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 46, @@ -64403,7 +64403,7 @@ "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json": { "filePath": "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 44, @@ -65928,7 +65928,7 @@ "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json": { "filePath": "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 43, @@ -67394,7 +67394,7 @@ "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json": { "filePath": "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 38, @@ -69101,7 +69101,7 @@ "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json": { "filePath": "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 37, @@ -70658,7 +70658,7 @@ "cdk/ecs-fargate-service-with-logging--Willkommen.template.json": { "filePath": "cdk/ecs-fargate-service-with-logging--Willkommen.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 32, @@ -71893,7 +71893,7 @@ "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json": { "filePath": "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -72192,7 +72192,7 @@ "cdk/http-proxy-apigateway--HttpProxy.template.json": { "filePath": "cdk/http-proxy-apigateway--HttpProxy.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -72550,7 +72550,7 @@ "cdk/imagebuilder--ImagebuilderStack.template.json": { "filePath": "cdk/imagebuilder--ImagebuilderStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -73218,7 +73218,7 @@ "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json": { "filePath": "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -73388,7 +73388,7 @@ "cdk/inspector2--Inspector2EnableStack.template.json": { "filePath": "cdk/inspector2--Inspector2EnableStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -73486,7 +73486,7 @@ "cdk/inspector2--Inspector2MonitoringStack.template.json": { "filePath": "cdk/inspector2--Inspector2MonitoringStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 14, @@ -73928,7 +73928,7 @@ "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json": { "filePath": "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -74137,7 +74137,7 @@ "cdk/lambda-cron--LambdaCronExample.template.json": { "filePath": "cdk/lambda-cron--LambdaCronExample.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -74353,7 +74353,7 @@ "cdk/lambda-layer--LambdaLayerStack.template.json": { "filePath": "cdk/lambda-layer--LambdaLayerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -74514,7 +74514,7 @@ "cdk/lambda-manage-s3-event-notification--AStack.template.json": { "filePath": "cdk/lambda-manage-s3-event-notification--AStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -74629,7 +74629,7 @@ "cdk/lambda-manage-s3-event-notification--BStack.template.json": { "filePath": "cdk/lambda-manage-s3-event-notification--BStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -74727,7 +74727,7 @@ "cdk/lambda-manage-s3-event-notification--SharedStack.template.json": { "filePath": "cdk/lambda-manage-s3-event-notification--SharedStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -74881,7 +74881,7 @@ "cdk/my-widget-service--MyWidgetServiceStack.template.json": { "filePath": "cdk/my-widget-service--MyWidgetServiceStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 23, @@ -76115,7 +76115,7 @@ "cdk/pat-the-big-fan--TheBigFanStack.template.json": { "filePath": "cdk/pat-the-big-fan--TheBigFanStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 27, @@ -77114,7 +77114,7 @@ "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json": { "filePath": "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 20, @@ -77667,7 +77667,7 @@ "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json": { "filePath": "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 28, @@ -78783,7 +78783,7 @@ "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json": { "filePath": "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 17, @@ -79385,7 +79385,7 @@ "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json": { "filePath": "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 28, @@ -80687,7 +80687,7 @@ "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json": { "filePath": "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 22, @@ -81663,7 +81663,7 @@ "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json": { "filePath": "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 57, @@ -83676,7 +83676,7 @@ "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json": { "filePath": "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 10, @@ -84049,7 +84049,7 @@ "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json": { "filePath": "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 44, @@ -85469,7 +85469,7 @@ "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json": { "filePath": "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 22, @@ -86451,7 +86451,7 @@ "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json": { "filePath": "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -86699,7 +86699,7 @@ "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json": { "filePath": "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 22, @@ -87516,7 +87516,7 @@ "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json": { "filePath": "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 10, @@ -87889,7 +87889,7 @@ "cdk/pat-the-state-machine--TheStateMachineStack.template.json": { "filePath": "cdk/pat-the-state-machine--TheStateMachineStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -88255,7 +88255,7 @@ "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json": { "filePath": "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -88798,7 +88798,7 @@ "cdk/pat-the-waf-apigateway--TheWafStack.template.json": { "filePath": "cdk/pat-the-waf-apigateway--TheWafStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -88925,7 +88925,7 @@ "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json": { "filePath": "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -89220,7 +89220,7 @@ "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json": { "filePath": "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -89497,7 +89497,7 @@ "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json": { "filePath": "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -89952,7 +89952,7 @@ "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json": { "filePath": "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -90466,7 +90466,7 @@ "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json": { "filePath": "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 14, @@ -90988,7 +90988,7 @@ "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json": { "filePath": "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 13, @@ -91582,7 +91582,7 @@ "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json": { "filePath": "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 28, @@ -92545,7 +92545,7 @@ "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json": { "filePath": "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 15, @@ -93049,7 +93049,7 @@ "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json": { "filePath": "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 21, @@ -93640,7 +93640,7 @@ "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json": { "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -93846,7 +93846,7 @@ "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json": { "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -94064,7 +94064,7 @@ "cdk/py-docker-app-with-asg-alb--ASGStack.template.json": { "filePath": "cdk/py-docker-app-with-asg-alb--ASGStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 13, @@ -94863,7 +94863,7 @@ "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json": { "filePath": "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 22, @@ -95698,7 +95698,7 @@ "cdk/py-docker-app-with-asg-alb--RDSStack.template.json": { "filePath": "cdk/py-docker-app-with-asg-alb--RDSStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -96008,7 +96008,7 @@ "cdk/py-docker-app-with-asg-alb--StorageStack.template.json": { "filePath": "cdk/py-docker-app-with-asg-alb--StorageStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -96184,7 +96184,7 @@ "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json": { "filePath": "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -96572,7 +96572,7 @@ "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json": { "filePath": "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 43, @@ -98068,7 +98068,7 @@ "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json": { "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 29, @@ -99035,7 +99035,7 @@ "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json": { "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -99211,7 +99211,7 @@ "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json": { "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 20, @@ -100406,7 +100406,7 @@ "cdk/py-emr--emr-cluster.template.json": { "filePath": "cdk/py-emr--emr-cluster.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 16, @@ -101114,7 +101114,7 @@ "cdk/py-iotcore--CdkIotThingStack.template.json": { "filePath": "cdk/py-iotcore--CdkIotThingStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 19, @@ -101686,7 +101686,7 @@ "cdk/py-lambda-cron--LambdaCronExample.template.json": { "filePath": "cdk/py-lambda-cron--LambdaCronExample.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -101884,7 +101884,7 @@ "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json": { "filePath": "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -102022,7 +102022,7 @@ "cdk/py-lambda-layer--LambdaLayerExample.template.json": { "filePath": "cdk/py-lambda-layer--LambdaLayerExample.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -102201,7 +102201,7 @@ "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json": { "filePath": "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -102443,7 +102443,7 @@ "cdk/py-url-shortener--urlshort-app.template.json": { "filePath": "cdk/py-url-shortener--urlshort-app.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 20, @@ -103353,7 +103353,7 @@ "cdk/py-url-shortener--urlshort-load-test.template.json": { "filePath": "cdk/py-url-shortener--urlshort-load-test.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -103736,7 +103736,7 @@ "cdk/r53-resolver--R53ResolverStack.template.json": { "filePath": "cdk/r53-resolver--R53ResolverStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 18, @@ -104454,7 +104454,7 @@ "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json": { "filePath": "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 15, @@ -104816,7 +104816,7 @@ "cdk/resource-overrides--resource-overrides.template.json": { "filePath": "cdk/resource-overrides--resource-overrides.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 21, @@ -105600,7 +105600,7 @@ "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json": { "filePath": "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 31, @@ -106791,7 +106791,7 @@ "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json": { "filePath": "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -107130,7 +107130,7 @@ "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json": { "filePath": "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 17, @@ -107632,7 +107632,7 @@ "cdk/static-site-basic--MyStaticSite.template.json": { "filePath": "cdk/static-site-basic--MyStaticSite.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -107847,7 +107847,7 @@ "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json": { "filePath": "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -108254,7 +108254,7 @@ "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json": { "filePath": "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 11, @@ -108532,7 +108532,7 @@ "good/E9001_aws_cdk_metadata.yaml": { "filePath": "good/E9001_aws_cdk_metadata.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -108614,7 +108614,7 @@ "good/W1028_pseudo_param_branches_reachable.yaml": { "filePath": "good/W1028_pseudo_param_branches_reachable.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -108676,7 +108676,7 @@ "good/W3010_getazs_not_flagged.yaml": { "filePath": "good/W3010_getazs_not_flagged.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -108816,7 +108816,7 @@ "good/aurora_dbinstance.yaml": { "filePath": "good/aurora_dbinstance.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -108966,7 +108966,7 @@ "good/both_forms.yaml": { "filePath": "good/both_forms.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 13, @@ -109066,7 +109066,7 @@ "good/cdk_bootstrap_version_rule.json": { "filePath": "good/cdk_bootstrap_version_rule.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -109128,7 +109128,7 @@ "good/cloudfront_valid.yaml": { "filePath": "good/cloudfront_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -109210,7 +109210,7 @@ "good/codepipeline_artifact_counts.yaml": { "filePath": "good/codepipeline_artifact_counts.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -109305,7 +109305,7 @@ "good/complex_conditions.yaml": { "filePath": "good/complex_conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -109549,7 +109549,7 @@ "good/conditions.yaml": { "filePath": "good/conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -109670,7 +109670,7 @@ "good/conditions/and.yaml": { "filePath": "good/conditions/and.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -109713,7 +109713,7 @@ "good/core/conditions.yaml": { "filePath": "good/core/conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -110185,7 +110185,7 @@ "good/core/config_cfn_lint.json": { "filePath": "good/core/config_cfn_lint.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -110243,7 +110243,7 @@ "good/core/config_cfn_lint.yaml": { "filePath": "good/core/config_cfn_lint.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -110301,7 +110301,7 @@ "good/core/config_default_e3012.yaml": { "filePath": "good/core/config_default_e3012.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -110400,7 +110400,7 @@ "good/core/config_only_i1002.yaml": { "filePath": "good/core/config_only_i1002.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -110458,7 +110458,7 @@ "good/core/config_only_i1003.yaml": { "filePath": "good/core/config_only_i1003.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -110516,7 +110516,7 @@ "good/core/config_parameters.yaml": { "filePath": "good/core/config_parameters.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -110574,7 +110574,7 @@ "good/core/directives.yaml": { "filePath": "good/core/directives.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -110668,7 +110668,7 @@ "good/custom/is-defined.yaml": { "filePath": "good/custom/is-defined.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -111096,7 +111096,7 @@ "good/custom/is-not-defined.yaml": { "filePath": "good/custom/is-not-defined.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -111391,7 +111391,7 @@ "good/custom/numeric-inequalities-large.yaml": { "filePath": "good/custom/numeric-inequalities-large.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -111597,7 +111597,7 @@ "good/custom/numeric-inequalities-small.yaml": { "filePath": "good/custom/numeric-inequalities-small.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -111803,7 +111803,7 @@ "good/decode/parsing.json": { "filePath": "good/decode/parsing.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -111875,7 +111875,7 @@ "good/deletion_policies.yaml": { "filePath": "good/deletion_policies.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -112058,7 +112058,7 @@ "good/dynamodb_provisioned.yaml": { "filePath": "good/dynamodb_provisioned.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -112172,7 +112172,7 @@ "good/dynamodb_valid_attributes.yaml": { "filePath": "good/dynamodb_valid_attributes.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -112286,7 +112286,7 @@ "good/ecs_awsvpc_valid.yaml": { "filePath": "good/ecs_awsvpc_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -112390,7 +112390,7 @@ "good/ecs_fargate.yaml": { "filePath": "good/ecs_fargate.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -112596,7 +112596,7 @@ "good/ecs_fargate_valid.yaml": { "filePath": "good/ecs_fargate_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -112784,7 +112784,7 @@ "good/functions/foreach.yaml": { "filePath": "good/functions/foreach.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -112827,7 +112827,7 @@ "good/functions/ref.yaml": { "filePath": "good/functions/ref.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -112870,7 +112870,7 @@ "good/functions/relationship_conditions.yaml": { "filePath": "good/functions/relationship_conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -113030,7 +113030,7 @@ "good/functions/relationship_conditions_sam.yaml": { "filePath": "good/functions/relationship_conditions_sam.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -113150,7 +113150,7 @@ "good/functions/sub.yaml": { "filePath": "good/functions/sub.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -113629,7 +113629,7 @@ "good/functions/sub_needed.yaml": { "filePath": "good/functions/sub_needed.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -113969,7 +113969,7 @@ "good/functions/sub_needed_custom_excludes.yaml": { "filePath": "good/functions/sub_needed_custom_excludes.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -114085,7 +114085,7 @@ "good/functions/sub_needed_transform.yaml": { "filePath": "good/functions/sub_needed_transform.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -114128,7 +114128,7 @@ "good/functions_findinmap.yaml": { "filePath": "good/functions_findinmap.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -114292,7 +114292,7 @@ "good/functions_findinmap_default_value.yaml": { "filePath": "good/functions_findinmap_default_value.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 9, @@ -114758,7 +114758,7 @@ "good/functions_findinmap_enhanced.yaml": { "filePath": "good/functions_findinmap_enhanced.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -115156,7 +115156,7 @@ "good/generic.yaml": { "filePath": "good/generic.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 13, @@ -115561,7 +115561,7 @@ "good/iam_valid.yaml": { "filePath": "good/iam_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -115623,7 +115623,7 @@ "good/lambda_snapstart.yaml": { "filePath": "good/lambda_snapstart.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -115739,7 +115739,7 @@ "good/lambda_zipfile.yaml": { "filePath": "good/lambda_zipfile.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -115854,7 +115854,7 @@ "good/mappings/name.yaml": { "filePath": "good/mappings/name.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -115926,7 +115926,7 @@ "good/mappings/used.yaml": { "filePath": "good/mappings/used.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -116049,7 +116049,7 @@ "good/mappings_valid.yaml": { "filePath": "good/mappings_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -116125,7 +116125,7 @@ "good/minimal.yaml": { "filePath": "good/minimal.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -116187,7 +116187,7 @@ "good/modules/minimal.yaml": { "filePath": "good/modules/minimal.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -116249,7 +116249,7 @@ "good/no_value.yaml": { "filePath": "good/no_value.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -116512,7 +116512,7 @@ "good/no_w3010_on_unlisted_type.yaml": { "filePath": "good/no_w3010_on_unlisted_type.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -116700,7 +116700,7 @@ "good/override/complete.yaml": { "filePath": "good/override/complete.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -116876,7 +116876,7 @@ "good/override/required.yaml": { "filePath": "good/override/required.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -116958,7 +116958,7 @@ "good/param_constraints_valid.yaml": { "filePath": "good/param_constraints_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -117048,7 +117048,7 @@ "good/parameters/default.yaml": { "filePath": "good/parameters/default.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -117330,7 +117330,7 @@ "good/parameters/not_used_parameters.yaml": { "filePath": "good/parameters/not_used_parameters.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -117512,7 +117512,7 @@ "good/parameters/used_transform_language_extension.json": { "filePath": "good/parameters/used_transform_language_extension.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -117570,7 +117570,7 @@ "good/parameters/used_transform_removed.yaml": { "filePath": "good/parameters/used_transform_removed.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -117632,7 +117632,7 @@ "good/parameters/used_transforms.yaml": { "filePath": "good/parameters/used_transforms.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -117814,7 +117814,7 @@ "good/properties_ec2_vpc.yaml": { "filePath": "good/properties_ec2_vpc.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -118210,7 +118210,7 @@ "good/properties_rt_association.yaml": { "filePath": "good/properties_rt_association.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -118524,7 +118524,7 @@ "good/redshift_private.yaml": { "filePath": "good/redshift_private.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -118855,7 +118855,7 @@ "good/resources/backup/test_backup_plan_lifecycle_rule.yml": { "filePath": "good/resources/backup/test_backup_plan_lifecycle_rule.yml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -118898,7 +118898,7 @@ "good/resources/cloudformation/nested_stack_dynamic.yaml": { "filePath": "good/resources/cloudformation/nested_stack_dynamic.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -118960,7 +118960,7 @@ "good/resources/cloudformation/stack_nested.yaml": { "filePath": "good/resources/cloudformation/stack_nested.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -119046,7 +119046,7 @@ "good/resources/cloudformation/stacks.yaml": { "filePath": "good/resources/cloudformation/stacks.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -119391,7 +119391,7 @@ "good/resources/cloudfront/aliases.yaml": { "filePath": "good/resources/cloudfront/aliases.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -119473,7 +119473,7 @@ "good/resources/dynamodb/attributes.yaml": { "filePath": "good/resources/dynamodb/attributes.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -119617,7 +119617,7 @@ "good/resources/elasticache/cache_cluster_failover.yaml": { "filePath": "good/resources/elasticache/cache_cluster_failover.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 10, @@ -120536,7 +120536,7 @@ "good/resources/iam/instance_profile.yaml": { "filePath": "good/resources/iam/instance_profile.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -120680,7 +120680,7 @@ "good/resources/iam/managed_policy_description.yaml": { "filePath": "good/resources/iam/managed_policy_description.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -120745,7 +120745,7 @@ "good/resources/iam/policy.yaml": { "filePath": "good/resources/iam/policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -120810,7 +120810,7 @@ "good/resources/iam/ref_with_path.yaml": { "filePath": "good/resources/iam/ref_with_path.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -121069,7 +121069,7 @@ "good/resources/iam/resource_policy.yaml": { "filePath": "good/resources/iam/resource_policy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -121131,7 +121131,7 @@ "good/resources/lambda/required_properties.yaml": { "filePath": "good/resources/lambda/required_properties.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -121315,7 +121315,7 @@ "good/resources/name.yaml": { "filePath": "good/resources/name.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -121419,7 +121419,7 @@ "good/resources/primary_identifiers.yaml": { "filePath": "good/resources/primary_identifiers.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -121799,7 +121799,7 @@ "good/resources/properties/allowed_pattern.yaml": { "filePath": "good/resources/properties/allowed_pattern.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -121903,7 +121903,7 @@ "good/resources/properties/az_cdk.yaml": { "filePath": "good/resources/properties/az_cdk.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -122042,7 +122042,7 @@ "good/resources/properties/custom.yaml": { "filePath": "good/resources/properties/custom.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -122085,7 +122085,7 @@ "good/resources/properties/exclusive.yaml": { "filePath": "good/resources/properties/exclusive.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -122273,7 +122273,7 @@ "good/resources/properties/hard_coded_arn_properties.yaml": { "filePath": "good/resources/properties/hard_coded_arn_properties.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -122392,7 +122392,7 @@ "good/resources/properties/hard_coded_arn_properties_cdk.yaml": { "filePath": "good/resources/properties/hard_coded_arn_properties_cdk.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -122586,7 +122586,7 @@ "good/resources/properties/hard_coded_arn_properties_sam.yaml": { "filePath": "good/resources/properties/hard_coded_arn_properties_sam.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -122768,7 +122768,7 @@ "good/resources/properties/list_duplicates.yaml": { "filePath": "good/resources/properties/list_duplicates.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -122920,7 +122920,7 @@ "good/resources/properties/password.yaml": { "filePath": "good/resources/properties/password.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -123406,7 +123406,7 @@ "good/resources/properties/string_size.yaml": { "filePath": "good/resources/properties/string_size.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -123468,7 +123468,7 @@ "good/resources/properties/templated_code.yaml": { "filePath": "good/resources/properties/templated_code.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -123551,7 +123551,7 @@ "good/resources/properties/templated_code_sam.yaml": { "filePath": "good/resources/properties/templated_code_sam.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -123613,7 +123613,7 @@ "good/resources/rds/instance_sizes.yaml": { "filePath": "good/resources/rds/instance_sizes.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -124145,7 +124145,7 @@ "good/resources/s3/access-control-obsolete.yaml": { "filePath": "good/resources/s3/access-control-obsolete.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -124266,7 +124266,7 @@ "good/resources_codepipeline.yaml": { "filePath": "good/resources_codepipeline.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -124382,7 +124382,7 @@ "good/resources_cognito_userpool_tag_is_string_map.yaml": { "filePath": "good/resources_cognito_userpool_tag_is_string_map.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -124458,7 +124458,7 @@ "good/resources_deletionpolicy.yaml": { "filePath": "good/resources_deletionpolicy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -124572,7 +124572,7 @@ "good/resources_updatereplacepolicy.yaml": { "filePath": "good/resources_updatereplacepolicy.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -124686,7 +124686,7 @@ "good/schema_resource.yaml": { "filePath": "good/schema_resource.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -124751,7 +124751,7 @@ "good/schema_valid_resources.yaml": { "filePath": "good/schema_valid_resources.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -124851,7 +124851,7 @@ "good/simple_sub_prefix.yaml": { "filePath": "good/simple_sub_prefix.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -124934,7 +124934,7 @@ "good/some_logs_stream_lambda.yaml": { "filePath": "good/some_logs_stream_lambda.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -125410,7 +125410,7 @@ "good/sqs_fifo_valid.yaml": { "filePath": "good/sqs_fifo_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -125563,7 +125563,7 @@ "good/ssm_document_valid.yaml": { "filePath": "good/ssm_document_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -125646,7 +125646,7 @@ "good/ssm_parameter_name_type.yaml": { "filePath": "good/ssm_parameter_name_type.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -125729,7 +125729,7 @@ "good/stepfunctions_valid.yaml": { "filePath": "good/stepfunctions_valid.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -125824,7 +125824,7 @@ "good/sub_not_needed.yaml": { "filePath": "good/sub_not_needed.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -125907,7 +125907,7 @@ "good/transform.yaml": { "filePath": "good/transform.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -125987,7 +125987,7 @@ "good/transform/applications_location.yaml": { "filePath": "good/transform/applications_location.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -126067,7 +126067,7 @@ "good/transform/auto_publish_alias.yaml": { "filePath": "good/transform/auto_publish_alias.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -126147,7 +126147,7 @@ "good/transform/auto_publish_code_sha256.yaml": { "filePath": "good/transform/auto_publish_code_sha256.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -126209,7 +126209,7 @@ "good/transform/function_use_s3_uri.yaml": { "filePath": "good/transform/function_use_s3_uri.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -126271,7 +126271,7 @@ "good/transform/function_using_image.yaml": { "filePath": "good/transform/function_using_image.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -126333,7 +126333,7 @@ "good/transform/language_extension.yaml": { "filePath": "good/transform/language_extension.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -126639,7 +126639,7 @@ "good/transform/list_transform.yaml": { "filePath": "good/transform/list_transform.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -126701,7 +126701,7 @@ "good/transform/list_transform_many.yaml": { "filePath": "good/transform/list_transform_many.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -126763,7 +126763,7 @@ "good/transform/list_transform_not_sam.yaml": { "filePath": "good/transform/list_transform_not_sam.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -126841,7 +126841,7 @@ "good/transform/step_function_local_definition.yaml": { "filePath": "good/transform/step_function_local_definition.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -126903,7 +126903,7 @@ "good/transform_serverless_api.yaml": { "filePath": "good/transform_serverless_api.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -126983,7 +126983,7 @@ "good/transform_serverless_auto_publish_alias.yaml": { "filePath": "good/transform_serverless_auto_publish_alias.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -127063,7 +127063,7 @@ "good/transform_serverless_function.yaml": { "filePath": "good/transform_serverless_function.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -127161,7 +127161,7 @@ "good/transform_serverless_globals.yaml": { "filePath": "good/transform_serverless_globals.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -127241,7 +127241,7 @@ "good/vpc_subnets.yaml": { "filePath": "good/vpc_subnets.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -127556,7 +127556,7 @@ "integration/availability-zones.yaml": { "filePath": "integration/availability-zones.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -127738,7 +127738,7 @@ "integration/aws-dynamodb-table.yaml": { "filePath": "integration/aws-dynamodb-table.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -127957,7 +127957,7 @@ "integration/aws-ec2-instance.yaml": { "filePath": "integration/aws-ec2-instance.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -128166,7 +128166,7 @@ "integration/aws-ec2-launchtemplate.yaml": { "filePath": "integration/aws-ec2-launchtemplate.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -128328,7 +128328,7 @@ "integration/aws-ec2-networkinterface.yaml": { "filePath": "integration/aws-ec2-networkinterface.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -128454,7 +128454,7 @@ "integration/aws-ec2-subnet.yaml": { "filePath": "integration/aws-ec2-subnet.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -128926,7 +128926,7 @@ "integration/aws-lambda-function.yaml": { "filePath": "integration/aws-lambda-function.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -129006,7 +129006,7 @@ "integration/cfn-gather.yaml": { "filePath": "integration/cfn-gather.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 17, @@ -130173,7 +130173,7 @@ "integration/custom-resources.yaml": { "filePath": "integration/custom-resources.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -130273,7 +130273,7 @@ "integration/deployment-file-template.yaml": { "filePath": "integration/deployment-file-template.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 3, @@ -130496,7 +130496,7 @@ "integration/dynamic-references.yaml": { "filePath": "integration/dynamic-references.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -130792,7 +130792,7 @@ "integration/formats.yaml": { "filePath": "integration/formats.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -131162,7 +131162,7 @@ "integration/getatt-types.yaml": { "filePath": "integration/getatt-types.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -131639,7 +131639,7 @@ "integration/metdata.yaml": { "filePath": "integration/metdata.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 0, @@ -131711,7 +131711,7 @@ "integration/ref-no-value.yaml": { "filePath": "integration/ref-no-value.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -131955,7 +131955,7 @@ "integration/ref-types.yaml": { "filePath": "integration/ref-types.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 13, @@ -132837,7 +132837,7 @@ "integration/resources-cloudformation-init.yaml": { "filePath": "integration/resources-cloudformation-init.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -132951,7 +132951,7 @@ "issues/sam_w_conditions.yaml": { "filePath": "issues/sam_w_conditions.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 17, @@ -133682,7 +133682,7 @@ "lsp/comprehensive.json": { "filePath": "lsp/comprehensive.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -134379,7 +134379,7 @@ "lsp/comprehensive.yaml": { "filePath": "lsp/comprehensive.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -135103,7 +135103,7 @@ "lsp/condition-usage.json": { "filePath": "lsp/condition-usage.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 4, @@ -135432,7 +135432,7 @@ "lsp/condition-usage.yaml": { "filePath": "lsp/condition-usage.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 8, @@ -135948,7 +135948,7 @@ "lsp/constants.json": { "filePath": "lsp/constants.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -136060,7 +136060,7 @@ "lsp/constants.yaml": { "filePath": "lsp/constants.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -136172,7 +136172,7 @@ "lsp/parameter_usage.json": { "filePath": "lsp/parameter_usage.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -136448,7 +136448,7 @@ "lsp/parameter_usage.yaml": { "filePath": "lsp/parameter_usage.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 7, @@ -136800,7 +136800,7 @@ "lsp/simple.json": { "filePath": "lsp/simple.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -136862,7 +136862,7 @@ "lsp/simple.yaml": { "filePath": "lsp/simple.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -136924,7 +136924,7 @@ "lsp/test-template.yaml": { "filePath": "lsp/test-template.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -137036,7 +137036,7 @@ "public/lambda-poller.json": { "filePath": "public/lambda-poller.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -137276,7 +137276,7 @@ "public/lambda-poller.yaml": { "filePath": "public/lambda-poller.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -137516,7 +137516,7 @@ "public/rds-cluster.yaml": { "filePath": "public/rds-cluster.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 1, @@ -137687,7 +137687,7 @@ "public/watchmaker.json": { "filePath": "public/watchmaker.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -138377,7 +138377,7 @@ "quickstart/cis_benchmark.yaml": { "filePath": "quickstart/cis_benchmark.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 79, @@ -142605,7 +142605,7 @@ "quickstart/config-rules.json": { "filePath": "quickstart/config-rules.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -143090,7 +143090,7 @@ "quickstart/iam.json": { "filePath": "quickstart/iam.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 18, @@ -143374,7 +143374,7 @@ "quickstart/nat-instance.json": { "filePath": "quickstart/nat-instance.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -143692,7 +143692,7 @@ "quickstart/nist_application.yaml": { "filePath": "quickstart/nist_application.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 28, @@ -146346,7 +146346,7 @@ "quickstart/nist_config_rules.yaml": { "filePath": "quickstart/nist_config_rules.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 12, @@ -146831,7 +146831,7 @@ "quickstart/nist_high_main.yaml": { "filePath": "quickstart/nist_high_main.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 6, @@ -147900,7 +147900,7 @@ "quickstart/nist_iam.yaml": { "filePath": "quickstart/nist_iam.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 18, @@ -148184,7 +148184,7 @@ "quickstart/nist_logging.yaml": { "filePath": "quickstart/nist_logging.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 24, @@ -149676,7 +149676,7 @@ "quickstart/nist_vpc_management.yaml": { "filePath": "quickstart/nist_vpc_management.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 33, @@ -151690,7 +151690,7 @@ "quickstart/nist_vpc_production.yaml": { "filePath": "quickstart/nist_vpc_production.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 46, @@ -154945,7 +154945,7 @@ "quickstart/openshift.yaml": { "filePath": "quickstart/openshift.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 19, @@ -156827,7 +156827,7 @@ "quickstart/openshift_master.yaml": { "filePath": "quickstart/openshift_master.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 2, @@ -156971,7 +156971,7 @@ "quickstart/test.yaml": { "filePath": "quickstart/test.yaml", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 5, @@ -157206,7 +157206,7 @@ "quickstart/vpc-management.json": { "filePath": "quickstart/vpc-management.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 33, @@ -159234,7 +159234,7 @@ "quickstart/vpc.json": { "filePath": "quickstart/vpc.json", "status": "OK", - "engineVersion": "1.2.0", + "engineVersion": "1.3.0", "metadata": { "rulesEvaluated": 273, "resourcesScanned": 77, From e58ac2d22718a6f3dfba1851497c730ce5e82604 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Mon, 29 Jun 2026 15:56:24 -0400 Subject: [PATCH 2/3] Add tests --- scripts/compare_cfnlint.py | 2 +- .../tests/kotlin/src/test/kotlin/SmokeTest.kt | 2 +- src/bindings-wasm/tests/smoke.test.ts | 2 +- src/cfn-validate/tests/common/mod.rs | 2 +- src/cfn-validate/tests/github_issues.rs | 609 ++ src/resources/expected/all_templates.json | 5621 +++++++++++++++++ src/resources/expected/generate.py | 2 +- .../templates/gh-issues/issue-34.json | 28 + .../templates/gh-issues/issue-35.yaml | 9 + .../templates/gh-issues/issue-36.yaml | 11 + .../templates/gh-issues/issue-37.yaml | 15 + .../templates/gh-issues/issue-38.json | 54 + .../templates/gh-issues/issue-39.json | 40 + .../templates/gh-issues/issue-40.yaml | 32 + .../templates/gh-issues/issue-41.json | 25 + .../templates/gh-issues/issue-42.yaml | 28 + .../templates/gh-issues/issue-44.json | 61 + .../templates/gh-issues/issue-45.json | 28 + .../templates/gh-issues/issue-46.json | 36 + .../templates/gh-issues/issue-47.json | 16 + .../templates/gh-issues/issue-48.json | 19 + .../templates/gh-issues/issue-49.yaml | 17 + .../templates/gh-issues/issue-50.json | 31 + .../templates/gh-issues/issue-52.json | 15 + .../templates/gh-issues/issue-53.json | 1155 ++++ .../templates/gh-issues/issue-54.json | 10 + .../templates/gh-issues/issue-55.json | 24 + .../templates/gh-issues/issue-56.json | 16 + .../templates/gh-issues/issue-57.json | 61 + .../templates/gh-issues/issue-61.json | 7 + .../templates/gh-issues/issue-62.json | 22 + .../templates/gh-issues/issue-63.json | 36 + .../templates/gh-issues/issue-65.json | 25 + .../templates/gh-issues/issue-67.json | 20 + .../templates/gh-issues/issue-68.json | 29 + .../templates/gh-issues/issue-69.yaml | 8 + 36 files changed, 8113 insertions(+), 5 deletions(-) create mode 100644 src/cfn-validate/tests/github_issues.rs create mode 100644 src/resources/templates/gh-issues/issue-34.json create mode 100644 src/resources/templates/gh-issues/issue-35.yaml create mode 100644 src/resources/templates/gh-issues/issue-36.yaml create mode 100644 src/resources/templates/gh-issues/issue-37.yaml create mode 100644 src/resources/templates/gh-issues/issue-38.json create mode 100644 src/resources/templates/gh-issues/issue-39.json create mode 100644 src/resources/templates/gh-issues/issue-40.yaml create mode 100644 src/resources/templates/gh-issues/issue-41.json create mode 100644 src/resources/templates/gh-issues/issue-42.yaml create mode 100644 src/resources/templates/gh-issues/issue-44.json create mode 100644 src/resources/templates/gh-issues/issue-45.json create mode 100644 src/resources/templates/gh-issues/issue-46.json create mode 100644 src/resources/templates/gh-issues/issue-47.json create mode 100644 src/resources/templates/gh-issues/issue-48.json create mode 100644 src/resources/templates/gh-issues/issue-49.yaml create mode 100644 src/resources/templates/gh-issues/issue-50.json create mode 100644 src/resources/templates/gh-issues/issue-52.json create mode 100644 src/resources/templates/gh-issues/issue-53.json create mode 100644 src/resources/templates/gh-issues/issue-54.json create mode 100644 src/resources/templates/gh-issues/issue-55.json create mode 100644 src/resources/templates/gh-issues/issue-56.json create mode 100644 src/resources/templates/gh-issues/issue-57.json create mode 100644 src/resources/templates/gh-issues/issue-61.json create mode 100644 src/resources/templates/gh-issues/issue-62.json create mode 100644 src/resources/templates/gh-issues/issue-63.json create mode 100644 src/resources/templates/gh-issues/issue-65.json create mode 100644 src/resources/templates/gh-issues/issue-67.json create mode 100644 src/resources/templates/gh-issues/issue-68.json create mode 100644 src/resources/templates/gh-issues/issue-69.yaml diff --git a/scripts/compare_cfnlint.py b/scripts/compare_cfnlint.py index cfe45f6..bd9e03a 100644 --- a/scripts/compare_cfnlint.py +++ b/scripts/compare_cfnlint.py @@ -214,7 +214,7 @@ def _load_cfnlint_result_file(f, prefix, results): def load_cfnlint_results_from_files(): results = {} - for subdir in ["bad", "cdk", "good", "integration", "issues", "lsp", "public", "quickstart"]: + for subdir in ["bad", "cdk", "good", "gh-issues", "integration", "issues", "lsp", "public", "quickstart"]: d = CFN_LINT_RESULTS / subdir if not d.exists(): continue diff --git a/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt b/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt index 3026006..efe0a83 100644 --- a/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt +++ b/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt @@ -25,7 +25,7 @@ class SmokeTest { private val EXPECTED_TEMPLATES: List private val COMBINED_GOLDEN: Map - private val GOLDEN_DIRS = listOf("bad", "cdk", "good", "integration", "issues", "lsp", "public", "quickstart") + private val GOLDEN_DIRS = listOf("bad", "cdk", "good", "gh-issues", "integration", "issues", "lsp", "public", "quickstart") init { val goldenFile = File(expectedDir, "all_templates.json") diff --git a/src/bindings-wasm/tests/smoke.test.ts b/src/bindings-wasm/tests/smoke.test.ts index 08e3b1f..82251d6 100644 --- a/src/bindings-wasm/tests/smoke.test.ts +++ b/src/bindings-wasm/tests/smoke.test.ts @@ -20,7 +20,7 @@ const COMBINED_GOLDEN: Record = JSON.parse( fs.readFileSync(path.join(EXPECTED_DIR, "all_templates.json"), "utf-8") ); -const GOLDEN_DIRS = ['bad', 'cdk', 'good', 'integration', 'issues', 'lsp', 'public', 'quickstart']; +const GOLDEN_DIRS = ['bad', 'cdk', 'good', 'gh-issues', 'integration', 'issues', 'lsp', 'public', 'quickstart']; function discoverAllTemplates(): string[] { const templates: string[] = []; diff --git a/src/cfn-validate/tests/common/mod.rs b/src/cfn-validate/tests/common/mod.rs index 98d1359..77b5ac7 100644 --- a/src/cfn-validate/tests/common/mod.rs +++ b/src/cfn-validate/tests/common/mod.rs @@ -39,7 +39,7 @@ pub fn load_security_rule(filename: &str) -> String { } /// All template directories covered by golden-file tests. -const GOLDEN_DIRS: &[&str] = &["good", "bad", "integration", "issues", "lsp", "quickstart", "public"]; +const GOLDEN_DIRS: &[&str] = &["good", "bad", "integration", "issues", "gh-issues", "lsp", "quickstart", "public"]; /// Discover all templates under the given subdirectories of templates_dir(). pub fn discover_all_templates() -> Vec { diff --git a/src/cfn-validate/tests/github_issues.rs b/src/cfn-validate/tests/github_issues.rs new file mode 100644 index 0000000..c436043 --- /dev/null +++ b/src/cfn-validate/tests/github_issues.rs @@ -0,0 +1,609 @@ +//! Regression tests for reported GitHub issues. +//! +//! Each test pins the CURRENT, observed behavior of both engines on a fixture +//! checked in under `resources/templates/gh-issues/`. Where an issue describes a +//! bug that has since been fixed, the test asserts the corrected behavior (the +//! focal rule no longer fires); where the bug still reproduces, the test asserts +//! that it does, so the report stays honest and any future change is caught. The +//! same fixtures are also covered by the golden-file tests (they live in a +//! `GOLDEN_DIRS` directory), so this file adds focused, rule-level assertions on +//! top of the full-report snapshots. +//! +//! Both engines must agree on every assertion here unless a test explicitly says +//! otherwise (see `issue_36_*`, which pins a known rego/cel divergence). + +mod common; + +use cel_engine::CelEngine; +use common::load_template; +use diagnostics::Diagnostic; +use rego_engine::RegoEngine; +use rules::Severity; +use schema_validator::SchemaValidator; +use std::sync::LazyLock; +use template_model::PseudoParameterOverrides; +use validation_engine::{EngineConfig, ValidateConfig, ValidationEngine, validate_bytes}; + +static REGO: LazyLock = LazyLock::new(|| RegoEngine::new(EngineConfig::default()).unwrap()); +static CEL: LazyLock = LazyLock::new(|| CelEngine::new(EngineConfig::default()).unwrap()); + +/// Validate a `gh-issues` fixture with one engine at the lowest severity gate +/// (so INFO/DEBUG findings are visible to assertions). +fn validate_with(engine: &dyn ValidationEngine, fixture: &str, config: ValidateConfig) -> Vec { + let sv = SchemaValidator::new(); + let bytes = load_template(&format!("gh-issues/{fixture}")); + validate_bytes(engine, &sv, &bytes, config).expect("validation should not error").diagnostics +} + +fn debug_config() -> ValidateConfig { + ValidateConfig { severity_level: Severity::Debug, ..Default::default() } +} + +/// Run both engines with the default config and return their diagnostics tagged +/// by engine name. Every assertion helper checks both, so a test that passes is +/// asserting engine parity for that fact. +fn validate_both(fixture: &str) -> Vec<(&'static str, Vec)> { + vec![ + ("rego", validate_with(&*REGO, fixture, debug_config())), + ("cel", validate_with(&*CEL, fixture, debug_config())), + ] +} + +fn count(diags: &[Diagnostic], rule_id: &str) -> usize { + diags.iter().filter(|d| d.rule_id == rule_id).count() +} + +/// Assert `rule_id` fires at least once in every engine's output. +fn assert_fires(by_engine: &[(&str, Vec)], rule_id: &str) { + for (engine, diags) in by_engine { + assert!(count(diags, rule_id) > 0, "[{engine}] expected {rule_id} to fire, but it did not"); + } +} + +/// Assert `rule_id` never fires in any engine's output. +fn assert_absent(by_engine: &[(&str, Vec)], rule_id: &str) { + for (engine, diags) in by_engine { + let hits: Vec<&str> = diags.iter().filter(|d| d.rule_id == rule_id).map(|d| d.message.as_str()).collect(); + assert!(hits.is_empty(), "[{engine}] expected {rule_id} to be absent, but it fired: {hits:?}"); + } +} + +/// Assert `rule_id` fires with exactly `severity` in every engine's output. +fn assert_fires_with_severity(by_engine: &[(&str, Vec)], rule_id: &str, severity: Severity) { + for (engine, diags) in by_engine { + let matched = diags.iter().filter(|d| d.rule_id == rule_id).collect::>(); + assert!(!matched.is_empty(), "[{engine}] expected {rule_id} to fire at {severity}, but it did not fire"); + for d in matched { + assert_eq!(d.severity, severity, "[{engine}] {rule_id} fired at {} (expected {severity})", d.severity); + } + } +} + +/// Assert `rule_id` fires on the resource with logical id `resource_id` in every engine. +fn assert_fires_on_resource(by_engine: &[(&str, Vec)], rule_id: &str, resource_id: &str) { + for (engine, diags) in by_engine { + let on_resource = diags + .iter() + .filter(|d| d.rule_id == rule_id) + .any(|d| d.resource.as_ref().and_then(|r| r.id.as_deref()) == Some(resource_id)); + assert!(on_resource, "[{engine}] expected {rule_id} on resource {resource_id}, but it did not fire there"); + } +} + +/// Assert `rule_id` fires exactly `expected` times in every engine's output. +fn assert_count(by_engine: &[(&str, Vec)], rule_id: &str, expected: usize) { + for (engine, diags) in by_engine { + assert_eq!(count(diags, rule_id), expected, "[{engine}] expected {expected} {rule_id} diagnostic(s)"); + } +} + +// --------------------------------------------------------------------------- +// Per-issue regression tests +// --------------------------------------------------------------------------- + +/// Issue #34: SSM-typed parameter Defaults (`AWS::SSM::Parameter::Value<...>`) no +/// longer trip the AMI-format false positive; the SSM-path Default is treated as +/// a deploy-time name, not a literal value. The remaining W2506 (a ``-typed +/// param used as an ImageId) is correct. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/34 +#[test] +fn issue_34_no_false_positive_on_ssm_typed_parameter_default() { + let diags = validate_both("issue-34.json"); + assert_absent(&diags, "E1152"); + assert_absent(&diags, "W1030"); + assert_fires_with_severity(&diags, "W2506", Severity::Warn); + assert_count(&diags, "W2506", 1); +} + +/// Issue #35: a dynamic reference embedded mid-string is not treated as a +/// deploy-time-opaque value, so the schedule-expression format check E3027 still +/// fires (false positive) in both engines. Pins the current buggy behavior. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/35 +#[test] +fn issue_35_e3027_fires_on_embedded_dynamic_reference() { + let diags = validate_both("issue-35.yaml"); + assert_fires_with_severity(&diags, "E3027", Severity::Error); + assert_fires_on_resource(&diags, "E3027", "ScheduledRule"); + assert_count(&diags, "E3027", 1); +} + +// issue #36 is tested below in a dedicated test that also pins the rego/cel divergence. + +/// Issue #37: the maintenance-mode warning W3697 fires on +/// `AWS::AutoScaling::LaunchConfiguration`. Per-service silencing is not yet a +/// dedicated CLI flag, but the rule itself fires correctly and identically in +/// both engines (and is suppressible via the existing exclude filters — see the +/// suppressibility tests at the bottom of this file). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/37 +#[test] +fn issue_37_w3697_fires_on_autoscaling_launchconfiguration() { + let diags = validate_both("issue-37.yaml"); + assert_fires_with_severity(&diags, "W3697", Severity::Warn); + assert_fires_on_resource(&diags, "W3697", "MyLaunchConfig"); + assert_count(&diags, "W3697", 1); +} + +/// Issue #38: E3040 must not flag a top-level property when only deeply-nested +/// subproperties are read-only. The read-only check was removed, so E3040 never +/// fires; the resource still resolves (proven by the INFO findings). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/38 +#[test] +fn issue_38_no_false_positive_on_nested_readonly_subproperty() { + let diags = validate_both("issue-38.json"); + assert_absent(&diags, "E3040"); + assert_count(&diags, "E3040", 0); + assert_fires_on_resource(&diags, "I9001", "Memory"); + assert_fires_on_resource(&diags, "I9040", "Memory"); +} + +/// Issue #39: `Fn::GetAtt [VPC, CidrBlock]` is a valid documented attribute, so +/// the GetAtt-attribute checks must not fire (the stale data was regenerated). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/39 +#[test] +fn issue_39_no_false_positive_on_vpc_cidrblock_getatt() { + let diags = validate_both("issue-39.json"); + assert_absent(&diags, "E9004"); + assert_absent(&diags, "E9003"); + assert_count(&diags, "E9004", 0); + assert_fires_on_resource(&diags, "I9001", "VPCB9E5F0B4"); +} + +/// Issue #40: E1150 fires only on a concrete, inspectable value (`sg-1`), never +/// on a `Ref` to a deploy-time value — the two concerns are now separate rules. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/40 +#[test] +fn issue_40_e1150_only_on_concrete_value_not_on_ref() { + let diags = validate_both("issue-40.yaml"); + assert_fires_with_severity(&diags, "E1150", Severity::Error); + assert_count(&diags, "E1150", 1); + assert_fires_on_resource(&diags, "E1150", "DaxConcrete"); +} + +/// Issue #41: W9013 still fires (false positive) on an ARN built via `Fn::Join` +/// with `Ref: AWS::AccountId`, because the resolver bakes the account placeholder +/// into a concrete string and loses the pseudo-parameter provenance. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/41 +#[test] +fn issue_41_w9013_false_positive_on_join_ref_accountid() { + let diags = validate_both("issue-41.json"); + assert_fires_with_severity(&diags, "W9013", Severity::Warn); + assert_fires_on_resource(&diags, "W9013", "MyFunction"); + assert_count(&diags, "W9013", 1); +} + +/// Issue #42: E3049 still fires on an ECS dynamic-port (HostPort 0) TargetGroup +/// when HealthCheckPort is omitted — the absent value is treated as `""` rather +/// than the documented `traffic-port` default. Pins the current behavior, which +/// matches the reference linter baseline. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/42 +#[test] +fn issue_42_e3049_omitted_healthcheckport_with_hostport_zero() { + let diags = validate_both("issue-42.yaml"); + assert_fires_with_severity(&diags, "E3049", Severity::Error); + assert_fires_on_resource(&diags, "E3049", "TargetGroup"); + assert_count(&diags, "E3049", 1); +} + +/// Issue #44: E3702 false positive — it fires on an `AWS/Deploy/CloudFormation` +/// action that legitimately has 0 input artifacts (`CHANGE_SET_EXECUTE`), because +/// the artifact-count table keys on Category only and ignores Owner/Provider. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/44 +#[test] +fn issue_44_e3702_false_positive_on_changeset_execute() { + let diags = validate_both("issue-44.json"); + assert_fires_with_severity(&diags, "E3702", Severity::Error); + assert_fires_on_resource(&diags, "E3702", "Pipeline"); + assert_count(&diags, "E3702", 1); +} + +/// Issue #45: F6101 must not fire when an array-returning `Fn::GetAtt` is wrapped +/// in `Fn::Join` (which yields a string) in an output value. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/45 +#[test] +fn issue_45_no_false_positive_on_array_getatt_wrapped_in_join() { + let diags = validate_both("issue-45.json"); + assert_absent(&diags, "F6101"); + assert_count(&diags, "F6101", 0); + assert_fires_on_resource(&diags, "I9040", "interfaceVpcEndpoint89C99945"); +} + +/// Issue #46: E1150 must not fire on `Fn::GetAtt` to an EKS cluster's +/// `ClusterSecurityGroupId` used as a SecurityGroupId — it is a deploy-time value. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/46 +#[test] +fn issue_46_no_false_positive_on_eks_securitygroupid_getatt() { + let diags = validate_both("issue-46.json"); + assert_absent(&diags, "E1150"); + assert_absent(&diags, "E1041"); + assert_fires_on_resource(&diags, "W9002", "ClusterEB0386A7"); +} + +/// Issue #47: an open-world service-enum mismatch (Lambda Runtime `node99.x`) is +/// emitted as a FATAL F3030. Pins the current FATAL classification the issue +/// disputes; note the diagnostic is suppressible (see suppressibility tests). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/47 +#[test] +fn issue_47_f3030_enum_mismatch_is_fatal() { + let diags = validate_both("issue-47.json"); + assert_fires_with_severity(&diags, "F3030", Severity::Fatal); + assert_fires_on_resource(&diags, "F3030", "MyFunction"); + assert_count(&diags, "F3030", 1); + assert_fires_with_severity(&diags, "E3677", Severity::Error); +} + +/// Issue #48: a binding type-ergonomics request (`PseudoParameterOverrides` +/// fields rendered as required in the generated `.d.ts`). There is no rule +/// behavior to assert; this pins that a template referencing `AWS::AccountId` / +/// `AWS::Region` validates cleanly with no error/fatal diagnostics. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/48 +#[test] +fn issue_48_pseudo_parameter_template_validates_cleanly() { + let diags = validate_both("issue-48.json"); + for (engine, ds) in &diags { + let bad: Vec<&str> = ds + .iter() + .filter(|d| matches!(d.severity, Severity::Fatal | Severity::Error)) + .map(|d| d.rule_id.as_str()) + .collect(); + assert!(bad.is_empty(), "[{engine}] expected no error/fatal diagnostics, got {bad:?}"); + } + assert_fires_on_resource(&diags, "I9001", "MyBucket"); + assert_count(&diags, "I9001", 1); +} + +/// Issue #49: with no region supplied the engine assumes `us-east-1`, so the +/// region-scoped instance-type enum rules fire on values invalid there (E3652 on +/// the OpenSearch domain, E3620 on the DocDB instance) while a value valid in +/// `us-east-1` (EC2 `t2.nano`) does not trip E3628. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/49 +#[test] +fn issue_49_region_scoped_enums_assume_us_east_1() { + let diags = validate_both("issue-49.yaml"); + assert_fires_with_severity(&diags, "E3652", Severity::Error); + assert_fires_on_resource(&diags, "E3652", "EsDomain"); + assert_fires_on_resource(&diags, "E3620", "DocDbInstance"); + assert_absent(&diags, "E3628"); +} + +/// Issue #50: W1030 must not fire when an opaque String-param `Ref` is `Fn::Split` +/// into an IAM policy `Resource` (the CDK token scenario). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/50 +#[test] +fn issue_50_no_false_positive_on_fn_split_ref_iam_resource() { + let diags = validate_both("issue-50.json"); + assert_absent(&diags, "W1030"); + assert_fires_on_resource(&diags, "I9040", "MyFunctionServiceRole"); + assert_count(&diags, "I9040", 1); +} + +/// Issue #52: W9007 falsely flags two distinct `Fn::ImportValue` items in an array +/// as duplicates, because both collapse to one symbolic cross-stack-import value. +/// Pins the current false positive. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/52 +#[test] +fn issue_52_w9007_false_duplicate_on_distinct_importvalue() { + let diags = validate_both("issue-52.json"); + assert_fires_with_severity(&diags, "W9007", Severity::Warn); + assert_fires_on_resource(&diags, "W9007", "Nodegroup"); + assert_count(&diags, "W9007", 1); +} + +/// Issue #53: F3004 correctly fires on a genuine bidirectional `DependsOn` +/// circular dependency (a cycle invisible to Ref/GetAtt-only graph tools). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/53 +#[test] +fn issue_53_f3004_fires_on_real_dependson_cycle() { + let diags = validate_both("issue-53.json"); + assert_fires_with_severity(&diags, "F3004", Severity::Fatal); + assert_count(&diags, "F3004", 9); + assert_fires_on_resource(&diags, "F3004", "ClusterKubectlHandlerRole94549F93"); + assert_fires_on_resource(&diags, "F3004", "ClusterKubectlReadyBarrier200052AF"); +} + +/// Issue #54: F3003 falsely fires "OwnershipControls is a required property" +/// (FATAL) on an S3 bucket with non-Private AccessControl, duplicating the +/// suppressible E3045. Pins the current false positive. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/54 +#[test] +fn issue_54_f3003_false_required_ownershipcontrols() { + let diags = validate_both("issue-54.json"); + assert_fires_with_severity(&diags, "F3003", Severity::Fatal); + assert_fires_on_resource(&diags, "F3003", "Bucket"); + assert_fires(&diags, "E3045"); +} + +/// Issue #55: a `CommaDelimitedList` parameter Default referenced by an +/// array-typed property must not raise an F3012 "not of type array" false +/// positive. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/55 +#[test] +fn issue_55_no_false_positive_on_commadelimitedlist_default() { + let diags = validate_both("issue-55.json"); + assert_absent(&diags, "F3012"); + assert_absent(&diags, "W9003"); + assert_count(&diags, "F3012", 0); +} + +/// Issue #56: F3012 (FATAL type mismatch) must not fire on an unrecognized +/// `Fn::GetStackOutput` intrinsic used as a string property value. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/56 +#[test] +fn issue_56_no_fatal_on_unrecognized_getstackoutput_intrinsic() { + let diags = validate_both("issue-56.json"); + assert_absent(&diags, "F3012"); + assert_absent(&diags, "W9003"); + assert_count(&diags, "F3012", 0); + assert_fires_on_resource(&diags, "I9001", "WeakConsumer"); +} + +/// Issue #57: E3057 false positive — a `TargetOriginId` that references an +/// `OriginGroups.Items[].Id` is rejected because only `Origins[].Id` is treated +/// as a valid target. Pins the current buggy behavior. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/57 +#[test] +fn issue_57_e3057_rejects_valid_origin_group_id() { + let diags = validate_both("issue-57.json"); + assert_fires_with_severity(&diags, "E3057", Severity::Error); + assert_fires_on_resource( + &diags, + "E3057", + "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + ); + assert_count(&diags, "E3057", 1); +} + +/// Issue #61: a bare `AWS::EC2::Volume` with no Properties fires FATAL F3017 +/// (anyOf failure). Pins the current behavior; the issue is about the generic +/// message dropping the per-branch required-property detail (no companion F3003). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/61 +#[test] +fn issue_61_f3017_anyof_on_bare_ec2_volume() { + let diags = validate_both("issue-61.json"); + assert_fires_with_severity(&diags, "F3017", Severity::Fatal); + assert_fires_on_resource(&diags, "F3017", "Resource"); + assert_count(&diags, "F3017", 1); + assert_absent(&diags, "F3003"); +} + +/// Issue #62: F3032 fires as a FATAL on an empty `ResourcesToReplicateTags` array +/// for `AWS::Synthetics::Canary` (a synced `minItems:1` bound). Pins the current +/// FATAL classification the issue disputes. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/62 +#[test] +fn issue_62_f3032_fatal_on_empty_unconstrained_array() { + let diags = validate_both("issue-62.json"); + assert_fires_with_severity(&diags, "F3032", Severity::Fatal); + assert_fires_on_resource(&diags, "F3032", "Canary"); + assert_count(&diags, "F3032", 1); +} + +/// Issue #63: E2001 fires on an intrinsic (`Fn::GetStackOutput`) used in a +/// parameter Default, because CloudFormation never evaluates intrinsics in +/// `Parameters.*.Default`. Working as intended (matches the reference linter). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/63 +#[test] +fn issue_63_e2001_on_intrinsic_in_parameter_default() { + let diags = validate_both("issue-63.json"); + assert_fires_with_severity(&diags, "E2001", Severity::Error); + assert_count(&diags, "E2001", 1); +} + +// issue #65 is tested below in a dedicated test (needs a non-12-digit account id override). + +/// Issue #67: F3014 FATAL false positive on a deployable PromQL CloudWatch alarm +/// that uses `EvaluationCriteria` instead of `Metrics`/`MetricName` (a stale +/// `requiredXor` patch predating the PromQL feature). Pins the current behavior. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/67 +#[test] +fn issue_67_f3014_false_positive_on_promql_alarm() { + let diags = validate_both("issue-67.json"); + assert_fires_with_severity(&diags, "F3014", Severity::Fatal); + assert_fires_on_resource(&diags, "F3014", "PromAlarm"); + assert_count(&diags, "F3014", 1); +} + +/// Issue #68: the Lambda ZipFile runtime rule (E3677) already uses a +/// forward-looking `nodejs`/`python` prefix — it fires on `node99.x` but not on +/// `nodejs99.x`. The genuinely non-future-proof check is the baked-in Runtime +/// enum (F3030), which FATAL-rejects both unknown runtimes. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/68 +#[test] +fn issue_68_zipfile_runtime_forward_looking_vs_enum_snapshot() { + let diags = validate_both("issue-68.json"); + assert_fires_with_severity(&diags, "E3677", Severity::Error); + assert_fires_on_resource(&diags, "E3677", "FutureNodeFunc"); + assert_count(&diags, "E3677", 1); + assert_fires_with_severity(&diags, "F3030", Severity::Fatal); + assert_count(&diags, "F3030", 2); +} + +/// Issue #69: the FATAL-classification debate. Service-content schema constraints +/// F3037 (uniqueItems) and F3032 (maxItems) still fire as FATAL on an +/// `AWS::IAM::InstanceProfile` with duplicate Roles. Pins the current behavior; +/// note these FATALs are suppressible (see the suppressibility tests below). +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/69 +#[test] +fn issue_69_f3037_f3032_content_constraints_are_fatal() { + let diags = validate_both("issue-69.yaml"); + assert_fires_with_severity(&diags, "F3037", Severity::Fatal); + assert_fires_on_resource(&diags, "F3037", "Profile"); + assert_fires_with_severity(&diags, "F3032", Severity::Fatal); + assert_count(&diags, "F3037", 1); +} + +// --------------------------------------------------------------------------- +// Issue #36 — pins both the shared E1156 false positive AND the rego/cel +// E3511 divergence. The committed fixture uses `arn:aws-iso:` (parity-clean, so +// it is golden-compatible); the divergence is reproduced here with inline bytes +// using `arn:aws-isob:`, which the CEL ARN regex rejects but the rego one accepts. +// --------------------------------------------------------------------------- + +/// Issue #36: hardcoded partition enumerations in the IAM-role-ARN checks raise a +/// false positive on ADC-partition ARNs. The schema-validator's +/// `AWS::IAM::Role.Arn` format check (E1156) fires in BOTH engines on an +/// `arn:aws-iso:` ARN. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/36 +#[test] +fn issue_36_e1156_false_positive_on_iso_partition_arn() { + let diags = validate_both("issue-36.yaml"); + assert_fires_with_severity(&diags, "E1156", Severity::Error); + assert_fires_on_resource(&diags, "E1156", "TaskDef"); +} + +/// Issue #36 (continued): the CEL engine's ARN regex still hardcodes the partition +/// list, so it fires E3511 on an `arn:aws-isob:` ARN, while the rego rule (already +/// future-proofed) does not. Pins this known rego/cel divergence so a future fix +/// to either engine is forced to update this assertion. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/36 +#[test] +fn issue_36_e3511_diverges_between_engines_on_isob_partition() { + const TEMPLATE: &[u8] = br#" +AWSTemplateFormatVersion: "2010-09-09" +Resources: + TaskDef: + Type: AWS::ECS::TaskDefinition + Properties: + ExecutionRoleArn: arn:aws-isob:iam::123456789012:role/my-task-role +"#; + let sv = SchemaValidator::new(); + let rego = validate_bytes(&*REGO, &sv, TEMPLATE, debug_config()).unwrap().diagnostics; + let cel = validate_bytes(&*CEL, &sv, TEMPLATE, debug_config()).unwrap().diagnostics; + + // E1156 (schema-validator) fires in both — the shared partition false positive. + assert!(rego.iter().any(|d| d.rule_id == "E1156"), "rego should fire E1156"); + assert!(cel.iter().any(|d| d.rule_id == "E1156"), "cel should fire E1156"); + + // E3511 (engine rule) currently fires in CEL only — the divergence. + assert!(!rego.iter().any(|d| d.rule_id == "E3511"), "rego should NOT fire E3511 (regex already future-proofed)"); + assert!(cel.iter().any(|d| d.rule_id == "E3511"), "cel still fires E3511 (regex hardcodes partitions)"); +} + +// --------------------------------------------------------------------------- +// Issue #65 — needs a non-12-digit AWS::AccountId override to surface the bug. +// --------------------------------------------------------------------------- + +/// Issue #65: `Ref: AWS::AccountId` resolves to a bare literal that schema +/// validation checks against. With a non-12-digit account override the literal +/// trips F3031 (pattern) and F3033 (length) on the Lambda::Permission +/// SourceAccount — it should instead be a symbolic 12-digit value. +/// https://github.com/aws-cloudformation/cloudformation-validate/issues/65 +#[test] +fn issue_65_accountid_ref_resolves_to_nonvalidating_literal() { + let config = ValidateConfig { + severity_level: Severity::Debug, + pseudo_parameter_overrides: PseudoParameterOverrides { + account_id: Some("unknown-account".to_string()), + ..Default::default() + }, + ..Default::default() + }; + let diags = vec![ + ("rego", validate_with(&*REGO, "issue-65.json", config.clone())), + ("cel", validate_with(&*CEL, "issue-65.json", config)), + ]; + assert_fires_with_severity(&diags, "F3031", Severity::Fatal); + assert_fires_on_resource(&diags, "F3031", "S3Permission"); + assert_fires_on_resource(&diags, "F3033", "S3Permission"); + assert_count(&diags, "F3033", 1); +} + +// --------------------------------------------------------------------------- +// FATAL rules are suppressible. +// +// FATAL diagnostics are filtered by the same include/exclude mechanism as every +// other severity — there is no severity gate that exempts them. These tests pin +// that contract across all three exclude dimensions (rule id, category, id range) +// in both engines, using a bare `AWS::EC2::Volume` that deterministically yields +// the FATAL schema rule F3017. +// --------------------------------------------------------------------------- + +/// A bare `AWS::EC2::Volume` (no Properties) yields exactly one FATAL F3017 in +/// both engines — the fixture for the suppressibility tests. +fn fatal_baseline(engine: &dyn ValidationEngine) -> Vec { + validate_with(engine, "issue-61.json", debug_config()) +} + +#[test] +fn fatal_rule_present_without_filter() { + for (name, engine) in [("rego", &*REGO as &dyn ValidationEngine), ("cel", &*CEL as &dyn ValidationEngine)] { + let diags = fatal_baseline(engine); + assert_eq!(count(&diags, "F3017"), 1, "[{name}] F3017 should fire without a filter"); + assert!(diags.iter().any(|d| d.severity == Severity::Fatal), "[{name}] a FATAL diagnostic is expected"); + } +} + +#[test] +fn fatal_rule_suppressed_by_exclude_id() { + use rules::{FilterConfig, RuleFilterConfig}; + let config = ValidateConfig { + severity_level: Severity::Debug, + filters: FilterConfig::new( + RuleFilterConfig::default(), + RuleFilterConfig { ids: vec!["F3017".into()], ..Default::default() }, + ), + ..Default::default() + }; + for (name, engine) in [("rego", &*REGO as &dyn ValidationEngine), ("cel", &*CEL as &dyn ValidationEngine)] { + let diags = validate_with(engine, "issue-61.json", config.clone()); + assert_eq!(count(&diags, "F3017"), 0, "[{name}] --exclude-ids F3017 must suppress the FATAL rule"); + assert!(!diags.iter().any(|d| d.severity == Severity::Fatal), "[{name}] no FATAL should remain after exclude"); + } +} + +#[test] +fn fatal_rule_suppressed_by_exclude_category() { + use rules::{FilterConfig, RuleFilterConfig}; + // F3017 is a schema rule; excluding the Schema category removes it. + let config = ValidateConfig { + severity_level: Severity::Debug, + filters: FilterConfig::new( + RuleFilterConfig::default(), + RuleFilterConfig { categories: vec!["Schema".into()], ..Default::default() }, + ), + ..Default::default() + }; + for (name, engine) in [("rego", &*REGO as &dyn ValidationEngine), ("cel", &*CEL as &dyn ValidationEngine)] { + let diags = validate_with(engine, "issue-61.json", config.clone()); + assert_eq!(count(&diags, "F3017"), 0, "[{name}] excluding the Schema category must suppress the FATAL rule"); + } +} + +#[test] +fn fatal_rule_suppressed_by_exclude_range() { + use rules::{FilterConfig, IdRange, RuleFilterConfig}; + let config = ValidateConfig { + severity_level: Severity::Debug, + filters: FilterConfig::new( + RuleFilterConfig::default(), + RuleFilterConfig { + id_ranges: vec![IdRange { prefix: "F".into(), start: 3000, end: 3099 }], + ..Default::default() + }, + ), + ..Default::default() + }; + for (name, engine) in [("rego", &*REGO as &dyn ValidationEngine), ("cel", &*CEL as &dyn ValidationEngine)] { + let diags = validate_with(engine, "issue-61.json", config.clone()); + assert_eq!(count(&diags, "F3017"), 0, "[{name}] excluding the F3000-F3099 range must suppress the FATAL rule"); + } +} diff --git a/src/resources/expected/all_templates.json b/src/resources/expected/all_templates.json index 61fe460..c81a027 100644 --- a/src/resources/expected/all_templates.json +++ b/src/resources/expected/all_templates.json @@ -108529,6 +108529,5627 @@ } ] }, + "gh-issues/issue-34.json": { + "filePath": "gh-issues/issue-34.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W2506", + "severity": "WARN", + "message": "Parameter 'SsmStringImageParam' is used as an ImageId but has Type 'AWS::SSM::Parameter::Value' \u2014 consider using 'AWS::EC2::Image::Id'", + "source": "CFN_LINT", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 14, + "ruleDescription": "Check if ImageId Parameters have the correct type", + "phase": "LINT", + "section": "Parameters" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Instance", + "resourceType": "AWS::EC2::Instance", + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Instance", + "resourceType": "AWS::EC2::Instance", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Instance2", + "resourceType": "AWS::EC2::Instance", + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Instance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Instance2", + "resourceType": "AWS::EC2::Instance", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-35.yaml": { + "filePath": "gh-issues/issue-35.yaml", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "E3027", + "severity": "ERROR", + "message": "ScheduleExpression 'prefix-{{resolve:ssm:/my/schedule}}' must be a rate() or cron() expression", + "source": "CFN_LINT", + "resourceId": "ScheduledRule", + "resourceType": "AWS::Events::Rule", + "propertyPath": "Properties.ScheduleExpression", + "category": "Resource", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Validate AWS Event ScheduleExpression format", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ScheduledRule", + "resourceType": "AWS::Events::Rule", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-36.yaml": { + "filePath": "gh-issues/issue-36.yaml", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "E1156", + "severity": "ERROR", + "message": "'arn:aws-iso:iam::123456789012:role/my-task-role' does not match format 'AWS::IAM::Role.Arn'", + "source": "CFN_LINT", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Validate IAM role ARN format", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "actualValue": "arn:aws-iso:iam::123456789012:role/my-task-role" + } + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'ExecutionRoleArn' has a hardcoded ARN \u2014 use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "category": "Security", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-37.yaml": { + "filePath": "gh-issues/issue-37.yaml", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "resourceId": "MyLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration", + "category": "Deprecation", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "MyLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration", + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "MyLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration", + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "resourceId": "MyAsg", + "resourceType": "AWS::AutoScaling::AutoScalingGroup", + "propertyPath": "Properties.AvailabilityZones.0", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 8, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyAsg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "MyAsg", + "resourceType": "AWS::AutoScaling::AutoScalingGroup", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-38.json": { + "filePath": "gh-issues/issue-38.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Memory", + "resourceType": "AWS::BedrockAgentCore::Memory", + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Memory' of type 'AWS::BedrockAgentCore::Memory' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Memory", + "resourceType": "AWS::BedrockAgentCore::Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-39.json": { + "filePath": "gh-issues/issue-39.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "VPCB9E5F0B4", + "resourceType": "AWS::EC2::VPC", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPCB9E5F0B4' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "VPCB9E5F0B4", + "resourceType": "AWS::EC2::VPC", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "VPCEcrEndpointSecurityGroup50ED8BA4", + "resourceType": "AWS::EC2::SecurityGroup", + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 41, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "VPCEcrEndpointSecurityGroup50ED8BA4", + "resourceType": "AWS::EC2::SecurityGroup", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 41, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPCEcrEndpointSecurityGroup50ED8BA4' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "VPCEcrEndpointSecurityGroup50ED8BA4", + "resourceType": "AWS::EC2::SecurityGroup", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 41, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-40.yaml": { + "filePath": "gh-issues/issue-40.yaml", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 4, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN \u2014 use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "resourceId": "EksCluster", + "resourceType": "AWS::EKS::Cluster", + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "EksCluster", + "resourceType": "AWS::EKS::Cluster", + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "EksCluster", + "resourceType": "AWS::EKS::Cluster", + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "EksCluster", + "resourceType": "AWS::EKS::Cluster", + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EksCluster' of type 'AWS::EKS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "EksCluster", + "resourceType": "AWS::EKS::Cluster", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", + "resourceId": "DaxConcrete", + "resourceType": "AWS::DAX::Cluster", + "propertyPath": "Properties.SecurityGroupIds.0", + "category": "Intrinsic Function", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "actualValue": "sg-1" + } + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "DaxConcrete", + "resourceType": "AWS::DAX::Cluster", + "category": "Security", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IAMRoleARN' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "DaxConcrete", + "resourceType": "AWS::DAX::Cluster", + "propertyPath": "Properties.IAMRoleARN", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NodeType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "DaxConcrete", + "resourceType": "AWS::DAX::Cluster", + "propertyPath": "Properties.NodeType", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DaxConcrete' of type 'AWS::DAX::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "DaxConcrete", + "resourceType": "AWS::DAX::Cluster", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "DaxRef", + "resourceType": "AWS::DAX::Cluster", + "category": "Security", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 9, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IAMRoleARN' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "DaxRef", + "resourceType": "AWS::DAX::Cluster", + "propertyPath": "Properties.IAMRoleARN", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 9, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NodeType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "DaxRef", + "resourceType": "AWS::DAX::Cluster", + "propertyPath": "Properties.NodeType", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 9, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DaxRef' of type 'AWS::DAX::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "DaxRef", + "resourceType": "AWS::DAX::Cluster", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-41.json": { + "filePath": "gh-issues/issue-41.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' is deprecated", + "source": "CFN_LINT", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Runtime", + "suggestedFix": "Update to a current runtime", + "category": "Deprecation", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Role.Fn::Join", + "category": "Intrinsic Function", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-42.yaml": { + "filePath": "gh-issues/issue-42.yaml", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "E3049", + "severity": "ERROR", + "message": "Container 'web' has HostPort 0 but TargetGroup 'TargetGroup' HealthCheckPort is '', must be 'traffic-port'", + "source": "CFN_LINT", + "resourceId": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup", + "propertyPath": "Properties.HealthCheckPort", + "category": "Resource", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "Service", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 10 + }, + "message": "Dynamic host port defined here" + } + ], + "ruleDescription": "Validate ECS tasks with dynamic host port have traffic-port ELB target groups", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup", + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup", + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Service", + "resourceType": "AWS::ECS::Service", + "propertyPath": "Properties.Cluster", + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Service", + "resourceType": "AWS::ECS::Service", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-44.json": { + "filePath": "gh-issues/issue-44.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "E3702", + "severity": "ERROR", + "message": "Action 'Deploy' (category 'Deploy') has 0 input artifacts, expected at least 1", + "source": "CFN_LINT", + "resourceId": "Pipeline", + "resourceType": "AWS::CodePipeline::Pipeline", + "category": "Resource", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Validate the number of input and output artifacts in a CodePipeline", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Pipeline", + "resourceType": "AWS::CodePipeline::Pipeline", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", + "source": "SCHEMA", + "resourceId": "Pipeline", + "resourceType": "AWS::CodePipeline::Pipeline", + "propertyPath": "Properties", + "category": "Schema", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PipelineRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "PipelineRole", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-45.json": { + "filePath": "gh-issues/issue-45.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "interfaceVpcEndpoint89C99945", + "resourceType": "AWS::EC2::VPCEndpoint", + "propertyPath": "Properties.ServiceName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 34, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcEndpointType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "interfaceVpcEndpoint89C99945", + "resourceType": "AWS::EC2::VPCEndpoint", + "propertyPath": "Properties.VpcEndpointType", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 34, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "interfaceVpcEndpoint89C99945", + "resourceType": "AWS::EC2::VPCEndpoint", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 34, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'interfaceVpcEndpoint89C99945' of type 'AWS::EC2::VPCEndpoint' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "interfaceVpcEndpoint89C99945", + "resourceType": "AWS::EC2::VPCEndpoint", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 34, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-46.json": { + "filePath": "gh-issues/issue-46.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN \u2014 use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "resourceId": "ClusterEB0386A7", + "resourceType": "AWS::EKS::Cluster", + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 21, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "ClusterEB0386A7", + "resourceType": "AWS::EKS::Cluster", + "category": "Security", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 21, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterEB0386A7", + "resourceType": "AWS::EKS::Cluster", + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterEB0386A7' of type 'AWS::EKS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterEB0386A7", + "resourceType": "AWS::EKS::Cluster", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 21, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "ClusterKubectlProviderHandler2E05C68A", + "resourceType": "AWS::Lambda::Function", + "category": "Security", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 43, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterKubectlProviderHandler2E05C68A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterKubectlProviderHandler2E05C68A", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 43, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-47.json": { + "filePath": "gh-issues/issue-47.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "F3030", + "severity": "FATAL", + "message": "'node99.x' is not one of [String(\"dotnet10\"), String(\"dotnet6\"), String(\"dotnet8\"), String(\"dotnetcore1.0\"), String(\"dotnetcore2.0\"), String(\"dotnetcore2.1\"), String(\"dotnetcore3.1\"), String(\"go1.x\"), String(\"java11\"), String(\"java17\"), String(\"java21\"), String(\"java25\"), String(\"java8\"), String(\"java8.al2\"), String(\"nodejs\"), String(\"nodejs10.x\"), String(\"nodejs12.x\"), String(\"nodejs14.x\"), String(\"nodejs16.x\"), String(\"nodejs18.x\"), String(\"nodejs20.x\"), String(\"nodejs22.x\"), String(\"nodejs24.x\"), String(\"nodejs4.3\"), String(\"nodejs4.3-edge\"), String(\"nodejs6.10\"), String(\"nodejs8.10\"), String(\"provided\"), String(\"provided.al2\"), String(\"provided.al2023\"), String(\"python2.7\"), String(\"python3.10\"), String(\"python3.11\"), String(\"python3.12\"), String(\"python3.13\"), String(\"python3.14\"), String(\"python3.6\"), String(\"python3.7\"), String(\"python3.8\"), String(\"python3.9\"), String(\"ruby2.5\"), String(\"ruby2.7\"), String(\"ruby3.2\"), String(\"ruby3.3\"), String(\"ruby3.4\"), String(\"ruby4.0\")]", + "source": "SCHEMA", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "actualValue": "node99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java17", + "java21", + "java25", + "java8", + "java8.al2", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } + } + }, + { + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'node99.x' is not supported with Code.ZipFile \u2014 use nodejs or python", + "source": "CFN_LINT", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "category": "Resource", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "MyFunction", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-48.json": { + "filePath": "gh-issues/issue-48.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "MyBucket", + "resourceType": "AWS::S3::Bucket", + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "MyBucket", + "resourceType": "AWS::S3::Bucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-49.yaml": { + "filePath": "gh-issues/issue-49.yaml", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 1, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "E3652", + "severity": "ERROR", + "message": "'r5.large.elasticsearch' is not valid for region 'us-east-1'", + "source": "CFN_LINT", + "resourceId": "EsDomain", + "resourceType": "AWS::Elasticsearch::Domain", + "propertyPath": "Properties.ElasticsearchClusterConfig.InstanceType", + "category": "Resource", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate Elasticsearch domain cluster instance", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'DeletionPolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "resourceId": "EsDomain", + "resourceType": "AWS::Elasticsearch::Domain", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'UpdateReplacePolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "resourceId": "EsDomain", + "resourceType": "AWS::Elasticsearch::Domain", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EsDomain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "EsDomain", + "resourceType": "AWS::Elasticsearch::Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "E3620", + "severity": "ERROR", + "message": "'db.t2.small' is not valid for region 'us-east-1'", + "source": "CFN_LINT", + "resourceId": "DocDbInstance", + "resourceType": "AWS::DocDB::DBInstance", + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Validate a DocDB DB Instance class", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'DeletionPolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "resourceId": "DocDbInstance", + "resourceType": "AWS::DocDB::DBInstance", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'UpdateReplacePolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "resourceId": "DocDbInstance", + "resourceType": "AWS::DocDB::DBInstance", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "DocDbInstance", + "resourceType": "AWS::DocDB::DBInstance", + "propertyPath": "Properties.DBClusterIdentifier", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DocDbInstance' of type 'AWS::DocDB::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "DocDbInstance", + "resourceType": "AWS::DocDB::DBInstance", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID \u2014 use a parameter or mapping for portability", + "source": "ENGINE", + "resourceId": "Ec2Instance", + "resourceType": "AWS::EC2::Instance", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Ec2Instance", + "resourceType": "AWS::EC2::Instance", + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Ec2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Ec2Instance", + "resourceType": "AWS::EC2::Instance", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-50.json": { + "filePath": "gh-issues/issue-50.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyFunctionServiceRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "MyFunctionServiceRole", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 27, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-52.json": { + "filePath": "gh-issues/issue-52.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W9007", + "severity": "WARN", + "message": "Array property 'Subnets' contains duplicate values", + "source": "ENGINE", + "resourceId": "Nodegroup", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Array items must be unique when required", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "Nodegroup", + "resourceType": "AWS::EKS::Nodegroup", + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Nodegroup", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NodeRole' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Nodegroup", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.NodeRole", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Nodegroup", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Nodegroup' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Nodegroup", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-53.json": { + "filePath": "gh-issues/issue-53.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 37, + "counts": { + "fatal": 9, + "errors": 0, + "warnings": 6, + "informational": 67, + "debug": 0 + }, + "suppressed": 1, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcFAC913E5", + "resourceType": "AWS::EC2::VPC", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1Subnet7A3A7B5D", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 38, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1Subnet7A3A7B5D", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 38, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1Subnet7A3A7B5D", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 38, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1RouteTable5F0A6273", + "resourceType": "AWS::EC2::RouteTable", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 42, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 53, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet1RouteTable5F0A6273'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 53, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet1Subnet7A3A7B5D'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1DefaultRoute321532E0", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 83, + "startColumn": 3, + "endLine": 83, + "endColumn": 44, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1DefaultRoute321532E0", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 83, + "startColumn": 3, + "endLine": 83, + "endColumn": 44, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet1RouteTable5F0A6273'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1NATGateway7AFB18E6", + "resourceType": "AWS::EC2::NatGateway", + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 114, + "startColumn": 3, + "endLine": 114, + "endColumn": 42, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt UserVpcPublicSubnet1EIP84E63864.AllocationId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet1NATGateway7AFB18E6", + "resourceType": "AWS::EC2::NatGateway", + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 114, + "startColumn": 3, + "endLine": 114, + "endColumn": 42, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet1Subnet7A3A7B5D'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2Subnet42A6D42E", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 142, + "startColumn": 3, + "endLine": 142, + "endColumn": 38, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2Subnet42A6D42E", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 142, + "startColumn": 3, + "endLine": 142, + "endColumn": 38, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2Subnet42A6D42E", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 142, + "startColumn": 3, + "endLine": 142, + "endColumn": 38, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2RouteTableEC6A2C2A", + "resourceType": "AWS::EC2::RouteTable", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 178, + "startColumn": 3, + "endLine": 178, + "endColumn": 42, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 196, + "startColumn": 3, + "endLine": 196, + "endColumn": 53, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet2RouteTableEC6A2C2A'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 196, + "startColumn": 3, + "endLine": 196, + "endColumn": 53, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet2Subnet42A6D42E'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2DefaultRouteE14C718B", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 207, + "startColumn": 3, + "endLine": 207, + "endColumn": 44, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2DefaultRouteE14C718B", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 207, + "startColumn": 3, + "endLine": 207, + "endColumn": 44, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet2RouteTableEC6A2C2A'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2NATGateway5AD59565", + "resourceType": "AWS::EC2::NatGateway", + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 238, + "startColumn": 3, + "endLine": 238, + "endColumn": 42, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt UserVpcPublicSubnet2EIPE859723C.AllocationId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPublicSubnet2NATGateway5AD59565", + "resourceType": "AWS::EC2::NatGateway", + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 238, + "startColumn": 3, + "endLine": 238, + "endColumn": 42, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet2Subnet42A6D42E'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1Subnet0B127D2C", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 266, + "startColumn": 3, + "endLine": 266, + "endColumn": 39, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1Subnet0B127D2C", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 266, + "startColumn": 3, + "endLine": 266, + "endColumn": 39, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1Subnet0B127D2C", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 266, + "startColumn": 3, + "endLine": 266, + "endColumn": 39, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1RouteTable886260DA", + "resourceType": "AWS::EC2::RouteTable", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 43, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 320, + "startColumn": 3, + "endLine": 320, + "endColumn": 54, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet1RouteTable886260DA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 320, + "startColumn": 3, + "endLine": 320, + "endColumn": 54, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet1Subnet0B127D2C'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 331, + "startColumn": 3, + "endLine": 331, + "endColumn": 45, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 331, + "startColumn": 3, + "endLine": 331, + "endColumn": 45, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet1RouteTable886260DA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2SubnetCD612986", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 343, + "startColumn": 3, + "endLine": 343, + "endColumn": 39, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2SubnetCD612986", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 343, + "startColumn": 3, + "endLine": 343, + "endColumn": 39, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2SubnetCD612986", + "resourceType": "AWS::EC2::Subnet", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 343, + "startColumn": 3, + "endLine": 343, + "endColumn": 39, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2RouteTable1EDE83AC", + "resourceType": "AWS::EC2::RouteTable", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 379, + "startColumn": 3, + "endLine": 379, + "endColumn": 43, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 397, + "startColumn": 3, + "endLine": 397, + "endColumn": 54, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet2RouteTable1EDE83AC'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation", + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 397, + "startColumn": 3, + "endLine": 397, + "endColumn": 54, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet2SubnetCD612986'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 408, + "startColumn": 3, + "endLine": 408, + "endColumn": 45, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "resourceType": "AWS::EC2::Route", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 408, + "startColumn": 3, + "endLine": 408, + "endColumn": 45, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet2RouteTable1EDE83AC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "UserVpcVPCGWEFD8AF3B", + "resourceType": "AWS::EC2::VPCGatewayAttachment", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 431, + "startColumn": 3, + "endLine": 431, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "UserRoleB7C3739B", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 20, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "KubectlLayer600207B5", + "resourceType": "AWS::Lambda::LayerVersion", + "propertyPath": "Properties.Content", + "category": "Best Practice", + "startLine": 459, + "startColumn": 3, + "endLine": 459, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "KubectlLayer600207B5", + "resourceType": "AWS::Lambda::LayerVersion", + "propertyPath": "Properties.Description", + "category": "Best Practice", + "startLine": 459, + "startColumn": 3, + "endLine": 459, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LicenseInfo' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "KubectlLayer600207B5", + "resourceType": "AWS::Lambda::LayerVersion", + "propertyPath": "Properties.LicenseInfo", + "category": "Best Practice", + "startLine": 459, + "startColumn": 3, + "endLine": 459, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterKubectlHandlerRole94549F93. Circular dependency with [ClusterKubectlReadyBarrier200052AF]", + "source": "SCHEMA", + "resourceId": "ClusterKubectlHandlerRole94549F93", + "propertyPath": "Resources/ClusterKubectlHandlerRole94549F93", + "category": "Reference", + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 37, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterKubectlHandlerRole94549F93", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.ManagedPolicyArns.0.Fn::Join", + "category": "Intrinsic Function", + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 37, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterKubectlHandlerRole94549F93", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.ManagedPolicyArns.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 37, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterKubectlHandlerRole94549F93", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.ManagedPolicyArns.2.Fn::Join", + "category": "Intrinsic Function", + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 37, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterKubectlHandlerRole94549F93", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.ManagedPolicyArns.3.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 37, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterKubectlHandlerRole94549F93", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 37, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterControlPlaneSecurityGroupD274242C. Circular dependency with [ClusterKubectlReadyBarrier200052AF]", + "source": "SCHEMA", + "resourceId": "ClusterControlPlaneSecurityGroupD274242C", + "propertyPath": "Resources/ClusterControlPlaneSecurityGroupD274242C", + "category": "Reference", + "startLine": 593, + "startColumn": 3, + "endLine": 593, + "endColumn": 44, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterControlPlaneSecurityGroupD274242C", + "resourceType": "AWS::EC2::SecurityGroup", + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 593, + "startColumn": 3, + "endLine": 593, + "endColumn": 44, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterControlPlaneSecurityGroupD274242C", + "resourceType": "AWS::EC2::SecurityGroup", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 593, + "startColumn": 3, + "endLine": 593, + "endColumn": 44, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterControlPlaneSecurityGroupD274242C", + "resourceType": "AWS::EC2::SecurityGroup", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 593, + "startColumn": 3, + "endLine": 593, + "endColumn": 44, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterCreationRole360249B6. Circular dependency with [ClusterKubectlHandlerRole94549F93]", + "source": "SCHEMA", + "resourceId": "ClusterCreationRole360249B6", + "propertyPath": "Resources/ClusterCreationRole360249B6", + "category": "Reference", + "startLine": 614, + "startColumn": 3, + "endLine": 614, + "endColumn": 31, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterCreationRole360249B6. Circular dependency with [ClusterKubectlReadyBarrier200052AF]", + "source": "SCHEMA", + "resourceId": "ClusterCreationRole360249B6", + "propertyPath": "Resources/ClusterCreationRole360249B6", + "category": "Reference", + "startLine": 614, + "startColumn": 3, + "endLine": 614, + "endColumn": 31, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterCreationRole360249B6", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 614, + "startColumn": 3, + "endLine": 614, + "endColumn": 31, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterCreationRoleDefaultPolicyE8BDFC7B. Circular dependency with [ClusterKubectlReadyBarrier200052AF]", + "source": "SCHEMA", + "resourceId": "ClusterCreationRoleDefaultPolicyE8BDFC7B", + "propertyPath": "Resources/ClusterCreationRoleDefaultPolicyE8BDFC7B", + "category": "Reference", + "startLine": 688, + "startColumn": 3, + "endLine": 688, + "endColumn": 44, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Cluster9EE0221C. Circular dependency with [ClusterControlPlaneSecurityGroupD274242C]", + "source": "SCHEMA", + "resourceId": "Cluster9EE0221C", + "propertyPath": "Resources/Cluster9EE0221C", + "category": "Reference", + "startLine": 793, + "startColumn": 3, + "endLine": 793, + "endColumn": 19, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ClusterCreationRole360249B6' dependency already enforced by a 'GetAtt' at 'Properties.AssumeRoleArn'", + "source": "CFN_LINT", + "resourceId": "Cluster9EE0221C", + "resourceType": "Custom::AWSCDK-EKS-Cluster", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPrivateSubnet1Subnet0B127D2C' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.2'", + "source": "CFN_LINT", + "resourceId": "Cluster9EE0221C", + "resourceType": "Custom::AWSCDK-EKS-Cluster", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPrivateSubnet2SubnetCD612986' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.3'", + "source": "CFN_LINT", + "resourceId": "Cluster9EE0221C", + "resourceType": "Custom::AWSCDK-EKS-Cluster", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPublicSubnet1Subnet7A3A7B5D' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.0'", + "source": "CFN_LINT", + "resourceId": "Cluster9EE0221C", + "resourceType": "Custom::AWSCDK-EKS-Cluster", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPublicSubnet2Subnet42A6D42E' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.1'", + "source": "CFN_LINT", + "resourceId": "Cluster9EE0221C", + "resourceType": "Custom::AWSCDK-EKS-Cluster", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [Cluster9EE0221C]", + "source": "SCHEMA", + "resourceId": "ClusterKubectlReadyBarrier200052AF", + "propertyPath": "Resources/ClusterKubectlReadyBarrier200052AF", + "category": "Reference", + "startLine": 880, + "startColumn": 3, + "endLine": 880, + "endColumn": 38, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterCreationRole360249B6]", + "source": "SCHEMA", + "resourceId": "ClusterKubectlReadyBarrier200052AF", + "propertyPath": "Resources/ClusterKubectlReadyBarrier200052AF", + "category": "Reference", + "startLine": 880, + "startColumn": 3, + "endLine": 880, + "endColumn": 38, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterCreationRoleDefaultPolicyE8BDFC7B]", + "source": "SCHEMA", + "resourceId": "ClusterKubectlReadyBarrier200052AF", + "propertyPath": "Resources/ClusterKubectlReadyBarrier200052AF", + "category": "Reference", + "startLine": 880, + "startColumn": 3, + "endLine": 880, + "endColumn": 38, + "ruleDescription": "Circular dependency detected", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterKubectlReadyBarrier200052AF", + "resourceType": "AWS::SSM::Parameter", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 880, + "startColumn": 3, + "endLine": 880, + "endColumn": 38, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.ManagedPolicyArns.0.Fn::Join", + "category": "Intrinsic Function", + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 56, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.ManagedPolicyArns.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 56, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.ManagedPolicyArns.2.Fn::Join", + "category": "Intrinsic Function", + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 56, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "resourceType": "AWS::IAM::Role", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 56, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AmiType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterNodegroupDefaultCapacityDA0920A3", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.AmiType", + "category": "Best Practice", + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 43, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterNodegroupDefaultCapacityDA0920A3", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 43, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Cluster9EE0221C'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTypes' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterNodegroupDefaultCapacityDA0920A3", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.InstanceTypes", + "category": "Best Practice", + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 43, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NodeRole' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterNodegroupDefaultCapacityDA0920A3", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.NodeRole", + "category": "Best Practice", + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 43, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ClusterNodegroupDefaultCapacityNodeGroupRole55953B04.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "ClusterNodegroupDefaultCapacityDA0920A3", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 43, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "ClusterNodegroupDefaultCapacityDA0920A3", + "resourceType": "AWS::EKS::Nodegroup", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 43, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "ClusterAwsAuthmanifestFE51F8AE", + "resourceType": "Custom::AWSCDK-EKS-KubernetesResource", + "propertyPath": "Properties.Manifest.Fn::Join", + "category": "Intrinsic Function", + "startLine": 991, + "startColumn": 3, + "endLine": 991, + "endColumn": 34, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "resourceType": "AWS::CloudFormation::Stack", + "propertyPath": "Properties.TemplateURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1033, + "startColumn": 3, + "endLine": 1033, + "endColumn": 112, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "resourceType": "AWS::CloudFormation::Stack", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1033, + "startColumn": 3, + "endLine": 1033, + "endColumn": 112, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "resourceId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "resourceType": "AWS::CloudFormation::Stack", + "propertyPath": "Properties.TemplateURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1056, + "startColumn": 3, + "endLine": 1056, + "endColumn": 96, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "resourceType": "AWS::CloudFormation::Stack", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1056, + "startColumn": 3, + "endLine": 1056, + "endColumn": 96, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ClusterKubectlHandlerRole94549F93' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.referencetoStackClusterKubectlHandlerRoleD587D45BArn'", + "source": "CFN_LINT", + "resourceId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "resourceType": "AWS::CloudFormation::Stack", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1099, + "startColumn": 4, + "endLine": 1099, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-54.json": { + "filePath": "gh-issues/issue-54.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "resourceId": "Bucket", + "resourceType": "AWS::S3::Bucket", + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "section": "Resources", + "context": { + "actualValue": "PublicRead" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Bucket", + "resourceType": "AWS::S3::Bucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'OwnershipControls' is a required property (from extension)", + "source": "SCHEMA", + "resourceId": "Bucket", + "resourceType": "AWS::S3::Bucket", + "propertyPath": "Properties", + "suggestedFix": "Add 'OwnershipControls'", + "category": "Schema", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Required property missing", + "phase": "SCHEMA", + "section": "Resources" + }, + { + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "source": "CFN_LINT", + "resourceId": "Bucket", + "resourceType": "AWS::S3::Bucket", + "propertyPath": "Properties", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-55.json": { + "filePath": "gh-issues/issue-55.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Bucket", + "resourceType": "AWS::S3::Bucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-56.json": { + "filePath": "gh-issues/issue-56.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "WeakConsumer", + "resourceType": "AWS::SNS::Topic", + "propertyPath": "Properties.TopicName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'WeakConsumer' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "WeakConsumer", + "resourceType": "AWS::SNS::Topic", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-57.json": { + "filePath": "gh-issues/issue-57.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 1, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "E3057", + "severity": "ERROR", + "message": "TargetOriginId 'hanTheOneHundredAndTwentyEightCharacterLimitAReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForgetOriginGroup1B5CE3FE6' does not match any Origin Id in the distribution", + "source": "CFN_LINT", + "resourceId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + "resourceType": "AWS::CloudFront::Distribution", + "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.TargetOriginId", + "suggestedFix": "Set TargetOriginId to match one of the Origin Ids defined in Origins", + "category": "Resource", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 78, + "ruleDescription": "Validate that CloudFront TargetOriginId is a specified Origin", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9009", + "severity": "WARN", + "message": "Property 'DistributionConfig' is deprecated", + "source": "ENGINE", + "resourceId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + "resourceType": "AWS::CloudFront::Distribution", + "propertyPath": "Properties.DistributionConfig", + "category": "Deprecation", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 78, + "ruleDescription": "Resource type sunset or shutdown", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "deprecated" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + "resourceType": "AWS::CloudFront::Distribution", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 78, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-61.json": { + "filePath": "gh-issues/issue-61.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the given schemas for AWS::EC2::Volume", + "source": "SCHEMA", + "resourceId": "Resource", + "resourceType": "AWS::EC2::Volume", + "propertyPath": "Properties", + "category": "Schema", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "section": "Resources" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'DeletionPolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "resourceId": "Resource", + "resourceType": "AWS::EC2::Volume", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'UpdateReplacePolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "resourceId": "Resource", + "resourceType": "AWS::EC2::Volume", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Resource", + "resourceType": "AWS::EC2::Volume", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-62.json": { + "filePath": "gh-issues/issue-62.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 2, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected minimum item count: 1, found: 0", + "source": "SCHEMA", + "resourceId": "Canary", + "resourceType": "AWS::Synthetics::Canary", + "propertyPath": "Properties.ResourcesToReplicateTags", + "category": "Schema", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "extra": { + "actual_count": 0, + "max_items": 1, + "min_items": 1 + } + } + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'ExecutionRoleArn' has a hardcoded ARN \u2014 use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "resourceId": "Canary", + "resourceType": "AWS::Synthetics::Canary", + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "Canary", + "resourceType": "AWS::Synthetics::Canary", + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'FailureRetentionPeriod' is a required property (The default retention period will delete the data after a pre-defined time. Set an explicit values to avoid data loss on resource)", + "source": "CFN_LINT", + "resourceId": "Canary", + "resourceType": "AWS::Synthetics::Canary", + "propertyPath": "Properties.FailureRetentionPeriod", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'SuccessRetentionPeriod' is a required property (The default retention period will delete the data after a pre-defined time. Set an explicit values to avoid data loss on resource)", + "source": "CFN_LINT", + "resourceId": "Canary", + "resourceType": "AWS::Synthetics::Canary", + "propertyPath": "Properties.SuccessRetentionPeriod", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "Canary", + "resourceType": "AWS::Synthetics::Canary", + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Canary", + "resourceType": "AWS::Synthetics::Canary", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-63.json": { + "filePath": "gh-issues/issue-63.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'SomeParameter': Default must be a string", + "source": "CFN_LINT", + "propertyPath": "Parameters.SomeParameter.Default", + "category": "Parameter", + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "Topic", + "resourceType": "AWS::SNS::Topic", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-65.json": { + "filePath": "gh-issues/issue-65.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' is deprecated", + "source": "CFN_LINT", + "resourceId": "MyLambda", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Runtime", + "suggestedFix": "Update to a current runtime", + "category": "Deprecation", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "MyLambda", + "resourceType": "AWS::Lambda::Function", + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "MyLambda", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "MyLambda", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "S3Permission", + "resourceType": "AWS::Lambda::Permission", + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "S3Permission", + "resourceType": "AWS::Lambda::Permission", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyLambda'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "S3Permission", + "resourceType": "AWS::Lambda::Permission", + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "S3Permission", + "resourceType": "AWS::Lambda::Permission", + "propertyPath": "Properties.SourceAccount", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "gh-issues/issue-67.json": { + "filePath": "gh-issues/issue-67.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "PromAlarm", + "resourceType": "AWS::CloudWatch::Alarm", + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "PromAlarm", + "resourceType": "AWS::CloudWatch::Alarm", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['Metrics', 'MetricName'] must be specified", + "source": "SCHEMA", + "resourceId": "PromAlarm", + "resourceType": "AWS::CloudWatch::Alarm", + "propertyPath": "Properties", + "category": "Schema", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA", + "section": "Resources" + } + ] + }, + "gh-issues/issue-68.json": { + "filePath": "gh-issues/issue-68.json", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 1, + "warnings": 2, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "F3030", + "severity": "FATAL", + "message": "'nodejs99.x' is not one of [String(\"dotnet10\"), String(\"dotnet6\"), String(\"dotnet8\"), String(\"dotnetcore1.0\"), String(\"dotnetcore2.0\"), String(\"dotnetcore2.1\"), String(\"dotnetcore3.1\"), String(\"go1.x\"), String(\"java11\"), String(\"java17\"), String(\"java21\"), String(\"java25\"), String(\"java8\"), String(\"java8.al2\"), String(\"nodejs\"), String(\"nodejs10.x\"), String(\"nodejs12.x\"), String(\"nodejs14.x\"), String(\"nodejs16.x\"), String(\"nodejs18.x\"), String(\"nodejs20.x\"), String(\"nodejs22.x\"), String(\"nodejs24.x\"), String(\"nodejs4.3\"), String(\"nodejs4.3-edge\"), String(\"nodejs6.10\"), String(\"nodejs8.10\"), String(\"provided\"), String(\"provided.al2\"), String(\"provided.al2023\"), String(\"python2.7\"), String(\"python3.10\"), String(\"python3.11\"), String(\"python3.12\"), String(\"python3.13\"), String(\"python3.14\"), String(\"python3.6\"), String(\"python3.7\"), String(\"python3.8\"), String(\"python3.9\"), String(\"ruby2.5\"), String(\"ruby2.7\"), String(\"ruby3.2\"), String(\"ruby3.3\"), String(\"ruby3.4\"), String(\"ruby4.0\")]", + "source": "SCHEMA", + "resourceId": "MyFunc", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "actualValue": "nodejs99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java17", + "java21", + "java25", + "java8", + "java8.al2", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } + } + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "MyFunc", + "resourceType": "AWS::Lambda::Function", + "category": "Security", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "MyFunc", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "MyFunc", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "F3030", + "severity": "FATAL", + "message": "'node99.x' is not one of [String(\"dotnet10\"), String(\"dotnet6\"), String(\"dotnet8\"), String(\"dotnetcore1.0\"), String(\"dotnetcore2.0\"), String(\"dotnetcore2.1\"), String(\"dotnetcore3.1\"), String(\"go1.x\"), String(\"java11\"), String(\"java17\"), String(\"java21\"), String(\"java25\"), String(\"java8\"), String(\"java8.al2\"), String(\"nodejs\"), String(\"nodejs10.x\"), String(\"nodejs12.x\"), String(\"nodejs14.x\"), String(\"nodejs16.x\"), String(\"nodejs18.x\"), String(\"nodejs20.x\"), String(\"nodejs22.x\"), String(\"nodejs24.x\"), String(\"nodejs4.3\"), String(\"nodejs4.3-edge\"), String(\"nodejs6.10\"), String(\"nodejs8.10\"), String(\"provided\"), String(\"provided.al2\"), String(\"provided.al2023\"), String(\"python2.7\"), String(\"python3.10\"), String(\"python3.11\"), String(\"python3.12\"), String(\"python3.13\"), String(\"python3.14\"), String(\"python3.6\"), String(\"python3.7\"), String(\"python3.8\"), String(\"python3.9\"), String(\"ruby2.5\"), String(\"ruby2.7\"), String(\"ruby3.2\"), String(\"ruby3.3\"), String(\"ruby3.4\"), String(\"ruby4.0\")]", + "source": "SCHEMA", + "resourceId": "FutureNodeFunc", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "actualValue": "node99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java17", + "java21", + "java25", + "java8", + "java8.al2", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } + } + }, + { + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'node99.x' is not supported with Code.ZipFile \u2014 use nodejs or python", + "source": "CFN_LINT", + "resourceId": "FutureNodeFunc", + "resourceType": "AWS::Lambda::Function", + "category": "Resource", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN \u2014 use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "resourceId": "FutureNodeFunc", + "resourceType": "AWS::Lambda::Function", + "category": "Security", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT", + "section": "Resources" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "resourceId": "FutureNodeFunc", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "resourceId": "FutureNodeFunc", + "resourceType": "AWS::Lambda::Function", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Resource should have Tags", + "phase": "LINT", + "section": "Resources" + } + ] + }, + "gh-issues/issue-69.yaml": { + "filePath": "gh-issues/issue-69.yaml", + "status": "OK", + "engineVersion": "1.3.0", + "metadata": { + "rulesEvaluated": 273, + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "performance": { + "schemaInit": { + "durationMs": 0.0 + }, + "engineInit": { + "durationMs": 0.0 + }, + "modelBuild": { + "durationMs": 0.0 + }, + "schemaValidate": { + "durationMs": 0.0 + }, + "ruleEvaluation": { + "durationMs": 0.0 + }, + "diagnosticFinalize": { + "durationMs": 0.0 + }, + "validateTotal": { + "durationMs": 0.0 + } + }, + "diagnostics": [ + { + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected maximum item count: 1, found: 2", + "source": "SCHEMA", + "resourceId": "Profile", + "resourceType": "AWS::IAM::InstanceProfile", + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "extra": { + "actual_count": 2, + "max_items": 1, + "min_items": 1 + } + } + }, + { + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", + "resourceId": "Profile", + "resourceType": "AWS::IAM::InstanceProfile", + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "section": "Resources", + "context": { + "actualValue": [ + "arn:aws:iam::012345678901:role/SameRole", + "arn:aws:iam::012345678901:role/SameRole" + ] + } + } + ] + }, "good/E9001_aws_cdk_metadata.yaml": { "filePath": "good/E9001_aws_cdk_metadata.yaml", "status": "OK", diff --git a/src/resources/expected/generate.py b/src/resources/expected/generate.py index e1a43e5..4b7fa4a 100644 --- a/src/resources/expected/generate.py +++ b/src/resources/expected/generate.py @@ -17,7 +17,7 @@ from collections import OrderedDict from pathlib import Path -TEMPLATE_DIRS = ["bad", "cdk", "good", "integration", "issues", "lsp", "public", "quickstart"] +TEMPLATE_DIRS = ["bad", "cdk", "good", "gh-issues", "integration", "issues", "lsp", "public", "quickstart"] WORKSPACE_ROOT = Path(__file__).resolve().parent.parent.parent RESOURCES_DIR = WORKSPACE_ROOT / "resources" / "templates" diff --git a/src/resources/templates/gh-issues/issue-34.json b/src/resources/templates/gh-issues/issue-34.json new file mode 100644 index 0000000..d31f4dd --- /dev/null +++ b/src/resources/templates/gh-issues/issue-34.json @@ -0,0 +1,28 @@ +{ + "Parameters": { + "SomeParameter": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended/image_id" + }, + "SsmStringImageParam": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/aws/service/eks/optimized-ami/1.25/amazon-linux-2/recommended/image_id" + } + }, + "Resources": { + "Instance": { + "Type": "AWS::EC2::Instance", + "Properties": { + "ImageId": { "Ref": "SomeParameter" }, + "InstanceType": "t3.micro" + } + }, + "Instance2": { + "Type": "AWS::EC2::Instance", + "Properties": { + "ImageId": { "Ref": "SsmStringImageParam" }, + "InstanceType": "t3.micro" + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-35.yaml b/src/resources/templates/gh-issues/issue-35.yaml new file mode 100644 index 0000000..6a2e266 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-35.yaml @@ -0,0 +1,9 @@ +Resources: + ScheduledRule: + Type: AWS::Events::Rule + Properties: + ScheduleExpression: "prefix-{{resolve:ssm:/my/schedule}}" + State: ENABLED + Targets: + - Arn: "arn:aws:lambda:us-east-1:123456789012:function:my-func" + Id: "target1" diff --git a/src/resources/templates/gh-issues/issue-36.yaml b/src/resources/templates/gh-issues/issue-36.yaml new file mode 100644 index 0000000..8304a84 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-36.yaml @@ -0,0 +1,11 @@ +AWSTemplateFormatVersion: "2010-09-09" +Resources: + # ExecutionRoleArn uses the `aws-iso` ADC partition. The schema-validator's + # AWS::IAM::Role.Arn format pattern hardcodes the partition list and omits the + # ADC partitions, so it raises a false-positive E1156 (in BOTH engines) even + # though this is a deployable ARN. + # See https://github.com/aws-cloudformation/cloudformation-validate/issues/36 + TaskDef: + Type: AWS::ECS::TaskDefinition + Properties: + ExecutionRoleArn: arn:aws-iso:iam::123456789012:role/my-task-role diff --git a/src/resources/templates/gh-issues/issue-37.yaml b/src/resources/templates/gh-issues/issue-37.yaml new file mode 100644 index 0000000..80aa39d --- /dev/null +++ b/src/resources/templates/gh-issues/issue-37.yaml @@ -0,0 +1,15 @@ +AWSTemplateFormatVersion: "2010-09-09" +Resources: + MyLaunchConfig: + Type: AWS::AutoScaling::LaunchConfiguration + Properties: + ImageId: ami-0abcdef1234567890 + InstanceType: t3.micro + MyAsg: + Type: AWS::AutoScaling::AutoScalingGroup + Properties: + LaunchConfigurationName: !Ref MyLaunchConfig + MinSize: "1" + MaxSize: "2" + AvailabilityZones: + - us-east-1a diff --git a/src/resources/templates/gh-issues/issue-38.json b/src/resources/templates/gh-issues/issue-38.json new file mode 100644 index 0000000..550d253 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-38.json @@ -0,0 +1,54 @@ +{ + "Resources": { + "Memory": { + "Type": "AWS::BedrockAgentCore::Memory", + "Properties": { + "Name": "MyMemory", + "EventExpiryDuration": 90, + "MemoryStrategies": [ + { + "SummaryMemoryStrategy": { + "Description": "Summarize interactions to preserve critical context and key insights", + "Name": "summary_builtin_cdkGen0001", + "Namespaces": [ + "/strategies/{memoryStrategyId}/actors/{actorId}/sessions/{sessionId}" + ] + } + }, + { + "SemanticMemoryStrategy": { + "Description": "Extract general factual knowledge, concepts and meanings from raw conversations in a context-independent format.", + "Name": "semantic_builtin_cdkGen0001", + "Namespaces": [ + "/strategies/{memoryStrategyId}/actors/{actorId}" + ] + } + }, + { + "UserPreferenceMemoryStrategy": { + "Description": "Capture individual preferences, interaction patterns, and personalized settings to enhance future experiences.", + "Name": "preference_builtin_cdkGen0001", + "Namespaces": [ + "/strategies/{memoryStrategyId}/actors/{actorId}" + ] + } + }, + { + "EpisodicMemoryStrategy": { + "Description": "Captures meaningful slices of user and system interactions.", + "Name": "episodic_builtin_cdkGen0001", + "Namespaces": [ + "/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}" + ], + "ReflectionConfiguration": { + "Namespaces": [ + "/strategy/{memoryStrategyId}/actor/{actorId}" + ] + } + } + } + ] + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-39.json b/src/resources/templates/gh-issues/issue-39.json new file mode 100644 index 0000000..8369e9d --- /dev/null +++ b/src/resources/templates/gh-issues/issue-39.json @@ -0,0 +1,40 @@ +{ + "Resources": { + "VPCB9E5F0B4": { + "Type": "AWS::EC2::VPC", + "Properties": { + "CidrBlock": "10.0.0.0/16" + } + }, + "VPCEcrEndpointSecurityGroup50ED8BA4": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "aws-ecs-patterns-queue-isolated/VPC/EcrEndpoint/SecurityGroup", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "SecurityGroupIngress": [ + { + "CidrIp": { + "Fn::GetAtt": [ + "VPCB9E5F0B4", + "CidrBlock" + ] + }, + "Description": "from VPC CIDR", + "FromPort": 443, + "ToPort": 443, + "IpProtocol": "tcp" + } + ], + "VpcId": { + "Ref": "VPCB9E5F0B4" + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-40.yaml b/src/resources/templates/gh-issues/issue-40.yaml new file mode 100644 index 0000000..93820bc --- /dev/null +++ b/src/resources/templates/gh-issues/issue-40.yaml @@ -0,0 +1,32 @@ +Resources: + EksCluster: + Type: AWS::EKS::Cluster + Properties: + Name: my-cluster + RoleArn: arn:aws:iam::123456789012:role/eks-role + ResourcesVpcConfig: + SubnetIds: + - subnet-0123456789abcdef0 + + # Case 1: concrete bad value (sg-1) in a SecurityGroupId-format property. + # This is an inspectable literal, so the format check (E1150) fires. + DaxConcrete: + Type: AWS::DAX::Cluster + Properties: + IAMRoleARN: arn:aws:iam::123456789012:role/dax + NodeType: dax.r4.large + ReplicationFactor: 1 + SecurityGroupIds: + - sg-1 + + # Case 2: Ref to a non-SecurityGroup resource (EKS Cluster) used where a SG id + # is expected. This is a deploy-time value, so E1150 does NOT fire here; the + # deploy-time-type concern lives under the separate E1041/E1040 rules. + DaxRef: + Type: AWS::DAX::Cluster + Properties: + IAMRoleARN: arn:aws:iam::123456789012:role/dax + NodeType: dax.r4.large + ReplicationFactor: 1 + SecurityGroupIds: + - !Ref EksCluster diff --git a/src/resources/templates/gh-issues/issue-41.json b/src/resources/templates/gh-issues/issue-41.json new file mode 100644 index 0000000..8e21dc0 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-41.json @@ -0,0 +1,25 @@ +{ + "Resources": { + "MyFunction": { + "Type": "AWS::Lambda::Function", + "Properties": { + "FunctionName": "my-fn", + "Runtime": "nodejs20.x", + "Handler": "index.handler", + "Code": { "ZipFile": "exports.handler = async () => {};" }, + "Role": { + "Fn::Join": [ + "", + [ + "arn:", + { "Ref": "AWS::Partition" }, + ":iam::", + { "Ref": "AWS::AccountId" }, + ":role/my-custom-role-name" + ] + ] + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-42.yaml b/src/resources/templates/gh-issues/issue-42.yaml new file mode 100644 index 0000000..a6eed71 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-42.yaml @@ -0,0 +1,28 @@ +AWSTemplateFormatVersion: '2010-09-09' +Resources: + TaskDef: + Type: AWS::ECS::TaskDefinition + Properties: + Family: my-task + ContainerDefinitions: + - Name: web + Image: nginx:latest + PortMappings: + - ContainerPort: 80 + HostPort: 0 + TargetGroup: + Type: AWS::ElasticLoadBalancingV2::TargetGroup + Properties: + Port: 80 + Protocol: HTTP + VpcId: vpc-12345678 + # HealthCheckPort intentionally omitted -> defaults to traffic-port + Service: + Type: AWS::ECS::Service + Properties: + Cluster: my-cluster + TaskDefinition: !Ref TaskDef + LoadBalancers: + - ContainerName: web + ContainerPort: 80 + TargetGroupArn: !Ref TargetGroup diff --git a/src/resources/templates/gh-issues/issue-44.json b/src/resources/templates/gh-issues/issue-44.json new file mode 100644 index 0000000..f6ce914 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-44.json @@ -0,0 +1,61 @@ +{ + "Resources": { + "Pipeline": { + "Type": "AWS::CodePipeline::Pipeline", + "Properties": { + "RoleArn": { "Fn::GetAtt": ["PipelineRole", "Arn"] }, + "Stages": [ + { + "Name": "Source", + "Actions": [{ + "Name": "Source", + "ActionTypeId": { "Category": "Source", "Owner": "ThirdParty", "Provider": "GitHub", "Version": "1" }, + "OutputArtifacts": [{ "Name": "SourceOutput" }], + "Configuration": { "Owner": "test", "Repo": "test", "Branch": "main" } + }] + }, + { + "Name": "Deploy", + "Actions": [ + { + "Name": "Prepare", + "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Provider": "CloudFormation", "Version": "1" }, + "InputArtifacts": [{ "Name": "SourceOutput" }], + "Configuration": { + "ActionMode": "CHANGE_SET_REPLACE", + "StackName": "MyStack", + "ChangeSetName": "PipelineChange", + "TemplatePath": "SourceOutput::template.json" + }, + "RunOrder": 1 + }, + { + "Name": "Deploy", + "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Provider": "CloudFormation", "Version": "1" }, + "Configuration": { + "ActionMode": "CHANGE_SET_EXECUTE", + "StackName": "MyStack", + "ChangeSetName": "PipelineChange" + }, + "RunOrder": 2 + } + ] + } + ] + } + }, + "PipelineRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [{ + "Effect": "Allow", + "Principal": { "Service": "codepipeline.amazonaws.com" }, + "Action": "sts:AssumeRole" + }] + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-45.json b/src/resources/templates/gh-issues/issue-45.json new file mode 100644 index 0000000..101688b --- /dev/null +++ b/src/resources/templates/gh-issues/issue-45.json @@ -0,0 +1,28 @@ +{ + "Resources": { + "interfaceVpcEndpoint89C99945": { + "Type": "AWS::EC2::VPCEndpoint", + "Properties": { + "VpcEndpointType": "Interface", + "ServiceName": "com.amazonaws.us-east-1.ec2", + "VpcId": "vpc-12345678" + } + } + }, + "Outputs": { + "ExportsOutputFnGetAttinterfaceVpcEndpoint89C99945DnsEntriesB1872F7A": { + "Value": { + "Fn::Join": [ + "||", + { + "Fn::GetAtt": [ + "interfaceVpcEndpoint89C99945", + "DnsEntries" + ] + } + ] + }, + "Export": { "Name": "Stack1:ExportsOutputFnGetAttinterfaceVpcEndpoint89C99945DnsEntriesB1872F7A" } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-46.json b/src/resources/templates/gh-issues/issue-46.json new file mode 100644 index 0000000..97f115e --- /dev/null +++ b/src/resources/templates/gh-issues/issue-46.json @@ -0,0 +1,36 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Resources": { + "ClusterEB0386A7": { + "Type": "AWS::EKS::Cluster", + "Properties": { + "RoleArn": "arn:aws:iam::123456789012:role/eks-cluster-role", + "ResourcesVpcConfig": { + "SubnetIds": ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"] + } + } + }, + "ClusterKubectlProviderHandler2E05C68A": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "def handler(event, context): return {}" + }, + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "python3.12", + "VpcConfig": { + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "ClusterEB0386A7", + "ClusterSecurityGroupId" + ] + } + ], + "SubnetIds": ["subnet-0123456789abcdef0"] + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-47.json b/src/resources/templates/gh-issues/issue-47.json new file mode 100644 index 0000000..526ea8a --- /dev/null +++ b/src/resources/templates/gh-issues/issue-47.json @@ -0,0 +1,16 @@ +{ + "Resources": { + "MyFunction": { + "Type": "AWS::Lambda::Function", + "Properties": { + "FunctionName": "demo", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "node99.x", + "Code": { + "ZipFile": "exports.handler = async () => {};" + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-48.json b/src/resources/templates/gh-issues/issue-48.json new file mode 100644 index 0000000..df4cb8c --- /dev/null +++ b/src/resources/templates/gh-issues/issue-48.json @@ -0,0 +1,19 @@ +{ + "Resources": { + "MyBucket": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::Join": [ + "-", + [ + "my-bucket", + { "Ref": "AWS::AccountId" }, + { "Ref": "AWS::Region" } + ] + ] + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-49.yaml b/src/resources/templates/gh-issues/issue-49.yaml new file mode 100644 index 0000000..160f935 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-49.yaml @@ -0,0 +1,17 @@ +Resources: + EsDomain: + Type: AWS::Elasticsearch::Domain + Properties: + ElasticsearchClusterConfig: + InstanceType: r5.large.elasticsearch + InstanceCount: 2 + DocDbInstance: + Type: AWS::DocDB::DBInstance + Properties: + DBClusterIdentifier: my-cluster + DBInstanceClass: db.t2.small + Ec2Instance: + Type: AWS::EC2::Instance + Properties: + ImageId: ami-12345678 + InstanceType: t2.nano diff --git a/src/resources/templates/gh-issues/issue-50.json b/src/resources/templates/gh-issues/issue-50.json new file mode 100644 index 0000000..9f93952 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-50.json @@ -0,0 +1,31 @@ +{ + "Parameters": { + "bucketListParam": { "Type": "String" } + }, + "Resources": { + "MyFunctionServiceRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [{ "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" }] + } + } + }, + "MyFunctionServiceRoleDefaultPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": "MyFunctionServiceRoleDefaultPolicy", + "Roles": [{ "Ref": "MyFunctionServiceRole" }], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [{ + "Effect": "Allow", + "Action": ["s3:GetObject*", "s3:GetBucket*", "s3:List*"], + "Resource": { "Fn::Split": [",", { "Ref": "bucketListParam" }] } + }] + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-52.json b/src/resources/templates/gh-issues/issue-52.json new file mode 100644 index 0000000..740ec29 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-52.json @@ -0,0 +1,15 @@ +{ + "Resources": { + "Nodegroup": { + "Type": "AWS::EKS::Nodegroup", + "Properties": { + "ClusterName": "MyCluster", + "NodeRole": "arn:aws:iam::123456789012:role/NodeRole", + "Subnets": [ + { "Fn::ImportValue": "NetworkStack:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940" }, + { "Fn::ImportValue": "NetworkStack:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3" } + ] + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-53.json b/src/resources/templates/gh-issues/issue-53.json new file mode 100644 index 0000000..d948310 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-53.json @@ -0,0 +1,1155 @@ +{ + "Resources": { + "UserVpcFAC913E5": { + "Type": "AWS::EC2::VPC", + "Properties": { + "CidrBlock": "10.0.0.0/16", + "EnableDnsHostnames": true, + "EnableDnsSupport": true, + "InstanceTenancy": "default", + "Tags": [ + { + "Key": "Name", + "Value": "Stack/UserVpc" + } + ] + } + }, + "UserVpcPublicSubnet1Subnet7A3A7B5D": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.0.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPublicSubnet1RouteTable5F0A6273": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet1" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPublicSubnet1RouteTableAssociation2AB88B08": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "UserVpcPublicSubnet1RouteTable5F0A6273" + }, + "SubnetId": { + "Ref": "UserVpcPublicSubnet1Subnet7A3A7B5D" + } + } + }, + "UserVpcPublicSubnet1DefaultRoute321532E0": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "UserVpcIGW2437F24B" + }, + "RouteTableId": { + "Ref": "UserVpcPublicSubnet1RouteTable5F0A6273" + } + }, + "DependsOn": [ + "UserVpcVPCGWEFD8AF3B" + ] + }, + "UserVpcPublicSubnet1EIP84E63864": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet1" + } + ] + } + }, + "UserVpcPublicSubnet1NATGateway7AFB18E6": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "UserVpcPublicSubnet1EIP84E63864", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "UserVpcPublicSubnet1Subnet7A3A7B5D" + }, + "Tags": [ + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet1" + } + ] + }, + "DependsOn": [ + "UserVpcPublicSubnet1DefaultRoute321532E0", + "UserVpcPublicSubnet1RouteTableAssociation2AB88B08" + ] + }, + "UserVpcPublicSubnet2Subnet42A6D42E": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.64.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPublicSubnet2RouteTableEC6A2C2A": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet2" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPublicSubnet2RouteTableAssociationF7485C52": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "UserVpcPublicSubnet2RouteTableEC6A2C2A" + }, + "SubnetId": { + "Ref": "UserVpcPublicSubnet2Subnet42A6D42E" + } + } + }, + "UserVpcPublicSubnet2DefaultRouteE14C718B": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "UserVpcIGW2437F24B" + }, + "RouteTableId": { + "Ref": "UserVpcPublicSubnet2RouteTableEC6A2C2A" + } + }, + "DependsOn": [ + "UserVpcVPCGWEFD8AF3B" + ] + }, + "UserVpcPublicSubnet2EIPE859723C": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet2" + } + ] + } + }, + "UserVpcPublicSubnet2NATGateway5AD59565": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "UserVpcPublicSubnet2EIPE859723C", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "UserVpcPublicSubnet2Subnet42A6D42E" + }, + "Tags": [ + { + "Key": "kubernetes.io/role/elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PublicSubnet2" + } + ] + }, + "DependsOn": [ + "UserVpcPublicSubnet2DefaultRouteE14C718B", + "UserVpcPublicSubnet2RouteTableAssociationF7485C52" + ] + }, + "UserVpcPrivateSubnet1Subnet0B127D2C": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.128.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "kubernetes.io/role/internal-elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PrivateSubnet1" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPrivateSubnet1RouteTable886260DA": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "kubernetes.io/role/internal-elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PrivateSubnet1" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "UserVpcPrivateSubnet1RouteTable886260DA" + }, + "SubnetId": { + "Ref": "UserVpcPrivateSubnet1Subnet0B127D2C" + } + } + }, + "UserVpcPrivateSubnet1DefaultRouteB00E5F42": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "UserVpcPublicSubnet1NATGateway7AFB18E6" + }, + "RouteTableId": { + "Ref": "UserVpcPrivateSubnet1RouteTable886260DA" + } + } + }, + "UserVpcPrivateSubnet2SubnetCD612986": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.192.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "kubernetes.io/role/internal-elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PrivateSubnet2" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPrivateSubnet2RouteTable1EDE83AC": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "kubernetes.io/role/internal-elb", + "Value": "1" + }, + { + "Key": "Name", + "Value": "Stack/UserVpc/PrivateSubnet2" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserVpcPrivateSubnet2RouteTableAssociation1643AB72": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "UserVpcPrivateSubnet2RouteTable1EDE83AC" + }, + "SubnetId": { + "Ref": "UserVpcPrivateSubnet2SubnetCD612986" + } + } + }, + "UserVpcPrivateSubnet2DefaultRoute99CA0CB9": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "UserVpcPublicSubnet2NATGateway5AD59565" + }, + "RouteTableId": { + "Ref": "UserVpcPrivateSubnet2RouteTable1EDE83AC" + } + } + }, + "UserVpcIGW2437F24B": { + "Type": "AWS::EC2::InternetGateway", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "Stack/UserVpc" + } + ] + } + }, + "UserVpcVPCGWEFD8AF3B": { + "Type": "AWS::EC2::VPCGatewayAttachment", + "Properties": { + "InternetGatewayId": { + "Ref": "UserVpcIGW2437F24B" + }, + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + } + }, + "UserRoleB7C3739B": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "eks.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "KubectlLayer600207B5": { + "Type": "AWS::Lambda::LayerVersion", + "Properties": { + "Content": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1" + }, + "S3Key": "77675805670406a68c1baf43392c7e699bee435fe9b667ef4f9f1134b8c41d0e.zip" + }, + "Description": "/opt/kubectl/kubectl 1.31.9; /opt/helm/helm 3.17.3", + "LicenseInfo": "Apache-2.0" + } + }, + "ClusterKubectlHandlerRole94549F93": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/AmazonEC2ContainerRegistryPullOnly" + ] + ] + }, + { + "Fn::If": [ + "ClusterHasEcrPublic8EE1114E", + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/AmazonElasticContainerRegistryPublicReadOnly" + ] + ] + }, + { + "Ref": "AWS::NoValue" + } + ] + } + ] + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterKubectlHandlerRoleDefaultPolicyE44083DD": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "eks:DescribeCluster", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "Cluster9EE0221C", + "Arn" + ] + } + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "ClusterCreationRole360249B6", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ClusterKubectlHandlerRoleDefaultPolicyE44083DD", + "Roles": [ + { + "Ref": "ClusterKubectlHandlerRole94549F93" + } + ] + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterControlPlaneSecurityGroupD274242C": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "EKS Control Plane Security Group", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "VpcId": { + "Ref": "UserVpcFAC913E5" + } + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterCreationRole360249B6": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "Outputs.StackawscdkawseksClusterResourceProviderOnEventHandlerServiceRole3AEE0A43Arn" + ] + } + } + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "Outputs.StackawscdkawseksClusterResourceProviderIsCompleteHandlerServiceRole8E7F1C11Arn" + ] + } + } + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "ClusterKubectlHandlerRole94549F93", + "Arn" + ] + } + } + } + ], + "Version": "2012-10-17" + } + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF", + "UserVpcIGW2437F24B", + "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "UserVpcPrivateSubnet1RouteTable886260DA", + "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "UserVpcPrivateSubnet1Subnet0B127D2C", + "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "UserVpcPrivateSubnet2RouteTable1EDE83AC", + "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "UserVpcPrivateSubnet2SubnetCD612986", + "UserVpcPublicSubnet1DefaultRoute321532E0", + "UserVpcPublicSubnet1EIP84E63864", + "UserVpcPublicSubnet1NATGateway7AFB18E6", + "UserVpcPublicSubnet1RouteTable5F0A6273", + "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "UserVpcPublicSubnet1Subnet7A3A7B5D", + "UserVpcPublicSubnet2DefaultRouteE14C718B", + "UserVpcPublicSubnet2EIPE859723C", + "UserVpcPublicSubnet2NATGateway5AD59565", + "UserVpcPublicSubnet2RouteTableEC6A2C2A", + "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "UserVpcPublicSubnet2Subnet42A6D42E", + "UserVpcFAC913E5", + "UserVpcVPCGWEFD8AF3B" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterCreationRoleDefaultPolicyE8BDFC7B": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "iam:PassRole", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "UserRoleB7C3739B", + "Arn" + ] + } + }, + { + "Action": [ + "eks:CreateCluster", + "eks:DescribeCluster", + "eks:DescribeUpdate", + "eks:DeleteCluster", + "eks:UpdateClusterVersion", + "eks:UpdateClusterConfig", + "eks:CreateFargateProfile", + "eks:TagResource", + "eks:UntagResource" + ], + "Effect": "Allow", + "Resource": [ + "*" + ] + }, + { + "Action": [ + "eks:DescribeFargateProfile", + "eks:DeleteFargateProfile" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "iam:GetRole", + "iam:listAttachedRolePolicies" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": "iam:CreateServiceLinkedRole", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "ec2:DescribeInstances", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeRouteTables", + "ec2:DescribeDhcpOptions", + "ec2:DescribeVpcs" + ], + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ClusterCreationRoleDefaultPolicyE8BDFC7B", + "Roles": [ + { + "Ref": "ClusterCreationRole360249B6" + } + ] + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF", + "UserVpcIGW2437F24B", + "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "UserVpcPrivateSubnet1RouteTable886260DA", + "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "UserVpcPrivateSubnet1Subnet0B127D2C", + "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "UserVpcPrivateSubnet2RouteTable1EDE83AC", + "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "UserVpcPrivateSubnet2SubnetCD612986", + "UserVpcPublicSubnet1DefaultRoute321532E0", + "UserVpcPublicSubnet1EIP84E63864", + "UserVpcPublicSubnet1NATGateway7AFB18E6", + "UserVpcPublicSubnet1RouteTable5F0A6273", + "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "UserVpcPublicSubnet1Subnet7A3A7B5D", + "UserVpcPublicSubnet2DefaultRouteE14C718B", + "UserVpcPublicSubnet2EIPE859723C", + "UserVpcPublicSubnet2NATGateway5AD59565", + "UserVpcPublicSubnet2RouteTableEC6A2C2A", + "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "UserVpcPublicSubnet2Subnet42A6D42E", + "UserVpcFAC913E5", + "UserVpcVPCGWEFD8AF3B" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "Cluster9EE0221C": { + "Type": "Custom::AWSCDK-EKS-Cluster", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "Outputs.StackawscdkawseksClusterResourceProviderframeworkonEvent9D6CED48Arn" + ] + }, + "Config": { + "version": "1.25", + "roleArn": { + "Fn::GetAtt": [ + "UserRoleB7C3739B", + "Arn" + ] + }, + "kubernetesNetworkConfig": { + "ipFamily": "ipv4" + }, + "resourcesVpcConfig": { + "subnetIds": [ + { + "Ref": "UserVpcPublicSubnet1Subnet7A3A7B5D" + }, + { + "Ref": "UserVpcPublicSubnet2Subnet42A6D42E" + }, + { + "Ref": "UserVpcPrivateSubnet1Subnet0B127D2C" + }, + { + "Ref": "UserVpcPrivateSubnet2SubnetCD612986" + } + ], + "securityGroupIds": [ + { + "Fn::GetAtt": [ + "ClusterControlPlaneSecurityGroupD274242C", + "GroupId" + ] + } + ], + "endpointPublicAccess": true, + "endpointPrivateAccess": true + }, + "accessConfig": {} + }, + "AssumeRoleArn": { + "Fn::GetAtt": [ + "ClusterCreationRole360249B6", + "Arn" + ] + }, + "AttributesRevision": 5 + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF", + "ClusterCreationRoleDefaultPolicyE8BDFC7B", + "ClusterCreationRole360249B6", + "UserVpcIGW2437F24B", + "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "UserVpcPrivateSubnet1RouteTable886260DA", + "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "UserVpcPrivateSubnet1Subnet0B127D2C", + "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "UserVpcPrivateSubnet2RouteTable1EDE83AC", + "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "UserVpcPrivateSubnet2SubnetCD612986", + "UserVpcPublicSubnet1DefaultRoute321532E0", + "UserVpcPublicSubnet1EIP84E63864", + "UserVpcPublicSubnet1NATGateway7AFB18E6", + "UserVpcPublicSubnet1RouteTable5F0A6273", + "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "UserVpcPublicSubnet1Subnet7A3A7B5D", + "UserVpcPublicSubnet2DefaultRouteE14C718B", + "UserVpcPublicSubnet2EIPE859723C", + "UserVpcPublicSubnet2NATGateway5AD59565", + "UserVpcPublicSubnet2RouteTableEC6A2C2A", + "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "UserVpcPublicSubnet2Subnet42A6D42E", + "UserVpcFAC913E5", + "UserVpcVPCGWEFD8AF3B" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterKubectlReadyBarrier200052AF": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Type": "String", + "Value": "aws:cdk:eks:kubectl-ready" + }, + "DependsOn": [ + "ClusterCreationRoleDefaultPolicyE8BDFC7B", + "ClusterCreationRole360249B6", + "Cluster9EE0221C" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ec2.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/AmazonEKSWorkerNodePolicy" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/AmazonEKS_CNI_Policy" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/AmazonEC2ContainerRegistryReadOnly" + ] + ] + } + ] + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterNodegroupDefaultCapacityDA0920A3": { + "Type": "AWS::EKS::Nodegroup", + "Properties": { + "AmiType": "AL2_x86_64", + "ClusterName": { + "Ref": "Cluster9EE0221C" + }, + "ForceUpdateEnabled": true, + "InstanceTypes": [ + "m5.large" + ], + "NodeRole": { + "Fn::GetAtt": [ + "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "Arn" + ] + }, + "ScalingConfig": { + "DesiredSize": 2, + "MaxSize": 2, + "MinSize": 2 + }, + "Subnets": [ + { + "Ref": "UserVpcPrivateSubnet1Subnet0B127D2C" + }, + { + "Ref": "UserVpcPrivateSubnet2SubnetCD612986" + } + ] + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "ClusterAwsAuthmanifestFE51F8AE": { + "Type": "Custom::AWSCDK-EKS-KubernetesResource", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "Outputs.StackawscdkawseksKubectlProviderframeworkonEvent8897FD9BArn" + ] + }, + "Manifest": { + "Fn::Join": [ + "", + [ + "[{\"apiVersion\":\"v1\",\"kind\":\"ConfigMap\",\"metadata\":{\"name\":\"aws-auth\",\"namespace\":\"kube-system\",\"labels\":{\"aws.cdk.eks/prune-c82ececabf77e03e3590f2ebe02adba8641d1b3e76\":\"\"}},\"data\":{\"mapRoles\":\"[{\\\"rolearn\\\":\\\"", + { + "Fn::GetAtt": [ + "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "Arn" + ] + }, + "\\\",\\\"username\\\":\\\"system:node:{{EC2PrivateDNSName}}\\\",\\\"groups\\\":[\\\"system:bootstrappers\\\",\\\"system:nodes\\\"]}]\",\"mapUsers\":\"[]\",\"mapAccounts\":\"[]\"}}]" + ] + ] + }, + "ClusterName": { + "Ref": "Cluster9EE0221C" + }, + "RoleArn": { + "Fn::GetAtt": [ + "ClusterCreationRole360249B6", + "Arn" + ] + }, + "PruneLabel": "aws.cdk.eks/prune-c82ececabf77e03e3590f2ebe02adba8641d1b3e76", + "Overwrite": true + }, + "DependsOn": [ + "ClusterKubectlReadyBarrier200052AF" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.us-east-1.", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1" + }, + "/981577eda0a3545b3cb9498fcaa01e2df8bed9f2e899d77dc97d4ae30bbaf5fe.json" + ] + ] + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "referencetoStackKubectlLayer1905092CRef": { + "Ref": "KubectlLayer600207B5" + }, + "referencetoStackClusterKubectlHandlerRoleD587D45BArn": { + "Fn::GetAtt": [ + "ClusterKubectlHandlerRole94549F93", + "Arn" + ] + }, + "referencetoStackUserVpcPrivateSubnet1Subnet0618EB36Ref": { + "Ref": "UserVpcPrivateSubnet1Subnet0B127D2C" + }, + "referencetoStackUserVpcPrivateSubnet2Subnet2DFC157FRef": { + "Ref": "UserVpcPrivateSubnet2SubnetCD612986" + }, + "referencetoStackCluster979F48BAClusterSecurityGroupId": { + "Fn::GetAtt": [ + "Cluster9EE0221C", + "ClusterSecurityGroupId" + ] + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.us-east-1.", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1" + }, + "/c4a1fae4808fcf901de742a5729c10b1e68b7194311e6084f9be90506de83df6.json" + ] + ] + } + }, + "DependsOn": [ + "ClusterKubectlHandlerRoleDefaultPolicyE44083DD", + "ClusterKubectlHandlerRole94549F93", + "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "UserVpcPrivateSubnet2RouteTableAssociation1643AB72" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Conditions": { + "ClusterHasEcrPublic8EE1114E": { + "Fn::Equals": [ + { + "Ref": "AWS::Partition" + }, + "aws" + ] + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} diff --git a/src/resources/templates/gh-issues/issue-54.json b/src/resources/templates/gh-issues/issue-54.json new file mode 100644 index 0000000..ee75df1 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-54.json @@ -0,0 +1,10 @@ +{ + "Resources": { + "Bucket": { + "Type": "AWS::S3::Bucket", + "Properties": { + "AccessControl": "PublicRead" + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-55.json b/src/resources/templates/gh-issues/issue-55.json new file mode 100644 index 0000000..f4b10ea --- /dev/null +++ b/src/resources/templates/gh-issues/issue-55.json @@ -0,0 +1,24 @@ +{ + "Parameters": { + "Methods": { + "Description": "The description of the parameter", + "Type": "CommaDelimitedList", + "Default": "GET,PUT" + } + }, + "Resources": { + "Bucket": { + "Type": "AWS::S3::Bucket", + "Properties": { + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedMethods": { "Ref": "Methods" }, + "AllowedOrigins": ["*"] + } + ] + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-56.json b/src/resources/templates/gh-issues/issue-56.json new file mode 100644 index 0000000..9f13938 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-56.json @@ -0,0 +1,16 @@ +{ + "Resources": { + "WeakConsumer": { + "Type": "AWS::SNS::Topic", + "Properties": { + "TopicName": { + "Fn::GetStackOutput": { + "StackName": "Stack1", + "Region": "us-east-1", + "OutputName": "PublishOutputFnGetAttMyResourceArn8F315E6B" + } + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-57.json b/src/resources/templates/gh-issues/issue-57.json new file mode 100644 index 0000000..f057cf9 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-57.json @@ -0,0 +1,61 @@ +{ + "Resources": { + "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9": { + "Type": "AWS::CloudFront::Distribution", + "Properties": { + "DistributionConfig": { + "DefaultCacheBehavior": { + "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "Compress": true, + "TargetOriginId": "hanTheOneHundredAndTwentyEightCharacterLimitAReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForgetOriginGroup1B5CE3FE6", + "ViewerProtocolPolicy": "allow-all" + }, + "Enabled": true, + "HttpVersion": "http2", + "IPV6Enabled": true, + "OriginGroups": { + "Items": [ + { + "FailoverCriteria": { + "StatusCodes": { + "Items": [500, 502, 503, 504], + "Quantity": 4 + } + }, + "Id": "hanTheOneHundredAndTwentyEightCharacterLimitAReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForgetOriginGroup1B5CE3FE6", + "Members": { + "Items": [ + { + "OriginId": "ngerThanTheOneHundredAndTwentyEightCharacterLimitAReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForgetOrigin1D38031F9" + }, + { + "OriginId": "ngerThanTheOneHundredAndTwentyEightCharacterLimitAReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForgetOrigin2757FD149" + } + ], + "Quantity": 2 + } + } + ], + "Quantity": 1 + }, + "Origins": [ + { + "CustomOriginConfig": { + "OriginProtocolPolicy": "https-only" + }, + "DomainName": "www.example.com", + "Id": "ngerThanTheOneHundredAndTwentyEightCharacterLimitAReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForgetOrigin1D38031F9" + }, + { + "CustomOriginConfig": { + "OriginProtocolPolicy": "https-only" + }, + "DomainName": "foo.example.com", + "Id": "ngerThanTheOneHundredAndTwentyEightCharacterLimitAReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForgetOrigin2757FD149" + } + ] + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-61.json b/src/resources/templates/gh-issues/issue-61.json new file mode 100644 index 0000000..d470830 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-61.json @@ -0,0 +1,7 @@ +{ + "Resources": { + "Resource": { + "Type": "AWS::EC2::Volume" + } + } +} diff --git a/src/resources/templates/gh-issues/issue-62.json b/src/resources/templates/gh-issues/issue-62.json new file mode 100644 index 0000000..27c0409 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-62.json @@ -0,0 +1,22 @@ +{ + "Resources": { + "Canary": { + "Type": "AWS::Synthetics::Canary", + "Properties": { + "Name": "mycanary", + "ArtifactS3Location": "s3://my-bucket/path", + "ExecutionRoleArn": "arn:aws:iam::123456789012:role/my-canary-role", + "RuntimeVersion": "syn-nodejs-puppeteer-7.0", + "Schedule": { + "Expression": "rate(5 minutes)" + }, + "Code": { + "Handler": "index.handler", + "S3Bucket": "my-bucket", + "S3Key": "code/canary.zip" + }, + "ResourcesToReplicateTags": [] + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-63.json b/src/resources/templates/gh-issues/issue-63.json new file mode 100644 index 0000000..debf306 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-63.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "SomeParameter": { + "Type": "String", + "Default": { + "Fn::GetStackOutput": { + "StackName": "Stack1", + "Region": "es-norst-1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::123456789012:role/Stack1PublishGetStackOutputRole61CE6C61" + ] + ] + }, + "OutputName": "PublishOutputRefAWSAccountIdDC72A8F2" + } + } + } + }, + "Resources": { + "Topic": { + "Type": "AWS::SNS::Topic", + "Properties": { + "DisplayName": { + "Ref": "SomeParameter" + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-65.json b/src/resources/templates/gh-issues/issue-65.json new file mode 100644 index 0000000..0b5be1e --- /dev/null +++ b/src/resources/templates/gh-issues/issue-65.json @@ -0,0 +1,25 @@ +{ + "Resources": { + "MyLambda": { + "Type": "AWS::Lambda::Function", + "Properties": { + "FunctionName": "my-fn", + "Runtime": "nodejs18.x", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Code": { + "ZipFile": "exports.handler = async () => {};" + } + } + }, + "S3Permission": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": { "Ref": "MyLambda" }, + "Principal": "s3.amazonaws.com", + "SourceAccount": { "Ref": "AWS::AccountId" } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-67.json b/src/resources/templates/gh-issues/issue-67.json new file mode 100644 index 0000000..a0860bb --- /dev/null +++ b/src/resources/templates/gh-issues/issue-67.json @@ -0,0 +1,20 @@ +{ + "Resources": { + "PromAlarm": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "AlarmName": "PromQLAlarm", + "ComparisonOperator": "GreaterThanThreshold", + "EvaluationPeriods": 1, + "Threshold": 1, + "EvaluationCriteria": { + "PromQLCriteria": { + "Query": "up{job=\"my-service\"}", + "PendingPeriod": 60, + "RecoveryPeriod": 60 + } + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-68.json b/src/resources/templates/gh-issues/issue-68.json new file mode 100644 index 0000000..0b1ea91 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-68.json @@ -0,0 +1,29 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Resources": { + "MyFunc": { + "Type": "AWS::Lambda::Function", + "Properties": { + "FunctionName": "my-func", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs99.x", + "Code": { + "ZipFile": "exports.handler = async () => {};" + } + } + }, + "FutureNodeFunc": { + "Type": "AWS::Lambda::Function", + "Properties": { + "FunctionName": "future-func", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "node99.x", + "Code": { + "ZipFile": "exports.handler = async () => {};" + } + } + } + } +} diff --git a/src/resources/templates/gh-issues/issue-69.yaml b/src/resources/templates/gh-issues/issue-69.yaml new file mode 100644 index 0000000..b364330 --- /dev/null +++ b/src/resources/templates/gh-issues/issue-69.yaml @@ -0,0 +1,8 @@ +AWSTemplateFormatVersion: "2010-09-09" +Resources: + Profile: + Type: AWS::IAM::InstanceProfile + Properties: + Roles: + - arn:aws:iam::012345678901:role/SameRole + - arn:aws:iam::012345678901:role/SameRole From b9fb7c2d6c340cb785b9bb2d7d3293bc6ad9347a Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Mon, 29 Jun 2026 16:47:27 -0400 Subject: [PATCH 3/3] Add report --- scripts/report_cel_detailed.md | 467 ++++++++++++++++++++++++++++---- scripts/report_rego_detailed.md | 467 ++++++++++++++++++++++++++++---- 2 files changed, 828 insertions(+), 106 deletions(-) diff --git a/scripts/report_cel_detailed.md b/scripts/report_cel_detailed.md index 463d335..2c99380 100644 --- a/scripts/report_cel_detailed.md +++ b/scripts/report_cel_detailed.md @@ -1,10 +1,10 @@ # cloudformation-validate vs cfn-lint — Parity Report -> Generated: 2026-06-29 11:45:43 +> Generated: 2026-06-29 16:20:28 > Engine: **cel** > Detail level: **detailed** > Matching: `(rule_id, resource_id, path)` two-pass with `(rule_id, resource_id)` fallback + aliases -> Templates compared: **450** +> Templates compared: **474** ## Terminology @@ -22,54 +22,54 @@ | Metric | Value | |--------|------:| -| True Positives | 1894 | -| False Positives (engine bugs) | 0 | -| Engine Extra (correct, cfn-lint gap) | 5498 | -| False Negatives (engine misses) | 332 | -| Precision | 100.00% | -| Recall | 85.09% | -| F1 | 91.94% | -| Unique rules detected | 202 | -| Perfect templates | 343/450 | +| True Positives | 1944 | +| False Positives (engine bugs) | 9 | +| Engine Extra (correct, cfn-lint gap) | 5630 | +| False Negatives (engine misses) | 342 | +| Precision | 99.54% | +| Recall | 85.04% | +| F1 | 91.72% | +| Unique rules detected | 204 | +| Perfect templates | 361/474 | ### By Severity | Severity | TP | FP | EE | FN | Precision | Recall | |----------|---:|---:|---:|---:|----------:|-------:| -| Fatal | 390 | 0 | 63 | 108 | 100.00% | 78.31% | -| Error | 323 | 0 | 3 | 155 | 100.00% | 67.57% | -| Warning | 720 | 0 | 357 | 58 | 100.00% | 92.54% | -| Info | 461 | 0 | 5075 | 11 | 100.00% | 97.67% | +| Fatal | 402 | 7 | 65 | 113 | 98.29% | 78.06% | +| Error | 331 | 1 | 3 | 156 | 99.70% | 67.97% | +| Warning | 732 | 0 | 369 | 58 | 100.00% | 92.66% | +| Info | 479 | 1 | 5193 | 15 | 99.79% | 96.96% | ## Performance | Metric | Value | |--------|------:| -| Total wall time | 30295.8391 ms | -| Throughput | 74.76 validations/sec | -| Templates | 453 ok, 8 failed | +| Total wall time | 17498.1855 ms | +| Throughput | 137.73 validations/sec | +| Templates | 482 ok, 8 failed | | Iterations per template | 5 | -| Engine init (p99) | 40.3817 ms | -| Engine init (max) | 40.6211 ms | -| Schema init (p99) | 57.1019 ms | -| Schema init (max) | 57.5980 ms | +| Engine init (p99) | 41.2294 ms | +| Engine init (max) | 41.4986 ms | +| Schema init (p99) | 56.1686 ms | +| Schema init (max) | 56.7370 ms | ### Latency Distribution (ms) | Phase | Min | Avg | Median | P90 | P95 | P99 | Max | |-------|----:|----:|-------:|----:|----:|----:|----:| -| Model Build | 0.0022 | 0.2635 | 0.0519 | 0.7970 | 1.1184 | 2.1131 | 7.0472 | -| Schema Validate | 0.0000 | 4.0074 | 0.6733 | 9.8140 | 16.9052 | 58.7319 | 106.7786 | -| Rule Evaluation | 2.7791 | 5.9270 | 4.6263 | 9.7687 | 12.8374 | 18.9478 | 80.8927 | -| Diagnostic Finalize | 0.0009 | 0.0344 | 0.0089 | 0.1069 | 0.1489 | 0.3525 | 0.5883 | -| Engine Internal | 2.8154 | 11.0445 | 6.0978 | 24.2459 | 32.5604 | 73.7325 | 119.1475 | -| Wall Clock | 2.8157 | 11.0456 | 6.0989 | 24.2473 | 32.5614 | 73.7338 | 119.1495 | +| Model Build | 0.0021 | 0.2057 | 0.0447 | 0.6498 | 0.9074 | 1.7082 | 3.0572 | +| Schema Validate | 0.0000 | 2.5131 | 0.6050 | 6.7929 | 10.5363 | 24.7278 | 55.5633 | +| Rule Evaluation | 2.8300 | 3.7426 | 3.3170 | 4.8859 | 5.4185 | 7.8355 | 47.6609 | +| Diagnostic Finalize | 0.0005 | 0.0280 | 0.0052 | 0.0874 | 0.1257 | 0.3015 | 0.5760 | +| Engine Internal | 2.8353 | 6.5665 | 4.0268 | 12.0239 | 17.4286 | 38.2020 | 64.8742 | +| Wall Clock | 2.8357 | 6.5671 | 4.0270 | 12.0249 | 17.4292 | 38.2037 | 64.8750 | -## False Negatives — 332 missed findings across 80 rules +## False Negatives — 342 missed findings across 82 rules These are diagnostics cfn-lint expects but the engine does not report. -### F3003 — 31 missed — Required Resource properties are missing +### F3003 — 36 missed — Required Resource properties are missing - **F3003** (cfn-lint: E3003) `myInstance2` → `Properties.BlockDeviceMappings.Fn::If.2.0.Fn::If.1` L46-48 in `bad_core_conditions_yaml` > 'DeviceName' is a required property @@ -111,6 +111,16 @@ These are diagnostics cfn-lint expects but the engine does not report. > 'Groups' is a required property - **F3003** (cfn-lint: E3003) `WildcardPolicy` → `Properties` L14 in `bad_security_issues_yaml` > 'Roles' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'AvailabilityZone' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'Size' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'SnapshotId' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'AvailabilityZoneId' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'SourceVolumeId' is a required property - **F3003** (cfn-lint: E3003) `WithGetAtt` → `Properties` L35 in `good_both_forms_yaml` > 'ServiceToken' is a required property - **F3003** (cfn-lint: E3003) `WithJoin` → `Properties` L45 in `good_both_forms_yaml` @@ -657,6 +667,17 @@ These are diagnostics cfn-lint expects but the engine does not report. - **F3031** (cfn-lint: E3031) `TestRole` → `Properties.RoleName` L10 in `good_functions_sub_needed_custom_excludes_yaml` > 'TestRole-${Stage}' does not match '^[\\w+=,.@-]+$' +### I3010 — 4 missed — Resource limit + +- **I3010** `Memory` → `Properties.MemoryStrategies.0` L9-17 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/0' is approaching the limit of 1 properties +- **I3010** `Memory` → `Properties.MemoryStrategies.1` L18-26 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/1' is approaching the limit of 1 properties +- **I3010** `Memory` → `Properties.MemoryStrategies.2` L27-35 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/2' is approaching the limit of 1 properties +- **I3010** `Memory` → `Properties.MemoryStrategies.3` L36-49 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/3' is approaching the limit of 1 properties + ### W1032 — 4 missed — Validate the values that come from a Fn::Join function - **W1032** `Bucket2` → `Properties.BucketName.Fn::Join` L42 in `lsp_parameter_usage_json` @@ -756,6 +777,13 @@ These are diagnostics cfn-lint expects but the engine does not report. - **E3019** `Project2` → `Properties.Name` L188 in `bad_resources_primary_identifiers_yaml` > Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project2', 'Project1'} +### F3006 — 2 missed — Validate the CloudFormation resource type + +- **F3006** (cfn-lint: E3006) `MyFunction` → `Resources.MyFunction.Type` L3 in `lsp_test-template_yaml` + > Resource type 'AWS::Serverless::Function' does not exist in 'us-east-1' +- **F3006** (cfn-lint: E3006) `MyApi` → `Resources.MyApi.Type` L7 in `lsp_test-template_yaml` + > Resource type 'AWS::Serverless::Api' does not exist in 'us-east-1' + ### E3707 — 2 missed — Validate RDS DBInstance Engine matches DBCluster Engine - **E3707** `AuroraDB` → `Properties.Engine` L6 in `bad_aurora_with_allocated_storage_yaml` @@ -812,13 +840,6 @@ These are diagnostics cfn-lint expects but the engine does not report. - **F1029** (cfn-lint: E1029) `TestBadStateMachine2` → `Properties.DefinitionString.Fn::Join.1.5` L67 in `bad_functions_sub_needed_yaml` > Found an embedded parameter "${definition_substitution_1}" outside of an "Fn::Sub" at Resources/TestBadStateMachine2/Properties/DefinitionString/Fn::Join/1/5 -### F3006 — 2 missed — Validate the CloudFormation resource type - -- **F3006** (cfn-lint: E3006) `MyFunction` → `Resources.MyFunction.Type` L3 in `lsp_test-template_yaml` - > Resource type 'AWS::Serverless::Function' does not exist in 'us-east-1' -- **F3006** (cfn-lint: E3006) `MyApi` → `Resources.MyApi.Type` L7 in `lsp_test-template_yaml` - > Resource type 'AWS::Serverless::Api' does not exist in 'us-east-1' - ### I2530 — 2 missed — Validate that SnapStart is configured for >= Java11 runtimes - **I2530** `VmdEventsLambda` → `Properties.SnapStart.ApplyOn` L168 in `issues_sam_w_conditions_yaml` @@ -923,6 +944,11 @@ These are diagnostics cfn-lint expects but the engine does not report. - **E3700** `TestPipeline` → `Properties.Stages.1.Actions.0.ActionTypeId.Category` L34 in `bad_resources_codepipeline_stages_second_stage_yaml` > 'Source' is not one of ['Build', 'Approval', 'Deploy', 'Test', 'Invoke', 'Compute'] +### E1041 — 1 missed — Check if Ref matches destination format + +- **E1041** `DaxRef` → `Properties.SecurityGroupIds.0` L32 in `gh-issues_issue-40_yaml` + > {'Ref': 'EksCluster'} does not match destination format of 'AWS::EC2::SecurityGroup.Id' + ### E3504 — 1 missed — Check minimum 90 period is met between BackupPlan cold and delete - **E3504** `BackupPlan` → `Properties.BackupPlan.BackupPlanRule.0.Lifecycle.DeleteAfterDays` L17 in `bad_resources_backup_test_backup_plan_lifecycle_rule_yml` @@ -973,15 +999,42 @@ These are diagnostics cfn-lint expects but the engine does not report. - **E3719** `AuroraDB` → `Properties.BackupRetentionPeriod` L9 in `good_aurora_dbinstance_yaml` > 'BackupRetentionPeriod' is not allowed when 'DBClusterIdentifier' is specified. Set backup retention period on the DB cluster instead. -## False Positives — 0 extra findings across 0 rules +## False Positives — 9 extra findings across 3 rules These are diagnostics the engine reports but cfn-lint does not expect (potential bugs). -## Engine Extra — 5498 correct findings across 36 rules +### F3004 — 7 extra — Resource dependencies are not circular + +- **F3004** `ClusterKubectlHandlerRole94549F93` → `Resources/ClusterKubectlHandlerRole94549F93` L472 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterKubectlHandlerRole94549F93. Circular dependency with [ClusterKubectlReadyBarrier200052AF] +- **F3004** `ClusterControlPlaneSecurityGroupD274242C` → `Resources/ClusterControlPlaneSecurityGroupD274242C` L593 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterControlPlaneSecurityGroupD274242C. Circular dependency with [ClusterKubectlReadyBarrier200052AF] +- **F3004** `ClusterCreationRole360249B6` → `Resources/ClusterCreationRole360249B6` L614 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterCreationRole360249B6. Circular dependency with [ClusterKubectlHandlerRole94549F93] +- **F3004** `ClusterCreationRole360249B6` → `Resources/ClusterCreationRole360249B6` L614 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterCreationRole360249B6. Circular dependency with [ClusterKubectlReadyBarrier200052AF] +- **F3004** `Cluster9EE0221C` → `Resources/Cluster9EE0221C` L793 in `gh-issues_issue-53_json` + > Circular Dependencies for resource Cluster9EE0221C. Circular dependency with [ClusterControlPlaneSecurityGroupD274242C] +- **F3004** `ClusterKubectlReadyBarrier200052AF` → `Resources/ClusterKubectlReadyBarrier200052AF` L880 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterCreationRole360249B6] +- **F3004** `ClusterKubectlReadyBarrier200052AF` → `Resources/ClusterKubectlReadyBarrier200052AF` L880 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterCreationRoleDefaultPolicyE8BDFC7B] + +### I3013 — 1 extra — Check resources with auto expiring content have explicit retention period + +- **I3013** `Canary` (AWS::Synthetics::Canary) → `Properties.SuccessRetentionPeriod` L3 in `gh-issues_issue-62_json` + > 'SuccessRetentionPeriod' is a required property (The default retention period will delete the data after a pre-defined time. Set an explicit values to avoid data loss on resource) + +### E3702 — 1 extra — Validate the number of input and output artifacts in a CodePipeline + +- **E3702** `Pipeline` (AWS::CodePipeline::Pipeline) L3 in `gh-issues_issue-44_json` + > Action 'Deploy' (category 'Deploy') has 0 input artifacts, expected at least 1 + +## Engine Extra — 5630 correct findings across 36 rules These are correct diagnostics the engine reports that cfn-lint does not cover. -### I9001 — 3606 findings +### I9001 — 3686 findings - **I9001** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L7 in `bad_E1150_network_interfaces_groupset_multi_yaml` > Property 'ImageId' is create-only; updating it will cause resource replacement @@ -997,6 +1050,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Property 'BucketName' is create-only; updating it will cause resource replacement - **I9001** `Bucket` (AWS::S3::Bucket) → `Properties.BucketName` L9 in `bad_F2002_ssm_parameter_type_invalid_yaml` > Property 'BucketName' is create-only; updating it will cause resource replacement +- **I9001** `Bucket` (AWS::S3::Bucket) → `Properties.BucketName` L25 in `bad_W1028_allowedvalues_excludes_literal` + > Property 'BucketName' is create-only; updating it will cause resource replacement - **I9001** `Host` (AWS::EC2::Host) → `Properties.AvailabilityZone` L15 in `bad_W3010_full_coverage_yaml` > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement - **I9001** `Host` (AWS::EC2::Host) → `Properties.InstanceType` L15 in `bad_W3010_full_coverage_yaml` @@ -6117,6 +6172,164 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Property 'ResourceId' is create-only; updating it will cause resource replacement - **I9001** `StepFuncApiordersGET0318ABB9` (AWS::ApiGateway::Method) → `Properties.RestApiId` L230 in `cdk_stepfunction-external-definition--StepfunctionExternalDefinitionStack.template_json` > Property 'RestApiId' is create-only; updating it will cause resource replacement +- **I9001** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L13 in `gh-issues_issue-34_json` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `Instance2` (AWS::EC2::Instance) → `Properties.ImageId` L20 in `gh-issues_issue-34_json` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `MyLaunchConfig` (AWS::AutoScaling::LaunchConfiguration) → `Properties.ImageId` L4 in `gh-issues_issue-37_yaml` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `MyLaunchConfig` (AWS::AutoScaling::LaunchConfiguration) → `Properties.InstanceType` L4 in `gh-issues_issue-37_yaml` + > Property 'InstanceType' is create-only; updating it will cause resource replacement +- **I9001** `Memory` (AWS::BedrockAgentCore::Memory) → `Properties.Name` L3 in `gh-issues_issue-38_json` + > Property 'Name' is create-only; updating it will cause resource replacement +- **I9001** `EksCluster` (AWS::EKS::Cluster) → `Properties.Name` L3 in `gh-issues_issue-40_yaml` + > Property 'Name' is create-only; updating it will cause resource replacement +- **I9001** `EksCluster` (AWS::EKS::Cluster) → `Properties.RoleArn` L3 in `gh-issues_issue-40_yaml` + > Property 'RoleArn' is create-only; updating it will cause resource replacement +- **I9001** `DaxConcrete` (AWS::DAX::Cluster) → `Properties.IAMRoleARN` L14 in `gh-issues_issue-40_yaml` + > Property 'IAMRoleARN' is create-only; updating it will cause resource replacement +- **I9001** `DaxConcrete` (AWS::DAX::Cluster) → `Properties.NodeType` L14 in `gh-issues_issue-40_yaml` + > Property 'NodeType' is create-only; updating it will cause resource replacement +- **I9001** `DaxRef` (AWS::DAX::Cluster) → `Properties.IAMRoleARN` L26 in `gh-issues_issue-40_yaml` + > Property 'IAMRoleARN' is create-only; updating it will cause resource replacement +- **I9001** `DaxRef` (AWS::DAX::Cluster) → `Properties.NodeType` L26 in `gh-issues_issue-40_yaml` + > Property 'NodeType' is create-only; updating it will cause resource replacement +- **I9001** `MyFunction` (AWS::Lambda::Function) → `Properties.FunctionName` L3 in `gh-issues_issue-41_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `TaskDef` (AWS::ECS::TaskDefinition) → `Properties.ContainerDefinitions` L4 in `gh-issues_issue-42_yaml` + > Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement +- **I9001** `TaskDef` (AWS::ECS::TaskDefinition) → `Properties.Family` L4 in `gh-issues_issue-42_yaml` + > Property 'Family' is create-only; updating it will cause resource replacement +- **I9001** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.Port` L14 in `gh-issues_issue-42_yaml` + > Property 'Port' is create-only; updating it will cause resource replacement +- **I9001** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.Protocol` L14 in `gh-issues_issue-42_yaml` + > Property 'Protocol' is create-only; updating it will cause resource replacement +- **I9001** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.VpcId` L14 in `gh-issues_issue-42_yaml` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `Service` (AWS::ECS::Service) → `Properties.Cluster` L21 in `gh-issues_issue-42_yaml` + > Property 'Cluster' is create-only; updating it will cause resource replacement +- **I9001** `MyFunction` (AWS::Lambda::Function) → `Properties.FunctionName` L3 in `gh-issues_issue-47_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `DocDbInstance` (AWS::DocDB::DBInstance) → `Properties.DBClusterIdentifier` L9 in `gh-issues_issue-49_yaml` + > Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement +- **I9001** `Ec2Instance` (AWS::EC2::Instance) → `Properties.ImageId` L14 in `gh-issues_issue-49_yaml` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcFAC913E5` (AWS::EC2::VPC) → `Properties.CidrBlock` L3 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1Subnet7A3A7B5D` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L18 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1Subnet7A3A7B5D` (AWS::EC2::Subnet) → `Properties.CidrBlock` L18 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1Subnet7A3A7B5D` (AWS::EC2::Subnet) → `Properties.VpcId` L18 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1RouteTable5F0A6273` (AWS::EC2::RouteTable) → `Properties.VpcId` L54 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1RouteTableAssociation2AB88B08` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L72 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1RouteTableAssociation2AB88B08` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L72 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1DefaultRoute321532E0` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L83 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1DefaultRoute321532E0` (AWS::EC2::Route) → `Properties.RouteTableId` L83 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1NATGateway7AFB18E6` (AWS::EC2::NatGateway) → `Properties.AllocationId` L114 in `gh-issues_issue-53_json` + > Property 'AllocationId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1NATGateway7AFB18E6` (AWS::EC2::NatGateway) → `Properties.SubnetId` L114 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2Subnet42A6D42E` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L142 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2Subnet42A6D42E` (AWS::EC2::Subnet) → `Properties.CidrBlock` L142 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2Subnet42A6D42E` (AWS::EC2::Subnet) → `Properties.VpcId` L142 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2RouteTableEC6A2C2A` (AWS::EC2::RouteTable) → `Properties.VpcId` L178 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2RouteTableAssociationF7485C52` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L196 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2RouteTableAssociationF7485C52` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L196 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2DefaultRouteE14C718B` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L207 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2DefaultRouteE14C718B` (AWS::EC2::Route) → `Properties.RouteTableId` L207 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2NATGateway5AD59565` (AWS::EC2::NatGateway) → `Properties.AllocationId` L238 in `gh-issues_issue-53_json` + > Property 'AllocationId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2NATGateway5AD59565` (AWS::EC2::NatGateway) → `Properties.SubnetId` L238 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1Subnet0B127D2C` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L266 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1Subnet0B127D2C` (AWS::EC2::Subnet) → `Properties.CidrBlock` L266 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1Subnet0B127D2C` (AWS::EC2::Subnet) → `Properties.VpcId` L266 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1RouteTable886260DA` (AWS::EC2::RouteTable) → `Properties.VpcId` L302 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L320 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L320 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1DefaultRouteB00E5F42` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L331 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1DefaultRouteB00E5F42` (AWS::EC2::Route) → `Properties.RouteTableId` L331 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2SubnetCD612986` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L343 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2SubnetCD612986` (AWS::EC2::Subnet) → `Properties.CidrBlock` L343 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2SubnetCD612986` (AWS::EC2::Subnet) → `Properties.VpcId` L343 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2RouteTable1EDE83AC` (AWS::EC2::RouteTable) → `Properties.VpcId` L379 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2RouteTableAssociation1643AB72` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L397 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2RouteTableAssociation1643AB72` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L397 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2DefaultRoute99CA0CB9` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L408 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2DefaultRoute99CA0CB9` (AWS::EC2::Route) → `Properties.RouteTableId` L408 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcVPCGWEFD8AF3B` (AWS::EC2::VPCGatewayAttachment) → `Properties.VpcId` L431 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `KubectlLayer600207B5` (AWS::Lambda::LayerVersion) → `Properties.Content` L459 in `gh-issues_issue-53_json` + > Property 'Content' is create-only; updating it will cause resource replacement +- **I9001** `KubectlLayer600207B5` (AWS::Lambda::LayerVersion) → `Properties.Description` L459 in `gh-issues_issue-53_json` + > Property 'Description' is create-only; updating it will cause resource replacement +- **I9001** `KubectlLayer600207B5` (AWS::Lambda::LayerVersion) → `Properties.LicenseInfo` L459 in `gh-issues_issue-53_json` + > Property 'LicenseInfo' is create-only; updating it will cause resource replacement +- **I9001** `ClusterControlPlaneSecurityGroupD274242C` (AWS::EC2::SecurityGroup) → `Properties.GroupDescription` L593 in `gh-issues_issue-53_json` + > Property 'GroupDescription' is create-only; updating it will cause resource replacement +- **I9001** `ClusterControlPlaneSecurityGroupD274242C` (AWS::EC2::SecurityGroup) → `Properties.VpcId` L593 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.AmiType` L954 in `gh-issues_issue-53_json` + > Property 'AmiType' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.ClusterName` L954 in `gh-issues_issue-53_json` + > Property 'ClusterName' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.InstanceTypes` L954 in `gh-issues_issue-53_json` + > Property 'InstanceTypes' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.NodeRole` L954 in `gh-issues_issue-53_json` + > Property 'NodeRole' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.Subnets` L954 in `gh-issues_issue-53_json` + > Property 'Subnets' is create-only; updating it will cause resource replacement +- **I9001** `Canary` (AWS::Synthetics::Canary) → `Properties.Name` L3 in `gh-issues_issue-62_json` + > Property 'Name' is create-only; updating it will cause resource replacement +- **I9001** `MyLambda` (AWS::Lambda::Function) → `Properties.FunctionName` L3 in `gh-issues_issue-65_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.Action` L15 in `gh-issues_issue-65_json` + > Property 'Action' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.FunctionName` L15 in `gh-issues_issue-65_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.Principal` L15 in `gh-issues_issue-65_json` + > Property 'Principal' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.SourceAccount` L15 in `gh-issues_issue-65_json` + > Property 'SourceAccount' is create-only; updating it will cause resource replacement +- **I9001** `PromAlarm` (AWS::CloudWatch::Alarm) → `Properties.AlarmName` L3 in `gh-issues_issue-67_json` + > Property 'AlarmName' is create-only; updating it will cause resource replacement +- **I9001** `MyFunc` (AWS::Lambda::Function) → `Properties.FunctionName` L4 in `gh-issues_issue-68_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `FutureNodeFunc` (AWS::Lambda::Function) → `Properties.FunctionName` L16 in `gh-issues_issue-68_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `Bucket` (AWS::S3::Bucket) → `Properties.BucketName` L16 in `good_E9001_aws_cdk_metadata` + > Property 'BucketName' is create-only; updating it will cause resource replacement - **I9001** `Subnet` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L14 in `good_W3010_getazs_not_flagged` > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement - **I9001** `Subnet` (AWS::EC2::Subnet) → `Properties.CidrBlock` L14 in `good_W3010_getazs_not_flagged` @@ -8196,7 +8409,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **I9001** `S3VPCEndpoint` (AWS::EC2::VPCEndpoint) → `Properties.VpcId` L2113 in `quickstart_vpc_json` > Property 'VpcId' is create-only; updating it will cause resource replacement -### I9040 — 1467 findings +### I9040 — 1505 findings - **I9040** `Instance` (AWS::EC2::Instance) → `Properties.Tags` L7 in `bad_E1150_network_interfaces_groupset_multi_yaml` > Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured @@ -8210,6 +8423,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resource 'D' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L9 in `bad_F2002_ssm_parameter_type_invalid_yaml` > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L25 in `bad_W1028_allowedvalues_excludes_literal` + > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `Asg` (AWS::AutoScaling::AutoScalingGroup) → `Properties.Tags` L6 in `bad_W3010_full_coverage_yaml` > Resource 'Asg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured - **I9040** `Host` (AWS::EC2::Host) → `Properties.Tags` L15 in `bad_W3010_full_coverage_yaml` @@ -10184,6 +10399,78 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured - **I9040** `Rule4C995B7F` (AWS::Events::Rule) → `Properties.Tags` L315 in `cdk_stepfunctions-job-poller--aws-stepfunctions-integ.template_json` > Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured +- **I9040** `Instance` (AWS::EC2::Instance) → `Properties.Tags` L13 in `gh-issues_issue-34_json` + > Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured +- **I9040** `Instance2` (AWS::EC2::Instance) → `Properties.Tags` L20 in `gh-issues_issue-34_json` + > Resource 'Instance2' of type 'AWS::EC2::Instance' supports Tags but none are configured +- **I9040** `MyAsg` (AWS::AutoScaling::AutoScalingGroup) → `Properties.Tags` L9 in `gh-issues_issue-37_yaml` + > Resource 'MyAsg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured +- **I9040** `Memory` (AWS::BedrockAgentCore::Memory) → `Properties.Tags` L3 in `gh-issues_issue-38_json` + > Resource 'Memory' of type 'AWS::BedrockAgentCore::Memory' supports Tags but none are configured +- **I9040** `EksCluster` (AWS::EKS::Cluster) → `Properties.Tags` L3 in `gh-issues_issue-40_yaml` + > Resource 'EksCluster' of type 'AWS::EKS::Cluster' supports Tags but none are configured +- **I9040** `DaxConcrete` (AWS::DAX::Cluster) → `Properties.Tags` L14 in `gh-issues_issue-40_yaml` + > Resource 'DaxConcrete' of type 'AWS::DAX::Cluster' supports Tags but none are configured +- **I9040** `DaxRef` (AWS::DAX::Cluster) → `Properties.Tags` L26 in `gh-issues_issue-40_yaml` + > Resource 'DaxRef' of type 'AWS::DAX::Cluster' supports Tags but none are configured +- **I9040** `MyFunction` (AWS::Lambda::Function) → `Properties.Tags` L3 in `gh-issues_issue-41_json` + > Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `TaskDef` (AWS::ECS::TaskDefinition) → `Properties.Tags` L4 in `gh-issues_issue-42_yaml` + > Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured +- **I9040** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.Tags` L14 in `gh-issues_issue-42_yaml` + > Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured +- **I9040** `Service` (AWS::ECS::Service) → `Properties.Tags` L21 in `gh-issues_issue-42_yaml` + > Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured +- **I9040** `Pipeline` (AWS::CodePipeline::Pipeline) → `Properties.Tags` L3 in `gh-issues_issue-44_json` + > Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured +- **I9040** `PipelineRole` (AWS::IAM::Role) → `Properties.Tags` L47 in `gh-issues_issue-44_json` + > Resource 'PipelineRole' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `MyFunction` (AWS::Lambda::Function) → `Properties.Tags` L3 in `gh-issues_issue-47_json` + > Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `EsDomain` (AWS::Elasticsearch::Domain) → `Properties.Tags` L3 in `gh-issues_issue-49_yaml` + > Resource 'EsDomain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured +- **I9040** `DocDbInstance` (AWS::DocDB::DBInstance) → `Properties.Tags` L9 in `gh-issues_issue-49_yaml` + > Resource 'DocDbInstance' of type 'AWS::DocDB::DBInstance' supports Tags but none are configured +- **I9040** `Ec2Instance` (AWS::EC2::Instance) → `Properties.Tags` L14 in `gh-issues_issue-49_yaml` + > Resource 'Ec2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured +- **I9040** `UserRoleB7C3739B` (AWS::IAM::Role) → `Properties.Tags` L442 in `gh-issues_issue-53_json` + > Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterKubectlHandlerRole94549F93` (AWS::IAM::Role) → `Properties.Tags` L472 in `gh-issues_issue-53_json` + > Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterControlPlaneSecurityGroupD274242C` (AWS::EC2::SecurityGroup) → `Properties.Tags` L593 in `gh-issues_issue-53_json` + > Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured +- **I9040** `ClusterCreationRole360249B6` (AWS::IAM::Role) → `Properties.Tags` L614 in `gh-issues_issue-53_json` + > Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterKubectlReadyBarrier200052AF` (AWS::SSM::Parameter) → `Properties.Tags` L880 in `gh-issues_issue-53_json` + > Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured +- **I9040** `ClusterNodegroupDefaultCapacityNodeGroupRole55953B04` (AWS::IAM::Role) → `Properties.Tags` L894 in `gh-issues_issue-53_json` + > Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.Tags` L954 in `gh-issues_issue-53_json` + > Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured +- **I9040** `awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454` (AWS::CloudFormation::Stack) → `Properties.Tags` L1033 in `gh-issues_issue-53_json` + > Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured +- **I9040** `awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B` (AWS::CloudFormation::Stack) → `Properties.Tags` L1056 in `gh-issues_issue-53_json` + > Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured +- **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L3 in `gh-issues_issue-54_json` + > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `Resource` (AWS::EC2::Volume) → `Properties.Tags` L3 in `gh-issues_issue-61_json` + > Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured +- **I9040** `Canary` (AWS::Synthetics::Canary) → `Properties.Tags` L3 in `gh-issues_issue-62_json` + > Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured +- **I9040** `Topic` (AWS::SNS::Topic) → `Properties.Tags` L27 in `gh-issues_issue-63_json` + > Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured +- **I9040** `MyLambda` (AWS::Lambda::Function) → `Properties.Tags` L3 in `gh-issues_issue-65_json` + > Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `PromAlarm` (AWS::CloudWatch::Alarm) → `Properties.Tags` L3 in `gh-issues_issue-67_json` + > Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured +- **I9040** `MyFunc` (AWS::Lambda::Function) → `Properties.Tags` L4 in `gh-issues_issue-68_json` + > Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `FutureNodeFunc` (AWS::Lambda::Function) → `Properties.Tags` L16 in `gh-issues_issue-68_json` + > Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L16 in `good_E9001_aws_cdk_metadata` + > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `KubectlHandlerRole` (AWS::IAM::Role) → `Properties.Tags` L19 in `good_W1028_pseudo_param_branches_reachable` + > Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured - **I9040** `Elb` (AWS::ElasticLoadBalancing::LoadBalancer) → `Properties.Tags` L6 in `good_W3010_getazs_not_flagged` > Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured - **I9040** `Subnet` (AWS::EC2::Subnet) → `Properties.Tags` L14 in `good_W3010_getazs_not_flagged` @@ -10870,6 +11157,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resource 'Bucket6' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `Bucket7` (AWS::S3::Bucket) → `Properties.Tags` L62 in `lsp_parameter_usage_yaml` > Resource 'Bucket7' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `MyS3Bucket` (AWS::S3::Bucket) → `Properties.Tags` L4 in `lsp_simple` + > Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `MyFunction` (AWS::Serverless::Function) → `Properties.Tags` L3 in `lsp_test-template_yaml` > Resource 'MyFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured - **I9040** `MyApi` (AWS::Serverless::Api) → `Properties.Tags` L7 in `lsp_test-template_yaml` @@ -11454,7 +11743,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9003** `NATInstanceSecurityGroup` (AWS::EC2::SecurityGroup) → `Properties.SecurityGroupIngress.0.ToPort` L2093 in `quickstart_vpc_json` > '65535' is not of type 'integer' — automatically coerced (string → integer) -### W9013 — 51 findings +### W9013 — 60 findings - **W9013** `Pipeline` (AWS::CodePipeline::Pipeline) L4 in `bad_codepipeline_bad_artifact_counts_yaml` > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter @@ -11520,6 +11809,24 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter - **W9013** `UrlShortenerApiDomain85D0CE65` (AWS::ApiGateway::DomainName) L490 in `cdk_py-url-shortener--urlshort-app.template_json` > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `EksCluster` (AWS::EKS::Cluster) L3 in `gh-issues_issue-40_yaml` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `DaxConcrete` (AWS::DAX::Cluster) L14 in `gh-issues_issue-40_yaml` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `DaxRef` (AWS::DAX::Cluster) L26 in `gh-issues_issue-40_yaml` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyFunction` (AWS::Lambda::Function) L3 in `gh-issues_issue-41_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyFunction` (AWS::Lambda::Function) L3 in `gh-issues_issue-47_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `Canary` (AWS::Synthetics::Canary) L3 in `gh-issues_issue-62_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyLambda` (AWS::Lambda::Function) L3 in `gh-issues_issue-65_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyFunc` (AWS::Lambda::Function) L4 in `gh-issues_issue-68_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `FutureNodeFunc` (AWS::Lambda::Function) L16 in `gh-issues_issue-68_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter - **W9013** `Pipeline` (AWS::CodePipeline::Pipeline) L4 in `good_codepipeline_artifact_counts` > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter - **W9013** `TestGoodStateMachine1` (AWS::StepFunctions::StateMachine) L138 in `good_functions_sub_needed_yaml` @@ -11638,7 +11945,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9008** `Database` (AWS::RDS::DBInstance) L92 in `lsp_condition-usage_yaml` > RDS instance should have StorageEncrypted set to true -### W9010 — 30 findings +### W9010 — 31 findings - **W9010** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L7 in `bad_E1150_network_interfaces_groupset_multi_yaml` > Hardcoded AMI ID — use a parameter or mapping for portability @@ -11668,6 +11975,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Hardcoded AMI ID — use a parameter or mapping for portability - **W9010** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L4 in `bad_schema_format_violation_yaml` > Hardcoded AMI ID — use a parameter or mapping for portability +- **W9010** `Ec2Instance` (AWS::EC2::Instance) → `Properties.ImageId` L14 in `gh-issues_issue-49_yaml` + > Hardcoded AMI ID — use a parameter or mapping for portability - **W9010** `myInstance` (AWS::EC2::Instance) → `Properties.ImageId` L26 in `good_conditions` > Hardcoded AMI ID — use a parameter or mapping for portability - **W9010** `myInstance` (AWS::EC2::Instance) → `Properties.ImageId` L26 in `good_conditions_yaml` @@ -11701,7 +12010,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9010** `AnsibleConfigServer` (AWS::EC2::Instance) → `Properties.ImageId` L280 in `quickstart_openshift_yaml` > Hardcoded AMI ID — use a parameter or mapping for portability -### F0001 — 21 findings +### F0001 — 22 findings - **F0001** L24 in `bad_conditions_and_yaml` > Resources section must exist and be non-empty @@ -11729,6 +12038,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resources section must exist and be non-empty - **F0001** L5 in `bad_templates_base_yaml` > Resources section must exist and be non-empty +- **F0001** L12 in `good_core_config_cfn_lint` + > Resources section must exist and be non-empty - **F0001** L9 in `good_core_config_only_i1002` > Resources section must exist and be non-empty - **F0001** L9 in `good_core_config_only_i1003` @@ -11746,7 +12057,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **F0001** L22 in `integration_metdata_yaml` > Resources section must exist and be non-empty -### W9002 — 19 findings +### W9002 — 21 findings - **W9002** `Pipeline` (AWS::CodePipeline::Pipeline) → `Properties.RoleArn` L4 in `bad_codepipeline_bad_artifact_counts_yaml` > Property 'RoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead @@ -11776,6 +12087,10 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Property 'S3BucketArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead - **W9002** `UrlShortenerApiDomain85D0CE65` (AWS::ApiGateway::DomainName) → `Properties.RegionalCertificateArn` L490 in `cdk_py-url-shortener--urlshort-app.template_json` > Property 'RegionalCertificateArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead +- **W9002** `EksCluster` (AWS::EKS::Cluster) → `Properties.RoleArn` L3 in `gh-issues_issue-40_yaml` + > Property 'RoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead +- **W9002** `Canary` (AWS::Synthetics::Canary) → `Properties.ExecutionRoleArn` L3 in `gh-issues_issue-62_json` + > Property 'ExecutionRoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead - **W9002** `Pipeline` (AWS::CodePipeline::Pipeline) → `Properties.RoleArn` L4 in `good_codepipeline_artifact_counts` > Property 'RoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead - **W9002** `TestGoodStateMachine1` (AWS::StepFunctions::StateMachine) → `Properties.RoleArn` L138 in `good_functions_sub_needed_yaml` @@ -11857,7 +12172,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9009** `CloudFront2` (AWS::CloudFront::Distribution) → `Properties.DistributionConfig` L41 in `integration_ref-no-value_yaml` > Property 'DistributionConfig' is deprecated -### F3003 — 8 findings — Required Resource properties are missing +### F3003 — 9 findings — Required Resource properties are missing - **F3003** `BadListener` (AWS::ElasticLoadBalancingV2::Listener) → `Properties` L20 in `bad_cross_resource_task10_yaml` > 'Certificates' is a required property (from extension) @@ -11873,6 +12188,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > 'OwnershipControls' is a required property (from extension) - **F3003** `DataTable` (AWS::DynamoDB::Table) → `Properties` L72 in `cdk_DemoStack.template_json` > 'ProvisionedThroughput' is a required property (from extension) +- **F3003** `Bucket` (AWS::S3::Bucket) → `Properties` L5 in `gh-issues_issue-54_json` + > 'OwnershipControls' is a required property (from extension) - **F3003** `rArchiveLogsBucket` (AWS::S3::Bucket) → `Properties` L44 in `quickstart_nist_logging_yaml` > 'OwnershipControls' is a required property (from extension) @@ -12085,7 +12402,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **F8610** in `lsp_comprehensive_yaml` > Rule 'ValidateParameterCombinations' Assertions[1] Assert must be a condition function (object), not array -## Per-Template Breakdown — 107 templates with mismatches +## Per-Template Breakdown — 113 templates with mismatches ### `bad_resources_iam_iam_policy_yaml` — 18 mismatches (5 TP, 0 FP, 5 EE, 18 FN) @@ -12136,6 +12453,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `F3003` ×7 - EE: `I9040` ×2, `I9001` +### `gh-issues_issue-53_json` — 7 mismatches (18 TP, 7 FP, 57 EE, 0 FN) + +- FP: `F3004` ×7 +- EE: `I9001` ×48, `I9040` ×9 + ### `good_functions_sub_needed_custom_excludes_yaml` — 7 mismatches (2 TP, 0 FP, 2 EE, 7 FN) - FN: `E3530` ×6, `F3031` @@ -12205,6 +12527,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `E3026` ×5 - EE: `I9001` ×11, `I9040` ×7 +### `gh-issues_issue-61_json` — 5 mismatches (3 TP, 0 FP, 1 EE, 5 FN) + +- FN: `F3003` ×5 +- EE: `I9040` + ### `lsp_constants_json` — 5 mismatches (1 TP, 0 FP, 3 EE, 5 FN) - FN: `F1018` ×2, `F1020` ×2, `E3024` @@ -12225,6 +12552,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `E3513` ×4 - EE: `I9040` ×2 +### `gh-issues_issue-38_json` — 4 mismatches (0 TP, 0 FP, 2 EE, 4 FN) + +- FN: `I3010` ×4 +- EE: `I9001`, `I9040` + ### `good_transform_applications_location_yaml` — 4 mismatches (0 TP, 0 FP, 2 EE, 4 FN) - FN: `I3011` ×4 @@ -12573,6 +12905,21 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `W3691` - EE: `I9001` ×6, `I9040` ×4, `W9007`, `W9008` +### `gh-issues_issue-40_yaml` — 1 mismatches (1 TP, 0 FP, 13 EE, 1 FN) + +- FN: `E1041` +- EE: `I9001` ×6, `W9013` ×3, `I9040` ×3, `W9002` + +### `gh-issues_issue-44_json` — 1 mismatches (1 TP, 1 FP, 2 EE, 0 FN) + +- FP: `E3702` +- EE: `I9040` ×2 + +### `gh-issues_issue-62_json` — 1 mismatches (2 TP, 1 FP, 4 EE, 0 FN) + +- FP: `I3013` +- EE: `W9002`, `W9013`, `I9001`, `I9040` + ### `good_custom_is-not-defined_yaml` — 1 mismatches (8 TP, 0 FP, 6 EE, 1 FN) - FN: `E9004` @@ -12615,7 +12962,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. ## Coverage Gaps -16 cfn-lint templates with no engine report: +27 cfn-lint templates with no engine report: - `bad_core_config_invalid_json_json` (1 expected diagnostics) - `bad_core_config_invalid_yaml_yaml` (1 expected diagnostics) @@ -12624,6 +12971,17 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - `bad_json_parse_json` (1 expected diagnostics) - `bad_string_yaml` (1 expected diagnostics) - `bad_template_yaml` (1 expected diagnostics) +- `gh-issues_issue-35` (0 expected diagnostics) +- `gh-issues_issue-36` (0 expected diagnostics) +- `gh-issues_issue-39` (0 expected diagnostics) +- `gh-issues_issue-45` (0 expected diagnostics) +- `gh-issues_issue-46` (0 expected diagnostics) +- `gh-issues_issue-48` (0 expected diagnostics) +- `gh-issues_issue-50` (0 expected diagnostics) +- `gh-issues_issue-52` (0 expected diagnostics) +- `gh-issues_issue-55` (0 expected diagnostics) +- `gh-issues_issue-56` (0 expected diagnostics) +- `gh-issues_issue-57` (0 expected diagnostics) - `good_core_config_cfn_lint.json` (0 expected diagnostics) - `good_core_config_cfn_lint.yaml` (0 expected diagnostics) - `good_functions_get_stack_output` (0 expected diagnostics) @@ -12640,14 +12998,17 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. | Cause | Count | % of FN | Rules | |-------|------:|--------:|-------| -| Other | 126 | 37.95% | E0001, E0002, E2001, E2529, E5001, E6001, E7001, E9004, F0000, F0013, F0014, F0018, F1018, F1020, F1029, F2015, F3003, F3006, F3012, F3014, F3016, F3031, F3037, F6101 | -| Resource property validation | 96 | 28.92% | E3001, E3016, E3019, E3022, E3023, E3024, E3025, E3026, E3039, E3043, E3045, E3048, E3065, E3504, E3510, E3513, E3530, E3639, E3671, E3673, E3678, E3682, E3700, E3701, E3707, E3712, E3719 | -| Warning-level checks | 58 | 17.47% | W1001, W1028, W1030, W1031, W1032, W1034, W1036, W1054, W2001, W2002, W3037, W3045, W3691, W3698, W8001 | -| Intrinsic function validation | 41 | 12.35% | E1001, E1005, E1011, E1016, E1017, E1021, E1032, E1150, E1152, E1161, E1701 | -| Informational checks | 11 | 3.31% | I2530, I3011, I3510 | +| Other | 131 | 38.30% | E0001, E0002, E2001, E2529, E5001, E6001, E7001, E9004, F0000, F0013, F0014, F0018, F1018, F1020, F1029, F2015, F3003, F3006, F3012, F3014, F3016, F3031, F3037, F6101 | +| Resource property validation | 96 | 28.07% | E3001, E3016, E3019, E3022, E3023, E3024, E3025, E3026, E3039, E3043, E3045, E3048, E3065, E3504, E3510, E3513, E3530, E3639, E3671, E3673, E3678, E3682, E3700, E3701, E3707, E3712, E3719 | +| Warning-level checks | 58 | 16.96% | W1001, W1028, W1030, W1031, W1032, W1034, W1036, W1054, W2001, W2002, W3037, W3045, W3691, W3698, W8001 | +| Intrinsic function validation | 42 | 12.28% | E1001, E1005, E1011, E1016, E1017, E1021, E1032, E1041, E1150, E1152, E1161, E1701 | +| Informational checks | 15 | 4.39% | I2530, I3010, I3011, I3510 | ### False Positive Root Causes | Cause | Count | % of FP | Rules | |-------|------:|--------:|-------| +| Other | 7 | 77.78% | F3004 | +| Extra informational findings | 1 | 11.11% | I3013 | +| Over-reporting property/intrinsic errors | 1 | 11.11% | E3702 | diff --git a/scripts/report_rego_detailed.md b/scripts/report_rego_detailed.md index ba6399c..a6fb6b0 100644 --- a/scripts/report_rego_detailed.md +++ b/scripts/report_rego_detailed.md @@ -1,10 +1,10 @@ # cloudformation-validate vs cfn-lint — Parity Report -> Generated: 2026-06-29 11:45:06 +> Generated: 2026-06-29 16:20:06 > Engine: **rego** > Detail level: **detailed** > Matching: `(rule_id, resource_id, path)` two-pass with `(rule_id, resource_id)` fallback + aliases -> Templates compared: **450** +> Templates compared: **474** ## Terminology @@ -22,54 +22,54 @@ | Metric | Value | |--------|------:| -| True Positives | 1894 | -| False Positives (engine bugs) | 0 | -| Engine Extra (correct, cfn-lint gap) | 5498 | -| False Negatives (engine misses) | 332 | -| Precision | 100.00% | -| Recall | 85.09% | -| F1 | 91.94% | -| Unique rules detected | 202 | -| Perfect templates | 343/450 | +| True Positives | 1944 | +| False Positives (engine bugs) | 9 | +| Engine Extra (correct, cfn-lint gap) | 5630 | +| False Negatives (engine misses) | 342 | +| Precision | 99.54% | +| Recall | 85.04% | +| F1 | 91.72% | +| Unique rules detected | 204 | +| Perfect templates | 361/474 | ### By Severity | Severity | TP | FP | EE | FN | Precision | Recall | |----------|---:|---:|---:|---:|----------:|-------:| -| Fatal | 390 | 0 | 63 | 108 | 100.00% | 78.31% | -| Error | 323 | 0 | 3 | 155 | 100.00% | 67.57% | -| Warning | 720 | 0 | 357 | 58 | 100.00% | 92.54% | -| Info | 461 | 0 | 5075 | 11 | 100.00% | 97.67% | +| Fatal | 402 | 7 | 65 | 113 | 98.29% | 78.06% | +| Error | 331 | 1 | 3 | 156 | 99.70% | 67.97% | +| Warning | 732 | 0 | 369 | 58 | 100.00% | 92.66% | +| Info | 479 | 1 | 5193 | 15 | 99.79% | 96.96% | ## Performance | Metric | Value | |--------|------:| -| Total wall time | 19880.9742 ms | -| Throughput | 113.93 validations/sec | -| Templates | 453 ok, 8 failed | +| Total wall time | 20454.9250 ms | +| Throughput | 117.82 validations/sec | +| Templates | 482 ok, 8 failed | | Iterations per template | 5 | -| Engine init (p99) | 64.7253 ms | -| Engine init (max) | 65.0265 ms | -| Schema init (p99) | 77.5841 ms | -| Schema init (max) | 79.0549 ms | +| Engine init (p99) | 66.2733 ms | +| Engine init (max) | 66.6075 ms | +| Schema init (p99) | 58.7142 ms | +| Schema init (max) | 59.4575 ms | ### Latency Distribution (ms) | Phase | Min | Avg | Median | P90 | P95 | P99 | Max | |-------|----:|----:|-------:|----:|----:|----:|----:| -| Model Build | 0.0018 | 0.2081 | 0.0462 | 0.6911 | 0.8979 | 1.6244 | 2.9032 | -| Schema Validate | 0.0000 | 2.5285 | 0.5654 | 6.5639 | 10.4734 | 24.5581 | 55.4039 | -| Rule Evaluation | 0.9569 | 5.3746 | 2.3219 | 13.1001 | 18.9923 | 32.5913 | 94.5026 | -| Diagnostic Finalize | 0.0003 | 0.0282 | 0.0045 | 0.0878 | 0.1319 | 0.3250 | 0.6300 | -| Engine Internal | 0.9665 | 8.1904 | 3.1545 | 21.0341 | 32.1429 | 56.5630 | 119.0893 | -| Wall Clock | 0.9666 | 8.1908 | 3.1548 | 21.0344 | 32.1438 | 56.5639 | 119.0898 | +| Model Build | 0.0018 | 0.1956 | 0.0435 | 0.6140 | 0.8877 | 1.5597 | 2.7114 | +| Schema Validate | 0.0000 | 2.4058 | 0.5643 | 6.4078 | 10.0233 | 23.3449 | 55.0399 | +| Rule Evaluation | 0.9765 | 5.0851 | 2.1830 | 12.2517 | 18.5413 | 31.2267 | 95.3281 | +| Diagnostic Finalize | 0.0003 | 0.0260 | 0.0039 | 0.0798 | 0.1245 | 0.3016 | 0.5670 | +| Engine Internal | 0.9811 | 7.7683 | 3.0364 | 19.2714 | 30.5501 | 55.2177 | 117.3556 | +| Wall Clock | 0.9813 | 7.7686 | 3.0367 | 19.2719 | 30.5505 | 55.2187 | 117.3565 | -## False Negatives — 332 missed findings across 80 rules +## False Negatives — 342 missed findings across 82 rules These are diagnostics cfn-lint expects but the engine does not report. -### F3003 — 31 missed — Required Resource properties are missing +### F3003 — 36 missed — Required Resource properties are missing - **F3003** (cfn-lint: E3003) `myInstance2` → `Properties.BlockDeviceMappings.Fn::If.2.0.Fn::If.1` L46-48 in `bad_core_conditions_yaml` > 'DeviceName' is a required property @@ -111,6 +111,16 @@ These are diagnostics cfn-lint expects but the engine does not report. > 'Groups' is a required property - **F3003** (cfn-lint: E3003) `WildcardPolicy` → `Properties` L14 in `bad_security_issues_yaml` > 'Roles' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'AvailabilityZone' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'Size' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'SnapshotId' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'AvailabilityZoneId' is a required property +- **F3003** (cfn-lint: E3003) `Resource` → `Properties` L3 in `gh-issues_issue-61_json` + > 'SourceVolumeId' is a required property - **F3003** (cfn-lint: E3003) `WithGetAtt` → `Properties` L35 in `good_both_forms_yaml` > 'ServiceToken' is a required property - **F3003** (cfn-lint: E3003) `WithJoin` → `Properties` L45 in `good_both_forms_yaml` @@ -657,6 +667,17 @@ These are diagnostics cfn-lint expects but the engine does not report. - **F3031** (cfn-lint: E3031) `TestRole` → `Properties.RoleName` L10 in `good_functions_sub_needed_custom_excludes_yaml` > 'TestRole-${Stage}' does not match '^[\\w+=,.@-]+$' +### I3010 — 4 missed — Resource limit + +- **I3010** `Memory` → `Properties.MemoryStrategies.0` L9-17 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/0' is approaching the limit of 1 properties +- **I3010** `Memory` → `Properties.MemoryStrategies.1` L18-26 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/1' is approaching the limit of 1 properties +- **I3010** `Memory` → `Properties.MemoryStrategies.2` L27-35 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/2' is approaching the limit of 1 properties +- **I3010** `Memory` → `Properties.MemoryStrategies.3` L36-49 in `gh-issues_issue-38_json` + > 'Resources/Memory/Properties/MemoryStrategies/3' is approaching the limit of 1 properties + ### W1032 — 4 missed — Validate the values that come from a Fn::Join function - **W1032** `Bucket2` → `Properties.BucketName.Fn::Join` L42 in `lsp_parameter_usage_json` @@ -756,6 +777,13 @@ These are diagnostics cfn-lint expects but the engine does not report. - **E3019** `Project2` → `Properties.Name` L188 in `bad_resources_primary_identifiers_yaml` > Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project2', 'Project1'} +### F3006 — 2 missed — Validate the CloudFormation resource type + +- **F3006** (cfn-lint: E3006) `MyFunction` → `Resources.MyFunction.Type` L3 in `lsp_test-template_yaml` + > Resource type 'AWS::Serverless::Function' does not exist in 'us-east-1' +- **F3006** (cfn-lint: E3006) `MyApi` → `Resources.MyApi.Type` L7 in `lsp_test-template_yaml` + > Resource type 'AWS::Serverless::Api' does not exist in 'us-east-1' + ### E3707 — 2 missed — Validate RDS DBInstance Engine matches DBCluster Engine - **E3707** `AuroraDB` → `Properties.Engine` L6 in `bad_aurora_with_allocated_storage_yaml` @@ -812,13 +840,6 @@ These are diagnostics cfn-lint expects but the engine does not report. - **F1029** (cfn-lint: E1029) `TestBadStateMachine2` → `Properties.DefinitionString.Fn::Join.1.5` L67 in `bad_functions_sub_needed_yaml` > Found an embedded parameter "${definition_substitution_1}" outside of an "Fn::Sub" at Resources/TestBadStateMachine2/Properties/DefinitionString/Fn::Join/1/5 -### F3006 — 2 missed — Validate the CloudFormation resource type - -- **F3006** (cfn-lint: E3006) `MyFunction` → `Resources.MyFunction.Type` L3 in `lsp_test-template_yaml` - > Resource type 'AWS::Serverless::Function' does not exist in 'us-east-1' -- **F3006** (cfn-lint: E3006) `MyApi` → `Resources.MyApi.Type` L7 in `lsp_test-template_yaml` - > Resource type 'AWS::Serverless::Api' does not exist in 'us-east-1' - ### I2530 — 2 missed — Validate that SnapStart is configured for >= Java11 runtimes - **I2530** `VmdEventsLambda` → `Properties.SnapStart.ApplyOn` L168 in `issues_sam_w_conditions_yaml` @@ -923,6 +944,11 @@ These are diagnostics cfn-lint expects but the engine does not report. - **E3700** `TestPipeline` → `Properties.Stages.1.Actions.0.ActionTypeId.Category` L34 in `bad_resources_codepipeline_stages_second_stage_yaml` > 'Source' is not one of ['Build', 'Approval', 'Deploy', 'Test', 'Invoke', 'Compute'] +### E1041 — 1 missed — Check if Ref matches destination format + +- **E1041** `DaxRef` → `Properties.SecurityGroupIds.0` L32 in `gh-issues_issue-40_yaml` + > {'Ref': 'EksCluster'} does not match destination format of 'AWS::EC2::SecurityGroup.Id' + ### E3504 — 1 missed — Check minimum 90 period is met between BackupPlan cold and delete - **E3504** `BackupPlan` → `Properties.BackupPlan.BackupPlanRule.0.Lifecycle.DeleteAfterDays` L17 in `bad_resources_backup_test_backup_plan_lifecycle_rule_yml` @@ -973,15 +999,42 @@ These are diagnostics cfn-lint expects but the engine does not report. - **E3719** `AuroraDB` → `Properties.BackupRetentionPeriod` L9 in `good_aurora_dbinstance_yaml` > 'BackupRetentionPeriod' is not allowed when 'DBClusterIdentifier' is specified. Set backup retention period on the DB cluster instead. -## False Positives — 0 extra findings across 0 rules +## False Positives — 9 extra findings across 3 rules These are diagnostics the engine reports but cfn-lint does not expect (potential bugs). -## Engine Extra — 5498 correct findings across 36 rules +### F3004 — 7 extra — Resource dependencies are not circular + +- **F3004** `ClusterKubectlHandlerRole94549F93` → `Resources/ClusterKubectlHandlerRole94549F93` L472 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterKubectlHandlerRole94549F93. Circular dependency with [ClusterKubectlReadyBarrier200052AF] +- **F3004** `ClusterControlPlaneSecurityGroupD274242C` → `Resources/ClusterControlPlaneSecurityGroupD274242C` L593 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterControlPlaneSecurityGroupD274242C. Circular dependency with [ClusterKubectlReadyBarrier200052AF] +- **F3004** `ClusterCreationRole360249B6` → `Resources/ClusterCreationRole360249B6` L614 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterCreationRole360249B6. Circular dependency with [ClusterKubectlHandlerRole94549F93] +- **F3004** `ClusterCreationRole360249B6` → `Resources/ClusterCreationRole360249B6` L614 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterCreationRole360249B6. Circular dependency with [ClusterKubectlReadyBarrier200052AF] +- **F3004** `Cluster9EE0221C` → `Resources/Cluster9EE0221C` L793 in `gh-issues_issue-53_json` + > Circular Dependencies for resource Cluster9EE0221C. Circular dependency with [ClusterControlPlaneSecurityGroupD274242C] +- **F3004** `ClusterKubectlReadyBarrier200052AF` → `Resources/ClusterKubectlReadyBarrier200052AF` L880 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterCreationRole360249B6] +- **F3004** `ClusterKubectlReadyBarrier200052AF` → `Resources/ClusterKubectlReadyBarrier200052AF` L880 in `gh-issues_issue-53_json` + > Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterCreationRoleDefaultPolicyE8BDFC7B] + +### I3013 — 1 extra — Check resources with auto expiring content have explicit retention period + +- **I3013** `Canary` (AWS::Synthetics::Canary) → `Properties.SuccessRetentionPeriod` L3 in `gh-issues_issue-62_json` + > 'SuccessRetentionPeriod' is a required property (The default retention period will delete the data after a pre-defined time. Set an explicit values to avoid data loss on resource) + +### E3702 — 1 extra — Validate the number of input and output artifacts in a CodePipeline + +- **E3702** `Pipeline` (AWS::CodePipeline::Pipeline) L3 in `gh-issues_issue-44_json` + > Action 'Deploy' (category 'Deploy') has 0 input artifacts, expected at least 1 + +## Engine Extra — 5630 correct findings across 36 rules These are correct diagnostics the engine reports that cfn-lint does not cover. -### I9001 — 3606 findings +### I9001 — 3686 findings - **I9001** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L7 in `bad_E1150_network_interfaces_groupset_multi_yaml` > Property 'ImageId' is create-only; updating it will cause resource replacement @@ -997,6 +1050,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Property 'BucketName' is create-only; updating it will cause resource replacement - **I9001** `Bucket` (AWS::S3::Bucket) → `Properties.BucketName` L9 in `bad_F2002_ssm_parameter_type_invalid_yaml` > Property 'BucketName' is create-only; updating it will cause resource replacement +- **I9001** `Bucket` (AWS::S3::Bucket) → `Properties.BucketName` L25 in `bad_W1028_allowedvalues_excludes_literal` + > Property 'BucketName' is create-only; updating it will cause resource replacement - **I9001** `Host` (AWS::EC2::Host) → `Properties.AvailabilityZone` L15 in `bad_W3010_full_coverage_yaml` > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement - **I9001** `Host` (AWS::EC2::Host) → `Properties.InstanceType` L15 in `bad_W3010_full_coverage_yaml` @@ -6117,6 +6172,164 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Property 'ResourceId' is create-only; updating it will cause resource replacement - **I9001** `StepFuncApiordersGET0318ABB9` (AWS::ApiGateway::Method) → `Properties.RestApiId` L230 in `cdk_stepfunction-external-definition--StepfunctionExternalDefinitionStack.template_json` > Property 'RestApiId' is create-only; updating it will cause resource replacement +- **I9001** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L13 in `gh-issues_issue-34_json` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `Instance2` (AWS::EC2::Instance) → `Properties.ImageId` L20 in `gh-issues_issue-34_json` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `MyLaunchConfig` (AWS::AutoScaling::LaunchConfiguration) → `Properties.ImageId` L4 in `gh-issues_issue-37_yaml` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `MyLaunchConfig` (AWS::AutoScaling::LaunchConfiguration) → `Properties.InstanceType` L4 in `gh-issues_issue-37_yaml` + > Property 'InstanceType' is create-only; updating it will cause resource replacement +- **I9001** `Memory` (AWS::BedrockAgentCore::Memory) → `Properties.Name` L3 in `gh-issues_issue-38_json` + > Property 'Name' is create-only; updating it will cause resource replacement +- **I9001** `EksCluster` (AWS::EKS::Cluster) → `Properties.Name` L3 in `gh-issues_issue-40_yaml` + > Property 'Name' is create-only; updating it will cause resource replacement +- **I9001** `EksCluster` (AWS::EKS::Cluster) → `Properties.RoleArn` L3 in `gh-issues_issue-40_yaml` + > Property 'RoleArn' is create-only; updating it will cause resource replacement +- **I9001** `DaxConcrete` (AWS::DAX::Cluster) → `Properties.IAMRoleARN` L14 in `gh-issues_issue-40_yaml` + > Property 'IAMRoleARN' is create-only; updating it will cause resource replacement +- **I9001** `DaxConcrete` (AWS::DAX::Cluster) → `Properties.NodeType` L14 in `gh-issues_issue-40_yaml` + > Property 'NodeType' is create-only; updating it will cause resource replacement +- **I9001** `DaxRef` (AWS::DAX::Cluster) → `Properties.IAMRoleARN` L26 in `gh-issues_issue-40_yaml` + > Property 'IAMRoleARN' is create-only; updating it will cause resource replacement +- **I9001** `DaxRef` (AWS::DAX::Cluster) → `Properties.NodeType` L26 in `gh-issues_issue-40_yaml` + > Property 'NodeType' is create-only; updating it will cause resource replacement +- **I9001** `MyFunction` (AWS::Lambda::Function) → `Properties.FunctionName` L3 in `gh-issues_issue-41_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `TaskDef` (AWS::ECS::TaskDefinition) → `Properties.ContainerDefinitions` L4 in `gh-issues_issue-42_yaml` + > Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement +- **I9001** `TaskDef` (AWS::ECS::TaskDefinition) → `Properties.Family` L4 in `gh-issues_issue-42_yaml` + > Property 'Family' is create-only; updating it will cause resource replacement +- **I9001** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.Port` L14 in `gh-issues_issue-42_yaml` + > Property 'Port' is create-only; updating it will cause resource replacement +- **I9001** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.Protocol` L14 in `gh-issues_issue-42_yaml` + > Property 'Protocol' is create-only; updating it will cause resource replacement +- **I9001** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.VpcId` L14 in `gh-issues_issue-42_yaml` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `Service` (AWS::ECS::Service) → `Properties.Cluster` L21 in `gh-issues_issue-42_yaml` + > Property 'Cluster' is create-only; updating it will cause resource replacement +- **I9001** `MyFunction` (AWS::Lambda::Function) → `Properties.FunctionName` L3 in `gh-issues_issue-47_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `DocDbInstance` (AWS::DocDB::DBInstance) → `Properties.DBClusterIdentifier` L9 in `gh-issues_issue-49_yaml` + > Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement +- **I9001** `Ec2Instance` (AWS::EC2::Instance) → `Properties.ImageId` L14 in `gh-issues_issue-49_yaml` + > Property 'ImageId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcFAC913E5` (AWS::EC2::VPC) → `Properties.CidrBlock` L3 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1Subnet7A3A7B5D` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L18 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1Subnet7A3A7B5D` (AWS::EC2::Subnet) → `Properties.CidrBlock` L18 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1Subnet7A3A7B5D` (AWS::EC2::Subnet) → `Properties.VpcId` L18 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1RouteTable5F0A6273` (AWS::EC2::RouteTable) → `Properties.VpcId` L54 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1RouteTableAssociation2AB88B08` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L72 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1RouteTableAssociation2AB88B08` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L72 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1DefaultRoute321532E0` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L83 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1DefaultRoute321532E0` (AWS::EC2::Route) → `Properties.RouteTableId` L83 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1NATGateway7AFB18E6` (AWS::EC2::NatGateway) → `Properties.AllocationId` L114 in `gh-issues_issue-53_json` + > Property 'AllocationId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet1NATGateway7AFB18E6` (AWS::EC2::NatGateway) → `Properties.SubnetId` L114 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2Subnet42A6D42E` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L142 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2Subnet42A6D42E` (AWS::EC2::Subnet) → `Properties.CidrBlock` L142 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2Subnet42A6D42E` (AWS::EC2::Subnet) → `Properties.VpcId` L142 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2RouteTableEC6A2C2A` (AWS::EC2::RouteTable) → `Properties.VpcId` L178 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2RouteTableAssociationF7485C52` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L196 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2RouteTableAssociationF7485C52` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L196 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2DefaultRouteE14C718B` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L207 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2DefaultRouteE14C718B` (AWS::EC2::Route) → `Properties.RouteTableId` L207 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2NATGateway5AD59565` (AWS::EC2::NatGateway) → `Properties.AllocationId` L238 in `gh-issues_issue-53_json` + > Property 'AllocationId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPublicSubnet2NATGateway5AD59565` (AWS::EC2::NatGateway) → `Properties.SubnetId` L238 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1Subnet0B127D2C` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L266 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1Subnet0B127D2C` (AWS::EC2::Subnet) → `Properties.CidrBlock` L266 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1Subnet0B127D2C` (AWS::EC2::Subnet) → `Properties.VpcId` L266 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1RouteTable886260DA` (AWS::EC2::RouteTable) → `Properties.VpcId` L302 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L320 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L320 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1DefaultRouteB00E5F42` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L331 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet1DefaultRouteB00E5F42` (AWS::EC2::Route) → `Properties.RouteTableId` L331 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2SubnetCD612986` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L343 in `gh-issues_issue-53_json` + > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2SubnetCD612986` (AWS::EC2::Subnet) → `Properties.CidrBlock` L343 in `gh-issues_issue-53_json` + > Property 'CidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2SubnetCD612986` (AWS::EC2::Subnet) → `Properties.VpcId` L343 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2RouteTable1EDE83AC` (AWS::EC2::RouteTable) → `Properties.VpcId` L379 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2RouteTableAssociation1643AB72` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.RouteTableId` L397 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2RouteTableAssociation1643AB72` (AWS::EC2::SubnetRouteTableAssociation) → `Properties.SubnetId` L397 in `gh-issues_issue-53_json` + > Property 'SubnetId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2DefaultRoute99CA0CB9` (AWS::EC2::Route) → `Properties.DestinationCidrBlock` L408 in `gh-issues_issue-53_json` + > Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcPrivateSubnet2DefaultRoute99CA0CB9` (AWS::EC2::Route) → `Properties.RouteTableId` L408 in `gh-issues_issue-53_json` + > Property 'RouteTableId' is create-only; updating it will cause resource replacement +- **I9001** `UserVpcVPCGWEFD8AF3B` (AWS::EC2::VPCGatewayAttachment) → `Properties.VpcId` L431 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `KubectlLayer600207B5` (AWS::Lambda::LayerVersion) → `Properties.Content` L459 in `gh-issues_issue-53_json` + > Property 'Content' is create-only; updating it will cause resource replacement +- **I9001** `KubectlLayer600207B5` (AWS::Lambda::LayerVersion) → `Properties.Description` L459 in `gh-issues_issue-53_json` + > Property 'Description' is create-only; updating it will cause resource replacement +- **I9001** `KubectlLayer600207B5` (AWS::Lambda::LayerVersion) → `Properties.LicenseInfo` L459 in `gh-issues_issue-53_json` + > Property 'LicenseInfo' is create-only; updating it will cause resource replacement +- **I9001** `ClusterControlPlaneSecurityGroupD274242C` (AWS::EC2::SecurityGroup) → `Properties.GroupDescription` L593 in `gh-issues_issue-53_json` + > Property 'GroupDescription' is create-only; updating it will cause resource replacement +- **I9001** `ClusterControlPlaneSecurityGroupD274242C` (AWS::EC2::SecurityGroup) → `Properties.VpcId` L593 in `gh-issues_issue-53_json` + > Property 'VpcId' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.AmiType` L954 in `gh-issues_issue-53_json` + > Property 'AmiType' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.ClusterName` L954 in `gh-issues_issue-53_json` + > Property 'ClusterName' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.InstanceTypes` L954 in `gh-issues_issue-53_json` + > Property 'InstanceTypes' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.NodeRole` L954 in `gh-issues_issue-53_json` + > Property 'NodeRole' is create-only; updating it will cause resource replacement +- **I9001** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.Subnets` L954 in `gh-issues_issue-53_json` + > Property 'Subnets' is create-only; updating it will cause resource replacement +- **I9001** `Canary` (AWS::Synthetics::Canary) → `Properties.Name` L3 in `gh-issues_issue-62_json` + > Property 'Name' is create-only; updating it will cause resource replacement +- **I9001** `MyLambda` (AWS::Lambda::Function) → `Properties.FunctionName` L3 in `gh-issues_issue-65_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.Action` L15 in `gh-issues_issue-65_json` + > Property 'Action' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.FunctionName` L15 in `gh-issues_issue-65_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.Principal` L15 in `gh-issues_issue-65_json` + > Property 'Principal' is create-only; updating it will cause resource replacement +- **I9001** `S3Permission` (AWS::Lambda::Permission) → `Properties.SourceAccount` L15 in `gh-issues_issue-65_json` + > Property 'SourceAccount' is create-only; updating it will cause resource replacement +- **I9001** `PromAlarm` (AWS::CloudWatch::Alarm) → `Properties.AlarmName` L3 in `gh-issues_issue-67_json` + > Property 'AlarmName' is create-only; updating it will cause resource replacement +- **I9001** `MyFunc` (AWS::Lambda::Function) → `Properties.FunctionName` L4 in `gh-issues_issue-68_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `FutureNodeFunc` (AWS::Lambda::Function) → `Properties.FunctionName` L16 in `gh-issues_issue-68_json` + > Property 'FunctionName' is create-only; updating it will cause resource replacement +- **I9001** `Bucket` (AWS::S3::Bucket) → `Properties.BucketName` L16 in `good_E9001_aws_cdk_metadata` + > Property 'BucketName' is create-only; updating it will cause resource replacement - **I9001** `Subnet` (AWS::EC2::Subnet) → `Properties.AvailabilityZone` L14 in `good_W3010_getazs_not_flagged` > Property 'AvailabilityZone' is create-only; updating it will cause resource replacement - **I9001** `Subnet` (AWS::EC2::Subnet) → `Properties.CidrBlock` L14 in `good_W3010_getazs_not_flagged` @@ -8196,7 +8409,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **I9001** `S3VPCEndpoint` (AWS::EC2::VPCEndpoint) → `Properties.VpcId` L2113 in `quickstart_vpc_json` > Property 'VpcId' is create-only; updating it will cause resource replacement -### I9040 — 1467 findings +### I9040 — 1505 findings - **I9040** `Instance` (AWS::EC2::Instance) → `Properties.Tags` L7 in `bad_E1150_network_interfaces_groupset_multi_yaml` > Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured @@ -8210,6 +8423,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resource 'D' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L9 in `bad_F2002_ssm_parameter_type_invalid_yaml` > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L25 in `bad_W1028_allowedvalues_excludes_literal` + > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `Asg` (AWS::AutoScaling::AutoScalingGroup) → `Properties.Tags` L6 in `bad_W3010_full_coverage_yaml` > Resource 'Asg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured - **I9040** `Host` (AWS::EC2::Host) → `Properties.Tags` L15 in `bad_W3010_full_coverage_yaml` @@ -10184,6 +10399,78 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured - **I9040** `Rule4C995B7F` (AWS::Events::Rule) → `Properties.Tags` L315 in `cdk_stepfunctions-job-poller--aws-stepfunctions-integ.template_json` > Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured +- **I9040** `Instance` (AWS::EC2::Instance) → `Properties.Tags` L13 in `gh-issues_issue-34_json` + > Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured +- **I9040** `Instance2` (AWS::EC2::Instance) → `Properties.Tags` L20 in `gh-issues_issue-34_json` + > Resource 'Instance2' of type 'AWS::EC2::Instance' supports Tags but none are configured +- **I9040** `MyAsg` (AWS::AutoScaling::AutoScalingGroup) → `Properties.Tags` L9 in `gh-issues_issue-37_yaml` + > Resource 'MyAsg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured +- **I9040** `Memory` (AWS::BedrockAgentCore::Memory) → `Properties.Tags` L3 in `gh-issues_issue-38_json` + > Resource 'Memory' of type 'AWS::BedrockAgentCore::Memory' supports Tags but none are configured +- **I9040** `EksCluster` (AWS::EKS::Cluster) → `Properties.Tags` L3 in `gh-issues_issue-40_yaml` + > Resource 'EksCluster' of type 'AWS::EKS::Cluster' supports Tags but none are configured +- **I9040** `DaxConcrete` (AWS::DAX::Cluster) → `Properties.Tags` L14 in `gh-issues_issue-40_yaml` + > Resource 'DaxConcrete' of type 'AWS::DAX::Cluster' supports Tags but none are configured +- **I9040** `DaxRef` (AWS::DAX::Cluster) → `Properties.Tags` L26 in `gh-issues_issue-40_yaml` + > Resource 'DaxRef' of type 'AWS::DAX::Cluster' supports Tags but none are configured +- **I9040** `MyFunction` (AWS::Lambda::Function) → `Properties.Tags` L3 in `gh-issues_issue-41_json` + > Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `TaskDef` (AWS::ECS::TaskDefinition) → `Properties.Tags` L4 in `gh-issues_issue-42_yaml` + > Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured +- **I9040** `TargetGroup` (AWS::ElasticLoadBalancingV2::TargetGroup) → `Properties.Tags` L14 in `gh-issues_issue-42_yaml` + > Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured +- **I9040** `Service` (AWS::ECS::Service) → `Properties.Tags` L21 in `gh-issues_issue-42_yaml` + > Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured +- **I9040** `Pipeline` (AWS::CodePipeline::Pipeline) → `Properties.Tags` L3 in `gh-issues_issue-44_json` + > Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured +- **I9040** `PipelineRole` (AWS::IAM::Role) → `Properties.Tags` L47 in `gh-issues_issue-44_json` + > Resource 'PipelineRole' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `MyFunction` (AWS::Lambda::Function) → `Properties.Tags` L3 in `gh-issues_issue-47_json` + > Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `EsDomain` (AWS::Elasticsearch::Domain) → `Properties.Tags` L3 in `gh-issues_issue-49_yaml` + > Resource 'EsDomain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured +- **I9040** `DocDbInstance` (AWS::DocDB::DBInstance) → `Properties.Tags` L9 in `gh-issues_issue-49_yaml` + > Resource 'DocDbInstance' of type 'AWS::DocDB::DBInstance' supports Tags but none are configured +- **I9040** `Ec2Instance` (AWS::EC2::Instance) → `Properties.Tags` L14 in `gh-issues_issue-49_yaml` + > Resource 'Ec2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured +- **I9040** `UserRoleB7C3739B` (AWS::IAM::Role) → `Properties.Tags` L442 in `gh-issues_issue-53_json` + > Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterKubectlHandlerRole94549F93` (AWS::IAM::Role) → `Properties.Tags` L472 in `gh-issues_issue-53_json` + > Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterControlPlaneSecurityGroupD274242C` (AWS::EC2::SecurityGroup) → `Properties.Tags` L593 in `gh-issues_issue-53_json` + > Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured +- **I9040** `ClusterCreationRole360249B6` (AWS::IAM::Role) → `Properties.Tags` L614 in `gh-issues_issue-53_json` + > Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterKubectlReadyBarrier200052AF` (AWS::SSM::Parameter) → `Properties.Tags` L880 in `gh-issues_issue-53_json` + > Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured +- **I9040** `ClusterNodegroupDefaultCapacityNodeGroupRole55953B04` (AWS::IAM::Role) → `Properties.Tags` L894 in `gh-issues_issue-53_json` + > Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured +- **I9040** `ClusterNodegroupDefaultCapacityDA0920A3` (AWS::EKS::Nodegroup) → `Properties.Tags` L954 in `gh-issues_issue-53_json` + > Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured +- **I9040** `awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454` (AWS::CloudFormation::Stack) → `Properties.Tags` L1033 in `gh-issues_issue-53_json` + > Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured +- **I9040** `awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B` (AWS::CloudFormation::Stack) → `Properties.Tags` L1056 in `gh-issues_issue-53_json` + > Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured +- **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L3 in `gh-issues_issue-54_json` + > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `Resource` (AWS::EC2::Volume) → `Properties.Tags` L3 in `gh-issues_issue-61_json` + > Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured +- **I9040** `Canary` (AWS::Synthetics::Canary) → `Properties.Tags` L3 in `gh-issues_issue-62_json` + > Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured +- **I9040** `Topic` (AWS::SNS::Topic) → `Properties.Tags` L27 in `gh-issues_issue-63_json` + > Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured +- **I9040** `MyLambda` (AWS::Lambda::Function) → `Properties.Tags` L3 in `gh-issues_issue-65_json` + > Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `PromAlarm` (AWS::CloudWatch::Alarm) → `Properties.Tags` L3 in `gh-issues_issue-67_json` + > Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured +- **I9040** `MyFunc` (AWS::Lambda::Function) → `Properties.Tags` L4 in `gh-issues_issue-68_json` + > Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `FutureNodeFunc` (AWS::Lambda::Function) → `Properties.Tags` L16 in `gh-issues_issue-68_json` + > Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured +- **I9040** `Bucket` (AWS::S3::Bucket) → `Properties.Tags` L16 in `good_E9001_aws_cdk_metadata` + > Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `KubectlHandlerRole` (AWS::IAM::Role) → `Properties.Tags` L19 in `good_W1028_pseudo_param_branches_reachable` + > Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured - **I9040** `Elb` (AWS::ElasticLoadBalancing::LoadBalancer) → `Properties.Tags` L6 in `good_W3010_getazs_not_flagged` > Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured - **I9040** `Subnet` (AWS::EC2::Subnet) → `Properties.Tags` L14 in `good_W3010_getazs_not_flagged` @@ -10870,6 +11157,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resource 'Bucket6' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `Bucket7` (AWS::S3::Bucket) → `Properties.Tags` L62 in `lsp_parameter_usage_yaml` > Resource 'Bucket7' of type 'AWS::S3::Bucket' supports Tags but none are configured +- **I9040** `MyS3Bucket` (AWS::S3::Bucket) → `Properties.Tags` L4 in `lsp_simple` + > Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured - **I9040** `MyFunction` (AWS::Serverless::Function) → `Properties.Tags` L3 in `lsp_test-template_yaml` > Resource 'MyFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured - **I9040** `MyApi` (AWS::Serverless::Api) → `Properties.Tags` L7 in `lsp_test-template_yaml` @@ -11454,7 +11743,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9003** `NATInstanceSecurityGroup` (AWS::EC2::SecurityGroup) → `Properties.SecurityGroupIngress.0.ToPort` L2093 in `quickstart_vpc_json` > '65535' is not of type 'integer' — automatically coerced (string → integer) -### W9013 — 51 findings +### W9013 — 60 findings - **W9013** `Pipeline` (AWS::CodePipeline::Pipeline) L4 in `bad_codepipeline_bad_artifact_counts_yaml` > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter @@ -11520,6 +11809,24 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter - **W9013** `UrlShortenerApiDomain85D0CE65` (AWS::ApiGateway::DomainName) L490 in `cdk_py-url-shortener--urlshort-app.template_json` > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `EksCluster` (AWS::EKS::Cluster) L3 in `gh-issues_issue-40_yaml` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `DaxConcrete` (AWS::DAX::Cluster) L14 in `gh-issues_issue-40_yaml` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `DaxRef` (AWS::DAX::Cluster) L26 in `gh-issues_issue-40_yaml` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyFunction` (AWS::Lambda::Function) L3 in `gh-issues_issue-41_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyFunction` (AWS::Lambda::Function) L3 in `gh-issues_issue-47_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `Canary` (AWS::Synthetics::Canary) L3 in `gh-issues_issue-62_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyLambda` (AWS::Lambda::Function) L3 in `gh-issues_issue-65_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `MyFunc` (AWS::Lambda::Function) L4 in `gh-issues_issue-68_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter +- **W9013** `FutureNodeFunc` (AWS::Lambda::Function) L16 in `gh-issues_issue-68_json` + > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter - **W9013** `Pipeline` (AWS::CodePipeline::Pipeline) L4 in `good_codepipeline_artifact_counts` > Hardcoded account ID in ARN — use AWS::AccountId pseudo-parameter - **W9013** `TestGoodStateMachine1` (AWS::StepFunctions::StateMachine) L138 in `good_functions_sub_needed_yaml` @@ -11638,7 +11945,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9008** `Database` (AWS::RDS::DBInstance) L92 in `lsp_condition-usage_yaml` > RDS instance should have StorageEncrypted set to true -### W9010 — 30 findings +### W9010 — 31 findings - **W9010** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L7 in `bad_E1150_network_interfaces_groupset_multi_yaml` > Hardcoded AMI ID — use a parameter or mapping for portability @@ -11668,6 +11975,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Hardcoded AMI ID — use a parameter or mapping for portability - **W9010** `Instance` (AWS::EC2::Instance) → `Properties.ImageId` L4 in `bad_schema_format_violation_yaml` > Hardcoded AMI ID — use a parameter or mapping for portability +- **W9010** `Ec2Instance` (AWS::EC2::Instance) → `Properties.ImageId` L14 in `gh-issues_issue-49_yaml` + > Hardcoded AMI ID — use a parameter or mapping for portability - **W9010** `myInstance` (AWS::EC2::Instance) → `Properties.ImageId` L26 in `good_conditions` > Hardcoded AMI ID — use a parameter or mapping for portability - **W9010** `myInstance` (AWS::EC2::Instance) → `Properties.ImageId` L26 in `good_conditions_yaml` @@ -11701,7 +12010,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9010** `AnsibleConfigServer` (AWS::EC2::Instance) → `Properties.ImageId` L280 in `quickstart_openshift_yaml` > Hardcoded AMI ID — use a parameter or mapping for portability -### F0001 — 21 findings +### F0001 — 22 findings - **F0001** L24 in `bad_conditions_and_yaml` > Resources section must exist and be non-empty @@ -11729,6 +12038,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Resources section must exist and be non-empty - **F0001** L5 in `bad_templates_base_yaml` > Resources section must exist and be non-empty +- **F0001** L12 in `good_core_config_cfn_lint` + > Resources section must exist and be non-empty - **F0001** L9 in `good_core_config_only_i1002` > Resources section must exist and be non-empty - **F0001** L9 in `good_core_config_only_i1003` @@ -11746,7 +12057,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **F0001** L22 in `integration_metdata_yaml` > Resources section must exist and be non-empty -### W9002 — 19 findings +### W9002 — 21 findings - **W9002** `Pipeline` (AWS::CodePipeline::Pipeline) → `Properties.RoleArn` L4 in `bad_codepipeline_bad_artifact_counts_yaml` > Property 'RoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead @@ -11776,6 +12087,10 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > Property 'S3BucketArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead - **W9002** `UrlShortenerApiDomain85D0CE65` (AWS::ApiGateway::DomainName) → `Properties.RegionalCertificateArn` L490 in `cdk_py-url-shortener--urlshort-app.template_json` > Property 'RegionalCertificateArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead +- **W9002** `EksCluster` (AWS::EKS::Cluster) → `Properties.RoleArn` L3 in `gh-issues_issue-40_yaml` + > Property 'RoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead +- **W9002** `Canary` (AWS::Synthetics::Canary) → `Properties.ExecutionRoleArn` L3 in `gh-issues_issue-62_json` + > Property 'ExecutionRoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead - **W9002** `Pipeline` (AWS::CodePipeline::Pipeline) → `Properties.RoleArn` L4 in `good_codepipeline_artifact_counts` > Property 'RoleArn' has a hardcoded ARN — use Ref, GetAtt, or a parameter instead - **W9002** `TestGoodStateMachine1` (AWS::StepFunctions::StateMachine) → `Properties.RoleArn` L138 in `good_functions_sub_needed_yaml` @@ -11857,7 +12172,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **W9009** `CloudFront2` (AWS::CloudFront::Distribution) → `Properties.DistributionConfig` L41 in `integration_ref-no-value_yaml` > Property 'DistributionConfig' is deprecated -### F3003 — 8 findings — Required Resource properties are missing +### F3003 — 9 findings — Required Resource properties are missing - **F3003** `BadListener` (AWS::ElasticLoadBalancingV2::Listener) → `Properties` L20 in `bad_cross_resource_task10_yaml` > 'Certificates' is a required property (from extension) @@ -11873,6 +12188,8 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. > 'OwnershipControls' is a required property (from extension) - **F3003** `DataTable` (AWS::DynamoDB::Table) → `Properties` L72 in `cdk_DemoStack.template_json` > 'ProvisionedThroughput' is a required property (from extension) +- **F3003** `Bucket` (AWS::S3::Bucket) → `Properties` L5 in `gh-issues_issue-54_json` + > 'OwnershipControls' is a required property (from extension) - **F3003** `rArchiveLogsBucket` (AWS::S3::Bucket) → `Properties` L44 in `quickstart_nist_logging_yaml` > 'OwnershipControls' is a required property (from extension) @@ -12085,7 +12402,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - **F8610** in `lsp_comprehensive_yaml` > Rule 'ValidateParameterCombinations' Assertions[1] Assert must be a condition function (object), not array -## Per-Template Breakdown — 107 templates with mismatches +## Per-Template Breakdown — 113 templates with mismatches ### `bad_resources_iam_iam_policy_yaml` — 18 mismatches (5 TP, 0 FP, 5 EE, 18 FN) @@ -12136,6 +12453,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `F3003` ×7 - EE: `I9040` ×2, `I9001` +### `gh-issues_issue-53_json` — 7 mismatches (18 TP, 7 FP, 57 EE, 0 FN) + +- FP: `F3004` ×7 +- EE: `I9001` ×48, `I9040` ×9 + ### `good_functions_sub_needed_custom_excludes_yaml` — 7 mismatches (2 TP, 0 FP, 2 EE, 7 FN) - FN: `E3530` ×6, `F3031` @@ -12205,6 +12527,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `E3026` ×5 - EE: `I9001` ×11, `I9040` ×7 +### `gh-issues_issue-61_json` — 5 mismatches (3 TP, 0 FP, 1 EE, 5 FN) + +- FN: `F3003` ×5 +- EE: `I9040` + ### `lsp_constants_json` — 5 mismatches (1 TP, 0 FP, 3 EE, 5 FN) - FN: `F1018` ×2, `F1020` ×2, `E3024` @@ -12225,6 +12552,11 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `E3513` ×4 - EE: `I9040` ×2 +### `gh-issues_issue-38_json` — 4 mismatches (0 TP, 0 FP, 2 EE, 4 FN) + +- FN: `I3010` ×4 +- EE: `I9001`, `I9040` + ### `good_transform_applications_location_yaml` — 4 mismatches (0 TP, 0 FP, 2 EE, 4 FN) - FN: `I3011` ×4 @@ -12573,6 +12905,21 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - FN: `W3691` - EE: `I9001` ×6, `I9040` ×4, `W9007`, `W9008` +### `gh-issues_issue-40_yaml` — 1 mismatches (1 TP, 0 FP, 13 EE, 1 FN) + +- FN: `E1041` +- EE: `I9001` ×6, `W9013` ×3, `I9040` ×3, `W9002` + +### `gh-issues_issue-44_json` — 1 mismatches (1 TP, 1 FP, 2 EE, 0 FN) + +- FP: `E3702` +- EE: `I9040` ×2 + +### `gh-issues_issue-62_json` — 1 mismatches (2 TP, 1 FP, 4 EE, 0 FN) + +- FP: `I3013` +- EE: `W9002`, `W9013`, `I9001`, `I9040` + ### `good_custom_is-not-defined_yaml` — 1 mismatches (8 TP, 0 FP, 6 EE, 1 FN) - FN: `E9004` @@ -12615,7 +12962,7 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. ## Coverage Gaps -16 cfn-lint templates with no engine report: +27 cfn-lint templates with no engine report: - `bad_core_config_invalid_json_json` (1 expected diagnostics) - `bad_core_config_invalid_yaml_yaml` (1 expected diagnostics) @@ -12624,6 +12971,17 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. - `bad_json_parse_json` (1 expected diagnostics) - `bad_string_yaml` (1 expected diagnostics) - `bad_template_yaml` (1 expected diagnostics) +- `gh-issues_issue-35` (0 expected diagnostics) +- `gh-issues_issue-36` (0 expected diagnostics) +- `gh-issues_issue-39` (0 expected diagnostics) +- `gh-issues_issue-45` (0 expected diagnostics) +- `gh-issues_issue-46` (0 expected diagnostics) +- `gh-issues_issue-48` (0 expected diagnostics) +- `gh-issues_issue-50` (0 expected diagnostics) +- `gh-issues_issue-52` (0 expected diagnostics) +- `gh-issues_issue-55` (0 expected diagnostics) +- `gh-issues_issue-56` (0 expected diagnostics) +- `gh-issues_issue-57` (0 expected diagnostics) - `good_core_config_cfn_lint.json` (0 expected diagnostics) - `good_core_config_cfn_lint.yaml` (0 expected diagnostics) - `good_functions_get_stack_output` (0 expected diagnostics) @@ -12640,14 +12998,17 @@ These are correct diagnostics the engine reports that cfn-lint does not cover. | Cause | Count | % of FN | Rules | |-------|------:|--------:|-------| -| Other | 126 | 37.95% | E0001, E0002, E2001, E2529, E5001, E6001, E7001, E9004, F0000, F0013, F0014, F0018, F1018, F1020, F1029, F2015, F3003, F3006, F3012, F3014, F3016, F3031, F3037, F6101 | -| Resource property validation | 96 | 28.92% | E3001, E3016, E3019, E3022, E3023, E3024, E3025, E3026, E3039, E3043, E3045, E3048, E3065, E3504, E3510, E3513, E3530, E3639, E3671, E3673, E3678, E3682, E3700, E3701, E3707, E3712, E3719 | -| Warning-level checks | 58 | 17.47% | W1001, W1028, W1030, W1031, W1032, W1034, W1036, W1054, W2001, W2002, W3037, W3045, W3691, W3698, W8001 | -| Intrinsic function validation | 41 | 12.35% | E1001, E1005, E1011, E1016, E1017, E1021, E1032, E1150, E1152, E1161, E1701 | -| Informational checks | 11 | 3.31% | I2530, I3011, I3510 | +| Other | 131 | 38.30% | E0001, E0002, E2001, E2529, E5001, E6001, E7001, E9004, F0000, F0013, F0014, F0018, F1018, F1020, F1029, F2015, F3003, F3006, F3012, F3014, F3016, F3031, F3037, F6101 | +| Resource property validation | 96 | 28.07% | E3001, E3016, E3019, E3022, E3023, E3024, E3025, E3026, E3039, E3043, E3045, E3048, E3065, E3504, E3510, E3513, E3530, E3639, E3671, E3673, E3678, E3682, E3700, E3701, E3707, E3712, E3719 | +| Warning-level checks | 58 | 16.96% | W1001, W1028, W1030, W1031, W1032, W1034, W1036, W1054, W2001, W2002, W3037, W3045, W3691, W3698, W8001 | +| Intrinsic function validation | 42 | 12.28% | E1001, E1005, E1011, E1016, E1017, E1021, E1032, E1041, E1150, E1152, E1161, E1701 | +| Informational checks | 15 | 4.39% | I2530, I3010, I3011, I3510 | ### False Positive Root Causes | Cause | Count | % of FP | Rules | |-------|------:|--------:|-------| +| Other | 7 | 77.78% | F3004 | +| Extra informational findings | 1 | 11.11% | I3013 | +| Over-reporting property/intrinsic errors | 1 | 11.11% | E3702 |