Azure / terraform-azurerm-caf-enterprise-scale

Azure landing zones Terraform module
https://aka.ms/alz/tf
MIT License
798 stars 517 forks source link

Question: How to deploy just the policies and landing zones without the resources using multi-subscription? #395

Closed JCP13 closed 2 years ago

JCP13 commented 2 years ago

Community Note

Greetings,

I would like to deploy just the policies and landing zones without the connectivity and management resources using multi-subscription. I was thinking something like this:

module "enterprise_scale" { source = "Azure/caf-enterprise-scale/azurerm" version = "2.0.2"

providers = { azurerm = azurerm azurerm.connectivity = azurerm azurerm.management = azurerm }

root_parent_id = data.azurerm_client_config.core.tenant_id root_id = var.root_id root_name = var.root_name

deploy_connectivity_resources = false subscription_id_connectivity = 0000000-0000-0000-0000-000000000000

deploy_management_resources = false subscription_id_management = 111111111-111111-11111-1111-1111111111111111

deploy_identity_resources = false subscription_id_identity = 2222222-2222-2222-2222-2222222222222

but it does not work.

what is the best way of doing this?

Thank you in advance.

krowlandson commented 2 years ago

Hi @JCP13 ... this looks OK to me.

Are you able to confirm what you're expecting, and what you're observing that differs from expectation?

Based on the above, I would expect to see the 3 Subscriptions mapped above moved into their respective Management Groups (assuming you're using valid Subscription IDs šŸ˜‰).

To offer a slight variation on the above which I know works as designed, please try the following with your own Subscription values for the Subscription ID input variables:

# The following variables allow customisation of the
# deployment

variable "root_id" {
  type        = string
  description = "Sets the value used for generating unique resource naming within the module."
  default     = "my-org"
}

variable "root_name" {
  type        = string
  description = "Sets the display name of the \"root\" Management Group."
  default     = "My Organization"
}

variable "subscription_id_connectivity" {
  type        = string
  description = "Sets the subscription ID to use for deploying \"connectivity\" resources."
  default     = ""
}

variable "subscription_id_identity" {
  type        = string
  description = "Sets the subscription ID to use for deploying \"identity\" resources."
  default     = ""
}

variable "subscription_id_management" {
  type        = string
  description = "Sets the subscription ID to use for deploying \"management\" resources."
  default     = ""
}

# The following locals are used to establish the subscription_id
# for each provider

locals {
  subscription_id_management   = coalesce(var.subscription_id_management, data.azurerm_client_config.current.subscription_id)
  subscription_id_connectivity = coalesce(var.subscription_id_connectivity, local.subscription_id_management)
  subscription_id_identity     = coalesce(var.subscription_id_identity, local.subscription_id_management)
}

# The following providers are mapped into the module but may
# all map to the same Subscription depending on what values
# are provided in the variables

provider "azurerm" {
  features {}
}

provider "azurerm" {
  alias = "connectivity"
  features {}

  subscription_id = local.subscription_id_connectivity
}

provider "azurerm" {
  alias = "identity"
  features {}

  subscription_id = local.subscription_id_identity
}

provider "azurerm" {
  alias = "management"
  features {}

  subscription_id = local.subscription_id_management
}

# Client config object used to extract Tenant ID
# and current Subscription ID used for logic within
# the locals and module

data "azurerm_client_config" "current" {
}

# caf-enterprise-scale module declaration
module "enterprise_scale" {
  source  = "Azure/caf-enterprise-scale/azurerm"
  version = "2.0.2"

  providers = {
    azurerm              = azurerm
    azurerm.connectivity = azurerm.connectivity
    azurerm.management   = azurerm.management
  }

  root_parent_id = data.azurerm_client_config.current.tenant_id
  root_id        = var.root_id
  root_name      = var.root_name

  deploy_connectivity_resources = false
  subscription_id_connectivity  = local.subscription_id_connectivity

  deploy_management_resources = false
  subscription_id_management  = local.subscription_id_management

  deploy_identity_resources = false
  subscription_id_identity  = local.subscription_id_identity

}
JCP13 commented 2 years ago

Hi @krowlandson, I was able to get it to work by do this:

root_parent_id = data.azurerm_client_config.core.tenant_id root_id = var.root_id root_name = var.root_name

deploy_connectivity_resources = false subscription_id_connectivity = 0000000-0000-0000-0000-000000000000 configure_connectivity_resources = local.configure_connectivity_resources

deploy_management_resources = false subscription_id_management = 111111111-111111-11111-1111-1111111111111111 configure_management_resources = local.configure_management_resources

deploy_identity_resources = false subscription_id_identity = 2222222-2222-2222-2222-2222222222222 configure_identity_resources = local.configure_identity_resources

I just disabled everything in the settings.connectivity.tf, settings.identity.tf, and settings.management.tf.

I will try what you suggested and get back to you.

Thank you for your help :)

JCP13 commented 2 years ago

Hi @krowlandson, that worked, thank you. What I was missing the first time was:

locals { subscription_id_management = coalesce(var.subscription_id_management, data.azurerm_client_config.current.subscription_id) subscription_id_connectivity = coalesce(var.subscription_id_connectivity, local.subscription_id_management) subscription_id_identity = coalesce(var.subscription_id_identity, local.subscription_id_management) }

Also in this situation when you run the terraform apply, do not use -parallelism. It will fail because a policy is doing something and there will be conflicts.

Thank you for the help.

Cheers!

JCP13 commented 2 years ago

Hi @krowlandson , I spoke too soon; your solution did not work as I expected. I'm going to blame it on Friday afternoon fever, lol. I must have mixed it up with other solutions that I was working on; sorry about that.

After some modifications it still continued to deploy the resources to the subscriptions. I think the logic for deploy_connectivity_resources, deploy_identity_resources, and deploy_management_resources is not working correctly. When set to "false" it still deploys the resources. For now I rolled it back to my previous solution.

Also, when I made these changes:

locals { subscription_id_management = coalesce(var.subscription_id_management, data.azurerm_client_config.current.subscription_id) subscription_id_connectivity = coalesce(var.subscription_id_connectivity, local.subscription_id_management) subscription_id_identity = coalesce(var.subscription_id_identity, local.subscription_id_management) }

I get these errors:

ā”‚ Error: Self-referencing local value ā”‚ ā”‚ on main.tf line 13, in locals: ā”‚ 13: subscription_id_management = coalesce(var.subscription_id_management, local.subscription_id_management) ā”‚ ā”‚ Local value local.subscription_id_management cannot use its own result as part of its expression. ā•µ ā•· ā”‚ Error: Self-referencing local value ā”‚ ā”‚ on main.tf line 14, in locals: ā”‚ 14: subscription_id_connectivity = coalesce(var.subscription_id_connectivity, local.subscription_id_connectivity) ā”‚ ā”‚ Local value local.subscription_id_connectivity cannot use its own result as part of its expression.

so I just excluded it and made the appropriate modifications to test the solution.
Any thoughts to what could be the issue?

Thanks

krowlandson commented 2 years ago

Hi @JCP13... are you able to confirm which resources are being deployed which you are not expecting?

If I add the following to the example code I provided previously, Terraform will output an easy to digest list of resource IDs showing what will be created:

output "resource_ids" {
  description = "Map containing resource IDs for all resources created by this module."
  value = {
    for module_name, module_output in {
      test_core = module.enterprise_scale
    } :
    module_name => {
      for resource_type, resource_instances in module_output :
      resource_type => {
        for resource_name, resource_configs in resource_instances :
        resource_name => keys(resource_configs)
      }
    }
  }
}

As you can see, this results in the following resources being created:

  + resource_ids = {
      + test_core = {
          + azurerm_automation_account                    = {
              + management = []
            }
          + azurerm_dns_zone                              = {
              + connectivity = []
            }
          + azurerm_express_route_gateway                 = {
              + virtual_wan = []
            }
          + azurerm_firewall                              = {
              + connectivity = []
              + virtual_wan  = []
            }
          + azurerm_firewall_policy                       = {
              + connectivity = []
              + virtual_wan  = []
            }
          + azurerm_log_analytics_linked_service          = {
              + management = []
            }
          + azurerm_log_analytics_solution                = {
              + management = []
            }
          + azurerm_log_analytics_workspace               = {
              + management = []
            }
          + azurerm_management_group                      = {
              + level_1 = [
                  + "/providers/Microsoft.Management/managementGroups/my-org",
                ]
              + level_2 = [
                  + "/providers/Microsoft.Management/managementGroups/my-org-decommissioned",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones",
                  + "/providers/Microsoft.Management/managementGroups/my-org-platform",
                  + "/providers/Microsoft.Management/managementGroups/my-org-sandboxes",
                ]
              + level_3 = [
                  + "/providers/Microsoft.Management/managementGroups/my-org-connectivity",
                  + "/providers/Microsoft.Management/managementGroups/my-org-identity",
                  + "/providers/Microsoft.Management/managementGroups/my-org-management",
                ]
              + level_4 = []
              + level_5 = []
              + level_6 = []
            }
          + azurerm_management_group_policy_assignment    = {
              + enterprise_scale = [
                  + "/providers/Microsoft.Management/managementGroups/my-org-connectivity/providers/Microsoft.Authorization/policyAssignments/Enable-DDoS-VNET",
                  + "/providers/Microsoft.Management/managementGroups/my-org-identity/providers/Microsoft.Authorization/policyAssignments/Deny-Public-IP",
                  + "/providers/Microsoft.Management/managementGroups/my-org-identity/providers/Microsoft.Authorization/policyAssignments/Deny-RDP-From-Internet",
                  + "/providers/Microsoft.Management/managementGroups/my-org-identity/providers/Microsoft.Authorization/policyAssignments/Deny-Subnet-Without-Nsg",
                  + "/providers/Microsoft.Management/managementGroups/my-org-identity/providers/Microsoft.Authorization/policyAssignments/Deploy-VM-Backup",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deny-IP-Forwarding",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deny-Priv-Containers-AKS",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deny-Priv-Escalation-AKS",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deny-RDP-From-Internet",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deny-Storage-http",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deny-Subnet-Without-Nsg",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deploy-AKS-Policy",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deploy-SQL-DB-Auditing",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deploy-SQL-Threat",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Deploy-VM-Backup",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Enable-DDoS-VNET",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Enforce-AKS-HTTPS",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/policyAssignments/Enforce-TLS-SSL",
                  + "/providers/Microsoft.Management/managementGroups/my-org-management/providers/Microsoft.Authorization/policyAssignments/Deploy-Log-Analytics",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-ASC-Monitoring",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-AzActivity-Log",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-LX-Arc-Monitoring",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-MDFC-Config",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-Resource-Diag",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-VM-Monitoring",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-VMSS-Monitoring",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyAssignments/Deploy-WS-Arc-Monitoring",
                ]
            }
          + azurerm_network_ddos_protection_plan          = {
              + connectivity = []
            }
          + azurerm_policy_definition                     = {
              + enterprise_scale = [
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Append-AppService-httpsonly",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Append-AppService-latestTLS",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Append-KV-SoftDelete",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Append-Redis-disableNonSslPort",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Append-Redis-sslEnforcement",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Audit-MachineLearning-PrivateEndpointId",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-AA-child-resources",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-AppGW-Without-WAF",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-AppServiceApiApp-http",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-AppServiceFunctionApp-http",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-AppServiceWebApp-http",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Databricks-NoPublicIp",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Databricks-Sku",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Databricks-VirtualNetwork",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-Aks",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-Compute-SubnetId",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-Compute-VmSize",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-ComputeCluster-RemoteLoginPortPublicAccess",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-ComputeCluster-Scale",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-HbiWorkspace",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-PublicAccessWhenBehindVnet",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-PublicNetworkAccess",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-MySql-http",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-PostgreSql-http",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Private-DNS-Zones",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-PublicEndpoint-MariaDB",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-PublicIP",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-RDP-From-Internet",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Redis-http",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Sql-minTLS",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-SqlMi-minTLS",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Storage-minTLS",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Subnet-Without-Nsg",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-Subnet-Without-Udr",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-VNET-Peer-Cross-Sub",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-VNET-Peering-To-Non-Approved-VNETs",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deny-VNet-Peering",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-ASC-SecurityContacts",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Budget",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Custom-Route-Table",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-DDoSProtection",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-AA",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-ACI",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-ACR",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-APIMgmt",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-AnalysisService",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-ApiForFHIR",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-ApplicationGateway",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-CDNEndpoints",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-CognitiveServices",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-CosmosDB",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-DLAnalytics",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-DataExplorerCluster",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-DataFactory",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-Databricks",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-EventGridSub",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-EventGridSystemTopic",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-EventGridTopic",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-ExpressRoute",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-Firewall",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-FrontDoor",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-Function",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-HDInsight",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-LoadBalancer",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-LogicAppsISE",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-MariaDB",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-MediaService",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-MlWorkspace",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-MySQL",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-NIC",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-NetworkSecurityGroups",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-PostgreSQL",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-PowerBIEmbedded",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-RedisCache",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-Relay",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-SQLElasticPools",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-SQLMI",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-SignalR",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-TimeSeriesInsights",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-TrafficManager",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-VM",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-VMSS",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-VNetGW",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-VirtualNetwork",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-WVDAppGroup",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-WVDHostPools",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-WVDWorkspace",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-WebServerFarm",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-Website",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Diagnostics-iotHub",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-FirewallPolicy",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-MySQL-sslEnforcement",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Nsg-FlowLogs",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Nsg-FlowLogs-to-LA",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-PostgreSQL-sslEnforcement",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-SQL-minTLS",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Sql-AuditingSettings",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Sql-SecurityAlertPolicies",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Sql-Tde",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Sql-vulnerabilityAssessments",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-SqlMi-minTLS",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Storage-sslEnforcement",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-VNET-HubSpoke",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policyDefinitions/Deploy-Windows-DomainJoin",
                ]
            }
          + azurerm_policy_set_definition                 = {
              + enterprise_scale = [
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policySetDefinitions/Deny-PublicPaaSEndpoints",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policySetDefinitions/Deploy-Diagnostics-LogAnalytics",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policySetDefinitions/Deploy-MDFC-Config",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policySetDefinitions/Deploy-Private-DNS-Zones",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policySetDefinitions/Deploy-Sql-Security",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policySetDefinitions/Enforce-EncryptTransit",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/policySetDefinitions/Enforce-Encryption-CMK",
                ]
            }
          + azurerm_private_dns_zone                      = {
              + connectivity = []
            }
          + azurerm_private_dns_zone_virtual_network_link = {
              + connectivity = []
            }
          + azurerm_public_ip                             = {
              + connectivity = []
            }
          + azurerm_resource_group                        = {
              + connectivity = []
              + management   = []
              + virtual_wan  = []
            }
          + azurerm_role_assignment                       = {
              + enterprise_scale  = []
              + policy_assignment = [
                  + "/providers/Microsoft.Management/managementGroups/my-org-connectivity/providers/Microsoft.Authorization/roleAssignments/08e90ef2-b1a5-56ad-b11b-bf7ba5fa21e9",
                  + "/providers/Microsoft.Management/managementGroups/my-org-identity/providers/Microsoft.Authorization/roleAssignments/139f25fe-bd86-5e6b-b15e-1c6743190bf2",
                  + "/providers/Microsoft.Management/managementGroups/my-org-identity/providers/Microsoft.Authorization/roleAssignments/5c82b4ec-7d94-5197-950b-811ae07108f5",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/roleAssignments/1daf6b1a-f0d2-5c58-bd72-5d4e368b9dd1",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/roleAssignments/21b4c3e8-6528-504f-9ddf-d33a9079f822",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/roleAssignments/4d0325a8-5da5-566f-8c40-3e8ccfe967cd",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/roleAssignments/9367d78a-8a02-5024-9c9f-bca08e198ce8",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/roleAssignments/cfeb753d-e0ab-537f-8199-bc28ba373eff",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/roleAssignments/dfae0078-a4f2-5b05-9033-b61494c53234",
                  + "/providers/Microsoft.Management/managementGroups/my-org-landing-zones/providers/Microsoft.Authorization/roleAssignments/ed7d3b8d-7cc0-5292-8094-309ca17d68de",
                  + "/providers/Microsoft.Management/managementGroups/my-org-management/providers/Microsoft.Authorization/roleAssignments/5dd850dd-f9be-5a7e-ba6e-8095aa5bc2b6",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/03a57e31-6753-5962-a4c3-2fb3d8a2c537",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/18d09a49-24b8-5c33-a820-55e5a6d80963",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/293ff7e9-156f-55ab-88a2-100d6876fc4b",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/39fc4a63-e6c5-5176-9395-66d8a8e6cece",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/44ab414f-8e76-5d11-96b0-4b514b274fd1",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/6533003a-7ec6-554f-9d10-8fb610a34507",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/8698eadd-f1c1-5a63-a0b1-ac4ab89250d8",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/a39d7993-0f9d-579d-bc80-ae0be8fee396",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/b75ff276-95e1-5176-971d-14a1d5a92ff4",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/f58ef0a8-96ff-510a-83d1-242e19af5760",
                  + "/providers/Microsoft.Management/managementGroups/my-org/providers/Microsoft.Authorization/roleAssignments/fabff9e1-b183-5314-8963-2894306a64d9",
                ]
            }
          + azurerm_role_definition                       = {
              + enterprise_scale = [
                  + "/providers/Microsoft.Authorization/roleDefinitions/267c885c-a4d9-5276-8a00-96d73b4c144e",
                  + "/providers/Microsoft.Authorization/roleDefinitions/5d952caf-b5fd-5442-ac41-82ed1ecea192",
                  + "/providers/Microsoft.Authorization/roleDefinitions/e2a32c21-94ca-5110-9882-ef7ca2166270",
                  + "/providers/Microsoft.Authorization/roleDefinitions/f5418c1c-e71f-5efb-88d7-b17a5806b5ed",
                  + "/providers/Microsoft.Authorization/roleDefinitions/fb032985-b875-556c-abf8-033ddec8b3f4",
                ]
            }
          + azurerm_subnet                                = {
              + connectivity = []
            }
          + azurerm_virtual_hub                           = {
              + virtual_wan = []
            }
          + azurerm_virtual_hub_connection                = {
              + virtual_wan = []
            }
          + azurerm_virtual_network                       = {
              + connectivity = []
            }
          + azurerm_virtual_network_gateway               = {
              + connectivity = []
            }
          + azurerm_virtual_network_peering               = {
              + connectivity = []
            }
          + azurerm_virtual_wan                           = {
              + virtual_wan = []
            }
          + azurerm_vpn_gateway                           = {
              + virtual_wan = []
            }
        }
    }

As you can see, there are no connectivity, management or virtual_wan resources being listed.

As an aside, all of the deploy_******_resources input variables are set to false so you don't technically need to declare these when you don't want any of the additional resources to be created in your Management and Connectivity Susbcriptions.

Also, there are technically no resources for Identity as we currently only configure the policies relating to this scope.

JCP13 commented 2 years ago

Hi @krowlandson,

I started from scratch and isolated it from my larger code base. As it turns out the extra code I added was causing some of the errors. Your original code does work as expected. Sorry for the false alarm :)

The only change that I made from your code was this:

locals { subscription_id_management = var.subscription_id_management subscription_id_connectivity = var.subscription_id_connectivity subscription_id_identity = var.subscription_id_identity }

I already knew subscription I want to use.

Also, thank you for the code snippet, this will be great for troubleshooting.

Thank you again,

Cheers.