Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: GCForms release v3.27.0 #895

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

sre-read-write[bot]
Copy link
Contributor

@sre-read-write sre-read-write bot commented Nov 20, 2024

🤖 I have created a release beep boop

3.27.0 (2024-11-25)

Features

  • Update to latest dynamic IP blocking module (#892) (d14ff31)

Bug Fixes

  • Add missing api path check on APP WAF rule (#901) (9adb41d)
  • update api cloudwatch filter to catch logMessage style json (#902) (a5d57da)
  • WAF rule logic (#900) (11b40f3)

Miscellaneous Chores

  • Comment out OR statement in WAF for now (#899) (59cc5a9)
  • Seperate WAF uri checks contexts between API and App (#896) (116af75)
  • Update terraform, terragrunt,and AWS provider (#898) (287c6d1)

This PR was generated with Release Please. See documentation.

@sre-read-write sre-read-write bot force-pushed the release-please--branches--main branch from 1717671 to c88cb78 Compare November 25, 2024 13:36
Copy link

Production: load_balancer

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

Plan: 2 to add, 5 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_wafv2_regex_pattern_set.valid_api_uri_paths
module.waf_ip_blocklist.aws_cloudwatch_log_metric_filter.ip_added_to_block_list
update aws_wafv2_regex_pattern_set.valid_app_uri_paths
aws_wafv2_web_acl.forms_acl
module.waf_ip_blocklist.aws_cloudwatch_event_rule.ipv4_blocklist
module.waf_ip_blocklist.aws_iam_policy.ipv4_blocklist
module.waf_ip_blocklist.aws_lambda_function.ipv4_blocklist
Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place

Terraform will perform the following actions:

  # aws_wafv2_regex_pattern_set.valid_api_uri_paths will be created
  + resource "aws_wafv2_regex_pattern_set" "valid_api_uri_paths" {
      + arn         = (known after apply)
      + description = "Regex to match the api valid urls"
      + id          = (known after apply)
      + lock_token  = (known after apply)
      + name        = "valid_api_uri"
      + scope       = "REGIONAL"
      + tags_all    = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + regular_expression {
          + regex_string = "^(?:\\/v1)?\\/forms\\/(?:(\\w{25}))\\/(?:(template|(?:(submission\\/(?:(new|(?:(\\d{2}-\\d{2}-\\w{4})\\/?(?:(confirm\\/\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}|problem)?))))))))(?:\\/)?$"
        }
    }

  # aws_wafv2_regex_pattern_set.valid_app_uri_paths will be updated in-place
  ~ resource "aws_wafv2_regex_pattern_set" "valid_app_uri_paths" {
      ~ description = "Regex to match the app and api valid urls" -> "Regex to match the app valid urls"
        id          = "f3927a12-2101-47c6-9a47-7353ac95ba92"
        name        = "valid_app_uri_paths"
        tags        = {}
        # (4 unchanged attributes hidden)

      - regular_expression {
          - regex_string = "^\\/(?:en|fr)?\\/?(?:(admin|id|api|auth|signup|profile|forms|unsupported-browser|terms-of-use|contact|support|404)(?:\\/[\\w-]+)?)(?:\\/.*)?$" -> null
        }
      - regular_expression {
          - regex_string = "^\\/(?:en|fr)?\\/?(?:(form-builder|sla|unlock-publishing|terms-and-conditions|javascript-disabled)(?:\\/[\\w-]+)?)(?:\\/.*)?$" -> null
        }
      - regular_expression {
          - regex_string = "^\\/(?:v1)?\\/?(?:(docs|status))(?:\\/)?$" -> null
        }
      + regular_expression {
          + regex_string = "^\\/(?:en|fr)?\\/?(?:(admin|api|form-builder|forms|id|auth|profile|support|contact|unlock-publishing)(?:\\/[\\w-]+)?)(?:\\/.*)?$"
        }
      + regular_expression {
          + regex_string = "^\\/(?:en|fr)?\\/?(?:(sla|terms-and-conditions|terms-of-use|unsupported-browser|javascript-disabled|404)(?:\\/[\\w-]+)?)(?:\\/.*)?$"
        }

        # (3 unchanged blocks hidden)
    }

  # aws_wafv2_web_acl.forms_acl will be updated in-place
  ~ resource "aws_wafv2_web_acl" "forms_acl" {
        id                          = "88f61111-f91e-442b-9a19-c57c4f43ef7a"
        name                        = "GCForms"
        tags                        = {}
        # (9 unchanged attributes hidden)

      - rule {
          - name     = "AllowOnlyAppUrls" -> null
          - priority = 60 -> null

          - action {
              - block {
                }
            }

          - statement {
              - not_statement {
                  - statement {
                      - regex_pattern_set_reference_statement {
                          - arn = "arn:aws:wafv2:ca-central-1:957818836222:regional/regexpatternset/valid_app_uri_paths/f3927a12-2101-47c6-9a47-7353ac95ba92" -> null

                          - field_to_match {
                              - uri_path {}
                            }

                          - text_transformation {
                              - priority = 1 -> null
                              - type     = "COMPRESS_WHITE_SPACE" -> null
                            }
                          - text_transformation {
                              - priority = 2 -> null
                              - type     = "LOWERCASE" -> null
                            }
                        }
                    }
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "AllowOnlyAppUrls" -> null
              - sampled_requests_enabled   = false -> null
            }
        }
      - rule {
          - name     = "AWSManagedRulesAmazonIpReputationList" -> null
          - priority = 1 -> null

          - override_action {
              - none {}
            }

          - statement {
              - managed_rule_group_statement {
                  - name        = "AWSManagedRulesAmazonIpReputationList" -> null
                  - vendor_name = "AWS" -> null
                    # (1 unchanged attribute hidden)
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "AWSManagedRulesAmazonIpReputationList" -> null
              - sampled_requests_enabled   = true -> null
            }
        }
      - rule {
          - name     = "AWSManagedRulesKnownBadInputsRuleSet" -> null
          - priority = 40 -> null

          - override_action {
              - none {}
            }

          - statement {
              - managed_rule_group_statement {
                  - name        = "AWSManagedRulesKnownBadInputsRuleSet" -> null
                  - vendor_name = "AWS" -> null
                    # (1 unchanged attribute hidden)
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "AWSManagedRulesKnownBadInputsRuleSet" -> null
              - sampled_requests_enabled   = true -> null
            }
        }
      - rule {
          - name     = "AWSManagedRulesLinuxRuleSet" -> null
          - priority = 50 -> null

          - override_action {
              - none {}
            }

          - statement {
              - managed_rule_group_statement {
                  - name        = "AWSManagedRulesLinuxRuleSet" -> null
                  - vendor_name = "AWS" -> null
                    # (1 unchanged attribute hidden)
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "AWSManagedRulesLinuxRuleSet" -> null
              - sampled_requests_enabled   = true -> null
            }
        }
      + rule {
          + name     = "AllowOnlyApiUrls"
          + priority = 65

          + action {
              + block {
                }
            }

          + statement {
              + and_statement {
                  + statement {
                      + byte_match_statement {
                          + positional_constraint = "EXACTLY"
                          + search_string         = "api.forms-formulaires.alpha.canada.ca"

                          + field_to_match {
                              + single_header {
                                  + name = "host"
                                }
                            }

                          + text_transformation {
                              + priority = 1
                              + type     = "LOWERCASE"
                            }
                        }
                    }
                  + statement {
                      + not_statement {
                          + statement {
                              + regex_pattern_set_reference_statement {
                                  + arn = (known after apply)

                                  + field_to_match {
                                      + uri_path {}
                                    }

                                  + text_transformation {
                                      + priority = 1
                                      + type     = "COMPRESS_WHITE_SPACE"
                                    }
                                  + text_transformation {
                                      + priority = 2
                                      + type     = "LOWERCASE"
                                    }
                                }
                            }
                        }
                    }
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AllowOnlyApiUrls"
              + sampled_requests_enabled   = false
            }
        }
      + rule {
          + name     = "AllowOnlyAppUrls"
          + priority = 60

          + action {
              + block {
                }
            }

          + statement {
              + and_statement {
                  + statement {
                      + byte_match_statement {
                          + positional_constraint = "EXACTLY"
                          + search_string         = "forms-formulaires.alpha.canada.ca"

                          + field_to_match {
                              + single_header {
                                  + name = "host"
                                }
                            }

                          + text_transformation {
                              + priority = 1
                              + type     = "LOWERCASE"
                            }
                        }
                    }
                  + statement {
                      + not_statement {
                          + statement {
                              + regex_pattern_set_reference_statement {
                                  + arn = "arn:aws:wafv2:ca-central-1:957818836222:regional/regexpatternset/valid_app_uri_paths/f3927a12-2101-47c6-9a47-7353ac95ba92"

                                  + field_to_match {
                                      + uri_path {}
                                    }

                                  + text_transformation {
                                      + priority = 1
                                      + type     = "COMPRESS_WHITE_SPACE"
                                    }
                                  + text_transformation {
                                      + priority = 2
                                      + type     = "LOWERCASE"
                                    }
                                }
                            }
                        }
                    }
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AllowOnlyAppUrls"
              + sampled_requests_enabled   = false
            }
        }
      + rule {
          + name     = "AWSManagedRulesAmazonIpReputationList"
          + priority = 1

          + override_action {
              + none {}
            }

          + statement {
              + managed_rule_group_statement {
                  + name        = "AWSManagedRulesAmazonIpReputationList"
                  + vendor_name = "AWS"
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AWSManagedRulesAmazonIpReputationList"
              + sampled_requests_enabled   = true
            }
        }
      + rule {
          + name     = "AWSManagedRulesKnownBadInputsRuleSet"
          + priority = 40

          + override_action {
              + none {}
            }

          + statement {
              + managed_rule_group_statement {
                  + name        = "AWSManagedRulesKnownBadInputsRuleSet"
                  + vendor_name = "AWS"
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AWSManagedRulesKnownBadInputsRuleSet"
              + sampled_requests_enabled   = true
            }
        }
      + rule {
          + name     = "AWSManagedRulesLinuxRuleSet"
          + priority = 50

          + override_action {
              + none {}
            }

          + statement {
              + managed_rule_group_statement {
                  + name        = "AWSManagedRulesLinuxRuleSet"
                  + vendor_name = "AWS"
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AWSManagedRulesLinuxRuleSet"
              + sampled_requests_enabled   = true
            }
        }

        # (7 unchanged blocks hidden)
    }

  # module.waf_ip_blocklist.aws_cloudwatch_event_rule.ipv4_blocklist will be updated in-place
  ~ resource "aws_cloudwatch_event_rule" "ipv4_blocklist" {
        id                  = "ipv4_blocklist_forms_app"
        name                = "ipv4_blocklist_forms_app"
      ~ schedule_expression = "rate(2 hours)" -> "rate(15 minutes)"
        tags                = {
            "CostCentre" = "forms"
            "Terraform"  = "true"
        }
        # (9 unchanged attributes hidden)
    }

  # module.waf_ip_blocklist.aws_cloudwatch_log_metric_filter.ip_added_to_block_list will be created
  + resource "aws_cloudwatch_log_metric_filter" "ip_added_to_block_list" {
      + id             = (known after apply)
      + log_group_name = "/aws/lambda/ipv4_blocklist_forms_app"
      + name           = "IpAddedToBlockList"
      + pattern        = "\"[Metric] - New IP added to WAF IP Set\""

      + metric_transformation {
          + default_value = "0"
          + name          = "IpAddedToBlockList"
          + namespace     = "CDS_Platform"
          + unit          = "None"
          + value         = "1"
        }
    }

  # module.waf_ip_blocklist.aws_iam_policy.ipv4_blocklist will be updated in-place
  ~ resource "aws_iam_policy" "ipv4_blocklist" {
        id               = "arn:aws:iam::957818836222:policy/ipv4_blocklist_forms_app"
        name             = "ipv4_blocklist_forms_app"
      ~ policy           = jsonencode(
          ~ {
              ~ Statement = [
                    {
                        Action   = [
                            "athena:StartQueryExecution",
                            "athena:GetQueryResults",
                            "athena:GetQueryExecution",
                        ]
                        Effect   = "Allow"
                        Resource = "arn:aws:athena:ca-central-1:957818836222:workgroup/primary"
                        Sid      = "AthenaQueryAccess"
                    },
                  ~ {
                      ~ Resource = [
                          ~ "arn:aws:athena:ca-central-1:957818836222:catalog/AwsDataCatalog/database/access_logs/table/waf_logs" -> "arn:aws:athena:ca-central-1:957818836222:catalog/AwsDataCatalog/database/access_logs/table/*",
                            "arn:aws:athena:ca-central-1:957818836222:catalog/AwsDataCatalog/database/access_logs",
                        ]
                        # (3 unchanged attributes hidden)
                    },
                  ~ {
                      ~ Resource = [
                          ~ "arn:aws:glue:ca-central-1:957818836222:table/access_logs/waf_logs" -> "arn:aws:glue:ca-central-1:957818836222:table/access_logs/*",
                            "arn:aws:glue:ca-central-1:957818836222:database/access_logs",
                            # (1 unchanged element hidden)
                        ]
                        # (3 unchanged attributes hidden)
                    },
                    {
                        Action   = [
                            "logs:PutLogEvents",
                            "logs:CreateLogStream",
                        ]
                        Effect   = "Allow"
                        Resource = "arn:aws:logs:ca-central-1:957818836222:log-group:/aws/lambda/ipv4_blocklist_forms_app:*"
                        Sid      = "CloudWatchWriteAccess"
                    },
                    # (3 unchanged elements hidden)
                ]
                # (1 unchanged attribute hidden)
            }
        )
        tags             = {
            "CostCentre" = "forms"
            "Terraform"  = "true"
        }
        # (7 unchanged attributes hidden)
    }

  # module.waf_ip_blocklist.aws_lambda_function.ipv4_blocklist will be updated in-place
  ~ resource "aws_lambda_function" "ipv4_blocklist" {
        id                             = "ipv4_blocklist_forms_app"
      ~ last_modified                  = "2024-09-26T17:01:41.564+0000" -> (known after apply)
      ~ source_code_hash               = "fCJk+rUL/Gi+YyFakKfRGodgqUC5Mq5QYcxBi1huoa0=" -> "x+q+cCA6WdzkkfRRAAH785MD20xSWJM6+iYOPe/0x+U="
        tags                           = {
            "CostCentre" = "forms"
            "Terraform"  = "true"
        }
        # (27 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              + "ATHENA_LB_TABLE"      = "lb_logs"
              - "ATHENA_TABLE"         = "waf_logs" -> null
              + "ATHENA_WAF_TABLE"     = "waf_logs"
              ~ "BLOCK_THRESHOLD"      = "20" -> "50"
              + "QUERY_LB"             = "true"
              + "QUERY_WAF"            = "false"
                # (7 unchanged elements hidden)
            }
        }

        # (3 unchanged blocks hidden)
    }

Plan: 2 to add, 5 to change, 0 to destroy.

Changes to Outputs:
  + waf_ipv4_new_blocked_ip_metric_filter_name      = "IpAddedToBlockList"
  + waf_ipv4_new_blocked_ip_metric_filter_namespace = "CDS_Platform"

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_acm_certificate.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_acm_certificate.form_viewer_maintenance_mode"]
WARN - plan.json - main - Missing Common Tags: ["aws_acm_certificate.forms_api"]
WARN - plan.json - main - Missing Common Tags: ["aws_alb_listener_rule.forms_api"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudfront_distribution.maintenance_mode"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.firehose_waf_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_kinesis_firehose_delivery_stream.firehose_waf_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_listener.form_viewer_http"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_listener.form_viewer_https"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_target_group.form_viewer_1"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_target_group.form_viewer_2"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_target_group.forms_api"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_bucket.maintenance_mode"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_css_files[\"style.css\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_html_files[\"index-fr.html\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_html_files[\"index.html\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_ico_files[\"favicon.ico\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_svg_files[\"site-unavailable.svg\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_shield_protection.alb"]
WARN - plan.json - main - Missing Common Tags: ["aws_shield_protection.route53_hosted_zone[0]"]
WARN - plan.json - main - Missing...

Copy link

Production: app

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

Plan: 1 to add, 0 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_ecs_task_definition.form_viewer
Show plan
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_ecs_task_definition.form_viewer will be created
  + resource "aws_ecs_task_definition" "form_viewer" {
      + arn                      = (known after apply)
      + arn_without_revision     = (known after apply)
      + container_definitions    = jsonencode(
            [
              + {
                  + environment      = [
                      + {
                          + name  = "AUDIT_LOG_QUEUE_URL"
                          + value = "https://sqs.ca-central-1.amazonaws.com/957818836222/audit_log_queue"
                        },
                      + {
                          + name  = "COGNITO_CLIENT_ID"
                          + value = "5rkjd3us3ocssieiitdbtjitiv"
                        },
                      + {
                          + name  = "COGNITO_ENDPOINT_URL"
                          + value = "cognito-idp.ca-central-1.amazonaws.com/ca-central-1_eSTGTCw33"
                        },
                      + {
                          + name  = "EMAIL_ADDRESS_CONTACT_US"
                          + value = "[email protected]"
                        },
                      + {
                          + name  = "EMAIL_ADDRESS_SUPPORT"
                          + value = "[email protected]"
                        },
                      + {
                          + name  = "HOST_URL"
                          + value = "https://forms-formulaires.alpha.canada.ca"
                        },
                      + {
                          + name  = "METRIC_PROVIDER"
                          + value = "stdout"
                        },
                      + {
                          + name  = "NEXTAUTH_URL"
                          + value = "https://forms-formulaires.alpha.canada.ca"
                        },
                      + {
                          + name  = "RECAPTCHA_V3_SITE_KEY"
                          + value = "6LfuLrQnAAAAAK9Df3gem4XLMRVY2Laq6t2fhZhZ"
                        },
                      + {
                          + name  = "REDIS_URL"
                          + value = "gcforms-redis-rep-group.iyrckm.ng.0001.cac1.cache.amazonaws.com"
                        },
                      + {
                          + name  = "RELIABILITY_FILE_STORAGE"
                          + value = "forms-production-reliability-file-storage"
                        },
                      + {
                          + name  = "REPROCESS_SUBMISSION_QUEUE_URL"
                          + value = "https://sqs.ca-central-1.amazonaws.com/957818836222/reprocess_submission_queue.fifo"
                        },
                      + {
                          + name  = "TEMPLATE_ID"
                          + value = "92096ac6-1cc5-40ae-9052-fffdb8439a90"
                        },
                      + {
                          + name  = "TEMPORARY_TOKEN_TEMPLATE_ID"
                          + value = "61cec9c4-64ca-4e4d-b4d2-a0e931c44422"
                        },
                      + {
                          + name  = "TRACER_PROVIDER"
                          + value = "stdout"
                        },
                      + {
                          + name  = "VAULT_FILE_STORAGE"
                          + value = "forms-production-vault-file-storage"
                        },
                      + {
                          + name  = "ZITADEL_PROVIDER"
                          + value = "https://auth.forms-formulaires.alpha.canada.ca"
                        },
                    ]
                  + essential        = true
                  + image            = "957818836222.dkr.ecr.ca-central-1.amazonaws.com/form_viewer_production"
                  + linuxParameters  = {
                      + capabilities = {
                          + add  = []
                          + drop = [
                              + "ALL",
                            ]
                        }
                    }
                  + logConfiguration = {
                      + logDriver = "awslogs"
                      + options   = {
                          + awslogs-group         = "Forms"
                          + awslogs-region        = "ca-central-1"
                          + awslogs-stream-prefix = "ecs-form-viewer"
                        }
                    }
                  + mountPoints      = []
                  + name             = "form_viewer"
                  + portMappings     = [
                      + {
                          + containerPort = 3000
                          + hostPort      = 3000
                          + protocol      = "tcp"
                        },
                    ]
                  + secrets          = [
                      + {
                          + name      = "DATABASE_URL"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:server-database-url-jVtWGE"
                        },
                      + {
                          + name      = "FRESHDESK_API_KEY"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:freshdesk_api_key-2Q118n"
                        },
                      + {
                          + name      = "GC_NOTIFY_CALLBACK_BEARER_TOKEN"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:notify_callback_bearer_token-sWF9yQ"
                        },
                      + {
                          + name      = "NOTIFY_API_KEY"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:notify_api_key-sLtddr"
                        },
                      + {
                          + name      = "RECAPTCHA_V3_SECRET_KEY"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:recaptcha_secret-LxfCjN"
                        },
                      + {
                          + name      = "SENTRY_API_KEY"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:sentry_api_key-zulAvy"
                        },
                      + {
                          + name      = "TOKEN_SECRET"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:token_secret-jw4Dou"
                        },
                      + {
                          + name      = "ZITADEL_ADMINISTRATION_KEY"
                          + valueFrom = "arn:aws:secretsmanager:ca-central-1:957818836222:secret:zitadel_administration_key-7rE09g"
                        },
                    ]
                  + systemControls   = []
                  + volumesFrom      = []
                },
            ]
        )
      + cpu                      = "2048"
      + execution_role_arn       = "arn:aws:iam::957818836222:role/form-viewer"
      + family                   = "form-viewer"
      + id                       = (known after apply)
      + memory                   = "4096"
      + network_mode             = "awsvpc"
      + requires_compatibilities = [
          + "FARGATE",
        ]
      + revision                 = (known after apply)
      + skip_destroy             = false
      + tags_all                 = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + task_role_arn            = "arn:aws:iam::957818836222:role/form-viewer"
      + track_latest             = false
    }

Plan: 1 to add, 0 to change, 0 to destroy.

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_appautoscaling_target.forms[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_codedeploy_app.app"]
WARN - plan.json - main - Missing Common Tags: ["aws_codedeploy_deployment_group.app"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecs_cluster.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecs_service.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecs_task_definition.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.cognito"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_dynamodb"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_kms"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_s3"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_secrets_manager"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_sqs"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.codedeploy"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.forms"]

34 tests, 19 passed, 15 warnings, 0 failures, 0 exceptions

Copy link

Production: alarms

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

Plan: 1 to add, 1 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_cloudwatch_metric_alarm.ip_added_to_block_list
update aws_cloudwatch_log_subscription_filter.api_error_detection
Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place

Terraform will perform the following actions:

  # aws_cloudwatch_log_subscription_filter.api_error_detection will be updated in-place
  ~ resource "aws_cloudwatch_log_subscription_filter" "api_error_detection" {
      ~ filter_pattern  = "level=error" -> "{($.level = \"warn\") || ($.level = \"error\")}"
        id              = "cwlsf-973426895"
        name            = "error_detection_in_api_logs"
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.ip_added_to_block_list will be created
  + resource "aws_cloudwatch_metric_alarm" "ip_added_to_block_list" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "WAF - IP(s) Has been added to the dynamic block list."
      + alarm_name                            = "IpAddedToBlockList"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanThreshold"
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "default"
      + namespace                             = "default"
      + period                                = 900
      + statistic                             = "Sum"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 1
      + treat_missing_data                    = "notBreaching"
    }

Plan: 1 to add, 1 to change, 0 to destroy.

Warning: Argument is deprecated

  with module.athena_bucket.aws_s3_bucket.this,
  on .terraform/modules/athena_bucket/S3/main.tf line 8, in resource "aws_s3_bucket" "this":
   8: resource "aws_s3_bucket" "this" {

Use the aws_s3_bucket_lifecycle_configuration resource instead

(and 3 more similar warnings elsewhere)

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_athena_data_catalog.dynamodb"]
WARN - plan.json - main - Missing Common Tags: ["aws_athena_data_catalog.rds_data_catalog"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.codedeploy_sns"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.notify_slack"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ELB_5xx_error_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ELB_healthy_hosts"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.UnHealthyHostCount-TargetGroup1"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.UnHealthyHostCount-TargetGroup2"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.alb_ddos"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.api_audit_log_dead_letter_queue_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.api_cpu_utilization_high_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.api_lb_healthy_host_count"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.api_lb_unhealthy_host_count"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.api_memory_utilization_high_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.api_response_time_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.audit_log_dead_letter_queue_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.cognito_login_outside_canada_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.cognito_signin_exceeded"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ddos_detected_forms_warn"]
WARN - plan.json - main - Missing Common Tags:...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants