main.tf (108 lines of code) (raw):

resource "azurerm_resource_group" "management" { count = var.resource_group_creation_enabled ? 1 : 0 location = var.location name = var.resource_group_name tags = var.tags } resource "azurerm_log_analytics_workspace" "management" { location = var.location name = var.log_analytics_workspace_name resource_group_name = local.resource_group_name allow_resource_only_permissions = var.log_analytics_workspace_allow_resource_only_permissions cmk_for_query_forced = var.log_analytics_workspace_cmk_for_query_forced daily_quota_gb = var.log_analytics_workspace_daily_quota_gb internet_ingestion_enabled = var.log_analytics_workspace_internet_ingestion_enabled internet_query_enabled = var.log_analytics_workspace_internet_query_enabled local_authentication_disabled = var.log_analytics_workspace_local_authentication_disabled reservation_capacity_in_gb_per_day = var.log_analytics_workspace_reservation_capacity_in_gb_per_day retention_in_days = var.log_analytics_workspace_retention_in_days sku = var.log_analytics_workspace_sku tags = var.tags } resource "azurerm_automation_account" "management" { count = var.linked_automation_account_creation_enabled ? 1 : 0 location = coalesce(var.automation_account_location, var.location) name = var.automation_account_name resource_group_name = local.resource_group_name sku_name = var.automation_account_sku_name local_authentication_enabled = var.automation_account_local_authentication_enabled public_network_access_enabled = var.automation_account_public_network_access_enabled tags = var.tags dynamic "encryption" { for_each = var.automation_account_encryption == null ? [] : ["Encryption"] content { key_vault_key_id = var.automation_account_encryption.key_vault_key_id user_assigned_identity_id = var.automation_account_encryption.user_assigned_identity_id } } dynamic "identity" { for_each = var.automation_account_identity == null ? [] : ["Identity"] content { type = var.automation_account_identity.type identity_ids = var.automation_account_identity.identity_ids } } } resource "azurerm_log_analytics_linked_service" "management" { count = var.linked_automation_account_creation_enabled ? 1 : 0 resource_group_name = local.resource_group_name workspace_id = azurerm_log_analytics_workspace.management.id read_access_id = azurerm_automation_account.management[0].id write_access_id = null } resource "azurerm_log_analytics_solution" "management" { for_each = { for plan in toset(var.log_analytics_solution_plans) : "${plan.publisher}/${plan.product}" => plan } location = var.location resource_group_name = local.resource_group_name solution_name = basename(each.value.product) workspace_name = var.log_analytics_workspace_name workspace_resource_id = azurerm_log_analytics_workspace.management.id tags = var.tags plan { product = each.value.product publisher = each.value.publisher } depends_on = [ azurerm_log_analytics_linked_service.management, ] } resource "azapi_resource" "sentinel_onboarding" { count = var.sentinel_onboarding != null ? 1 : 0 type = "Microsoft.SecurityInsights/onboardingStates@2024-03-01" body = { properties = { customerManagedKey = var.sentinel_onboarding.customer_managed_key_enabled } } name = var.sentinel_onboarding.name parent_id = azurerm_log_analytics_workspace.management.id timeouts { create = var.timeouts.sentinel_onboarding.create delete = var.timeouts.sentinel_onboarding.delete read = var.timeouts.sentinel_onboarding.read update = var.timeouts.sentinel_onboarding.update } } resource "azurerm_user_assigned_identity" "management" { for_each = local.user_assigned_managed_identities location = each.value.location name = each.value.name resource_group_name = local.resource_group_name tags = each.value.tags } resource "azapi_resource" "data_collection_rule" { for_each = local.data_collection_rules type = each.value.type body = each.value.body location = each.value.location name = each.value.name parent_id = local.resource_group_resource_id schema_validation_enabled = each.value.schema_validation_enabled tags = each.value.tags timeouts { create = var.timeouts.data_collection_rule.create delete = var.timeouts.data_collection_rule.delete read = var.timeouts.data_collection_rule.read update = var.timeouts.data_collection_rule.update } }