modules/secops-rules/main.tf (69 lines of code) (raw):
/**
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
locals {
_secops_rules_path = pathexpand(coalesce(var.factories_config.rules_defs, "-"))
reference_lists = try(yamldecode(file(var.factories_config.reference_lists)), var.reference_lists_config)
reference_lists_entries = {
for k, v in local.reference_lists : k => split("\n", file("${var.factories_config.reference_lists_defs}/${k}.txt"))
}
reference_list_type_mapping = {
STRING = "REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING"
REGEX = "REFERENCE_LIST_SYNTAX_TYPE_REGEX"
CIDR = "REFERENCE_LIST_SYNTAX_TYPE_CIDR"
}
secops_rules = {
for file_name in fileset(local._secops_rules_path, "*.yaral") :
replace(file_name, ".yaral", "") => file("${local._secops_rules_path}/${file_name}")
}
secops_rule_deployment = try(yamldecode(file(var.factories_config.rules)), var.rules_config)
}
resource "google_chronicle_reference_list" "default" {
for_each = local.reference_lists
project = var.project_id
location = var.tenant_config.region
instance = var.tenant_config.customer_id
reference_list_id = each.key
description = each.value.description
dynamic "entries" {
for_each = local.reference_lists_entries[each.key]
content {
value = entries.value
}
}
syntax_type = local.reference_list_type_mapping[each.value.type]
}
resource "google_chronicle_rule" "default" {
for_each = local.secops_rule_deployment
project = var.project_id
location = var.tenant_config.region
instance = var.tenant_config.customer_id
text = local.secops_rules[each.key]
deletion_policy = "FORCE"
depends_on = [
google_chronicle_reference_list.default
]
}
resource "google_chronicle_rule_deployment" "default" {
for_each = local.secops_rule_deployment
project = var.project_id
location = var.tenant_config.region
instance = var.tenant_config.customer_id
rule = google_chronicle_rule.default[each.key].rule_id
enabled = each.value.enabled
alerting = each.value.alerting
archived = each.value.archived
run_frequency = each.value.run_frequency
}