Paul K space : LandingZone Royale - May the best ideas win.....

:trello: Trello Tickets

Arising from this request , with previous engagements under our belt and it seems like ALOT of interested parties, we have an opportunity to pull all the information that is in the business together and transform the current silent disco of repositories into some kind of huge banging rave….. of code….

I would like to invite cross-practice anyone that’s interested to show their interest by adding their names to the confluence document - and if there is as much interest as I hope, we can get a call on, choose our weapons and do battle……

  • Previous client engagements - feedback about what was done, how well it was received and any learning could only benefit the discussion

  • Client Enquiries - what have clients wanted or not wanted at the initial discussion level

  • Delivery - have you delivered LZs - who used them - what functions and services did you implement - what was the operation and impact - any design patterns

I’d like to offer the platform to anyone who can help make this a fun battle to the death… I mean discussion

Description

  • Summarise the code
  • Summarise delivery mechanisms
  • Highlight Success/Failures

As a:* Azure Senior/Principle Consultant
I want:* to understand what collateral/artifacts we already have in Contino Github repositories from landing zone perspective.
So that:* We can clearly map/present what we have presently, in order to provide recommendations on how to optimise and improve future Azure LZ Deployments.


Context

  • Collate project engagement docs
  • Collate design documents

What existing collateral do we have in Contino in relation to Azure LZ design and deployments. Do we have any re-usable code that we have used as part of customer engagements as there is a plan to create our own Contino bespoke Azure LZ that can be deployed and consumed in Contino customer environments which are usually in highly regulated and governed areas.


Constraints

  • Opportunity for Engineers to bring together disparate offerings into an important set of pre-sales, technical and delivery components
  • Collateral may existing in various repositories making it harder to understand what code/collateral we have today.

  • This may involve reaching out to numerous stakeholders within Contino.

  • Knowledge/notes of this deployment may also reside in various areas causing disconnect, whereby we really need to centralise knowledge as we did for AMI/Container bakery design. For example: Contino bakery mini squad


Acceptance Criteria

  • Map the various implementation components and interdependencies
  • Align code into maybe pluggable modules
  • Product-ise the elements as a well reviewed, tested and consistent set of complimentary elements
  • leverage the multiple technologies used to provide amore dynamic solution
  • Visualise where we currently have collateral/artifacts from an Azure Landing Zone perspective in Contino, be it a mind-map, Miro board, etc - so this can aid other Contini’s going on a similar discovery journey.

  • Ideally test and deploy the existing collateral to see if the code is viable for future development or not.

  • Offer your own recommendations and improvements as part of a future work-stream to develop a Contino Azure Landing Zone which will act as a core design and deployment framework to be consumed in future/existing customers. This will also aid/support our sales teams to market this collateral.

tree of current LZ repos
├── azure-caf-bicep-landingzone
│   ├── CONTRIBUTING.md
│   ├── README.md
│   ├── collections
│   │   ├── governance
│   │   │   └── main.bicep
│   │   ├── hub_core
│   │   │   └── main.bicep
│   │   ├── logging_core
│   │   │   └── main.bicep
│   │   ├── mgmt_env
│   │   │   ├── README.md
│   │   │   └── main.bicep
│   │   ├── mgmt_root
│   │   │   └── main.bicep
│   │   └── spoke_core
│   │       └── main.bicep
│   ├── modules
│   │   ├── aks
│   │   │   └── aks.bicep
│   │   ├── firewall
│   │   │   └── firewall.bicep
│   │   ├── firewall_aks_egress
│   │   │   └── main.bicep
│   │   ├── keyvault
│   │   │   └── keyvault.bicep
│   │   ├── management_group
│   │   │   └── management_group.bicep
│   │   ├── network_watcher
│   │   │   └── network_watcher.bicep
│   │   ├── nsg
│   │   │   └── nsg.bicep
│   │   ├── peering
│   │   │   ├── hub_to_spoke.bicep
│   │   │   └── spoke_to_hub.bicep
│   │   ├── policies
│   │   │   ├── assigments
│   │   │   │   └── policy_assignment.bicep
│   │   │   ├── definitions
│   │   │   │   ├── resources
│   │   │   │   │   ├── allowed-resources-location.bicep
│   │   │   │   │   └── deny-resources-without-tags.bicep
│   │   │   │   └── storageaccount
│   │   │   │       ├── allow-https.bicep
│   │   │   │       └── enable-geo-redundant-storage.bicep
│   │   │   └── initiatives
│   │   │       ├── resources
│   │   │       │   └── resources_policy_initiative.bicep
│   │   │       └── storage
│   │   │           └── storage_policy_initiative.bicep
│   │   ├── route_table
│   │   │   └── route_table.bicep
│   │   ├── storage
│   │   │   └── storage.bicep
│   │   ├── vnet
│   │   │   └── vnet.bicep
│   │   └── workspace
│   │       └── workspace.bicep
│   ├── org
│   │   ├── caf_dev
│   │   │   ├── governance
│   │   │   │   └── main.bicep.parameters.json
│   │   │   ├── hub_core
│   │   │   │   └── main.bicep.parameters.json
│   │   │   ├── logging_core
│   │   │   │   └── main.bicep.parameters.json
│   │   │   ├── mgmt_env
│   │   │   │   └── main.bicep.parameters.json
│   │   │   └── spoke_core
│   │   │       └── main.bicep.parameters.json
│   │   └── caf_root
│   │       └── mgmt_root
│   │           └── main.bicep.parameters.json
│   └── pull_request_template.md
├── azure-caf-terraform-landingzone
│   ├── Makefile
│   ├── README.md
│   ├── bootstrap
│   │   ├── AccessManagemenForAzureResources.png
│   │   ├── Bootstrap-script-flow.png
│   │   ├── README.md
│   │   ├── bootstrap-dev.ps1
│   │   ├── bootstrap.ps1
│   │   ├── enable-blob-versioning.json
│   │   └── launchpad-subscription.json
│   ├── logo.svg
│   ├── modules
│   │   ├── active_directory
│   │   │   ├── adds
│   │   │   │   ├── README.md
│   │   │   │   ├── TEMPLATE.md
│   │   │   │   ├── backend.tf
│   │   │   │   ├── checkov_tests.md
│   │   │   │   ├── data.tf
│   │   │   │   ├── main.tf
│   │   │   │   ├── outputs.tf
│   │   │   │   ├── post_setup.ps1
│   │   │   │   ├── setup.ps1
│   │   │   │   └── variables.tf
│   │   │   └── adfs
│   │   │       ├── README.md
│   │   │       ├── TEMPLATE.md
│   │   │       ├── aadconnect.tf
│   │   │       ├── adfs.tf
│   │   │       ├── backend.tf
│   │   │       ├── checkov_tests.md
│   │   │       ├── data.tf
│   │   │       ├── main.tf
│   │   │       ├── outputs.tf
│   │   │       ├── setup.ps1
│   │   │       ├── setup_adfs_rules.ps1
│   │   │       ├── variables.tf
│   │   │       └── wap.tf
│   │   ├── azdo_agent_scaleset
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── azdo_agent_windows
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── scripts
│   │   │   │   └── install_waagent.ps1
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── azure_dns
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   └── variables.tf
│   │   ├── azure_policy
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── assignments_customer.tf
│   │   │   ├── assignments_hub.tf
│   │   │   ├── assignments_launchpad.tf
│   │   │   ├── assignments_logging.tf
│   │   │   ├── assignments_org.tf
│   │   │   ├── backend.tf
│   │   │   ├── checkov_tests.md
│   │   │   ├── data.tf
│   │   │   ├── definitions.tf
│   │   │   ├── img
│   │   │   │   ├── effects.svg
│   │   │   │   ├── logo-social.png
│   │   │   │   ├── logo.svg
│   │   │   │   └── scopes.svg
│   │   │   ├── initiatives.tf
│   │   │   ├── modules
│   │   │   │   ├── cis_benchmark
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── TEMPLATE.md
│   │   │   │   │   ├── cis_benchmark.tf
│   │   │   │   │   ├── data.tf
│   │   │   │   │   ├── outputs.tf
│   │   │   │   │   ├── parameters.json
│   │   │   │   │   └── variables.tf
│   │   │   │   ├── def_assignment
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── TEMPLATE.md
│   │   │   │   │   ├── main.tf
│   │   │   │   │   ├── outputs.tf
│   │   │   │   │   └── variables.tf
│   │   │   │   ├── definition
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── TEMPLATE.md
│   │   │   │   │   ├── data.tf
│   │   │   │   │   ├── main.tf
│   │   │   │   │   ├── outputs.tf
│   │   │   │   │   └── variables.tf
│   │   │   │   ├── initiative
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── TEMPLATE.md
│   │   │   │   │   ├── data.tf
│   │   │   │   │   ├── main.tf
│   │   │   │   │   ├── outputs.tf
│   │   │   │   │   └── variables.tf
│   │   │   │   └── set_assignment
│   │   │   │       ├── README.md
│   │   │   │       ├── TEMPLATE.md
│   │   │   │       ├── main.tf
│   │   │   │       ├── outputs.tf
│   │   │   │       └── variables.tf
│   │   │   ├── outputs.tf
│   │   │   ├── policies
│   │   │   │   ├── Compute
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── deploy_linux_lad_vm_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── example-lad-config.json
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_linux_lad_vmss_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── example-lad-config.json
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_linux_log_analytics_vm_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_linux_log_analytics_vmss_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_windows_log_analytics_vm_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_windows_log_analytics_vmss_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_windows_wad_vm_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_windows_wad_vmss_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── preview_deploy_linux_azure_monitor_vm_agent
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   └── preview_deploy_windows_azure_monitor_vm_agent
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── parameters.json
│   │   │   │   │       └── rules.json
│   │   │   │   ├── General
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── whitelist_regions
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   └── whitelist_resources
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── parameters.json
│   │   │   │   │       └── rules.json
│   │   │   │   ├── Key Vault
│   │   │   │   │   ├── README.md
│   │   │   │   │   └── keyvault_audit_diagnostic_log
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── parameters.json
│   │   │   │   │       └── rules.json
│   │   │   │   ├── Monitoring
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── audit_log_analytics_workspace_retention
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── audit_subscription_diagnostic_setting_should_exist
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_application_gateway_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_eventhub_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_expressroute_connection_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_expressroute_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_firewall_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_keyvault_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_loadbalancer_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_network_interface_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_network_security_group_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_public_ip_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_storage_account_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_subscription_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_virtual_machine_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deploy_vnet_diagnostic_setting
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   └── deploy_vnet_gateway_diagnostic_setting
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── parameters.json
│   │   │   │   │       └── rules.json
│   │   │   │   ├── Network
│   │   │   │   │   ├── create_nsg_rule_append
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_nat_rules_firewalls
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_nic_on_unapproved_vnet
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_nic_public_ip
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_nic_public_ip_on_specific_subnets
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_nsg_outbound_allow_all
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_nsgs_with_rules_with_source_inbound_any
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_pip_if_not_associated_authorised_resource
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_unapproved_udr
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── deny_unapproved_udr_hop_type
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── require_nsg_on_vnet
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   └── restrict_vnet_peering
│   │   │   │   │       ├── parameters.json
│   │   │   │   │       └── rules.json
│   │   │   │   ├── Regulatory Compliance
│   │   │   │   │   └── README.md
│   │   │   │   ├── Security Center
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── auto_enroll_subscriptions
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── auto_provision_log_analytics_agent_custom_workspace
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── auto_set_contact_details
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── enable_vulnerability_vm_assessments
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   ├── export_asc_alerts_and_recommendations_to_eventhub
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   └── export_asc_alerts_and_recommendations_to_log_analytics
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── parameters.json
│   │   │   │   │       └── rules.json
│   │   │   │   ├── Storage
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── storage_enforce_https
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── parameters.json
│   │   │   │   │   │   └── rules.json
│   │   │   │   │   └── storage_enforce_minimum_tls1_2
│   │   │   │   │       ├── README.md
│   │   │   │   │       ├── parameters.json
│   │   │   │   │       └── rules.json
│   │   │   │   └── Tags
│   │   │   │       ├── README.md
│   │   │   │       ├── add_replace_resource_group_tag_key_modify
│   │   │   │       │   ├── README.md
│   │   │   │       │   ├── parameters.json
│   │   │   │       │   └── rules.json
│   │   │   │       ├── inherit_resource_group_tags_append
│   │   │   │       │   ├── README.md
│   │   │   │       │   ├── parameters.json
│   │   │   │       │   └── rules.json
│   │   │   │       ├── inherit_resource_group_tags_modify
│   │   │   │       │   ├── README.md
│   │   │   │       │   ├── parameters.json
│   │   │   │       │   └── rules.json
│   │   │   │       └── require_resource_group_tags
│   │   │   │           ├── README.md
│   │   │   │           ├── parameters.json
│   │   │   │           └── rules.json
│   │   │   └── variables.tf
│   │   ├── azure_security_kit
│   │   │   ├── Azure Security Tool Kit.md
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── security_sp
│   │   │   │   ├── auto.tf
│   │   │   │   ├── backend.tf
│   │   │   │   ├── data.tf
│   │   │   │   └── versions.tf
│   │   │   └── tf_post_sp
│   │   │       ├── azsk.tf
│   │   │       ├── backend.tf
│   │   │       ├── data.tf
│   │   │       ├── main.tf
│   │   │       ├── outputs.tf
│   │   │       ├── scripts
│   │   │       │   ├── Install-ContinuousAssurance.ps1
│   │   │       │   └── create-outputvars.ps1
│   │   │       ├── variables.tf
│   │   │       └── versions.tf
│   │   ├── caf_firewall
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── main.tf
│   │   │   ├── module.tf
│   │   │   ├── output.tf
│   │   │   └── variables.tf
│   │   ├── caf_keyvault
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── data.tf
│   │   │   ├── module.tf
│   │   │   ├── output.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── caf_log_analytics
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   ├── main.tf
│   │   │   ├── module.tf
│   │   │   ├── output.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── caf_resource_group
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   ├── module.tf
│   │   │   ├── output.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── caf_virtual_networking
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── asg
│   │   │   │   ├── module.tf
│   │   │   │   ├── output.tf
│   │   │   │   └── variables.tf
│   │   │   ├── module.tf
│   │   │   ├── nsg
│   │   │   │   ├── module.tf
│   │   │   │   ├── output.tf
│   │   │   │   └── variables.tf
│   │   │   ├── output.tf
│   │   │   ├── subnet
│   │   │   │   ├── output.tf
│   │   │   │   ├── subnet.tf
│   │   │   │   └── variables.tf
│   │   │   ├── traffic_analytics
│   │   │   │   ├── main.tf
│   │   │   │   ├── module.tf
│   │   │   │   ├── output.tf
│   │   │   │   └── variables.tf
│   │   │   └── variables.tf
│   │   ├── dns_forwarder_bind
│   │   │   ├── BindDns.md
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── bind_dns_primary.tf
│   │   │   ├── bind_dns_secondary.tf
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── scripts
│   │   │   │   └── bind_install_config.sh
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── dns_forwarder_windows
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── checkov_tests.md
│   │   │   ├── data.tf
│   │   │   ├── module.tf
│   │   │   ├── outputs.tf
│   │   │   ├── setup_server.ps1
│   │   │   └── variables.tf
│   │   ├── firewall_rules
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── application_rules.tf
│   │   │   ├── backend.tf
│   │   │   ├── main.tf
│   │   │   ├── network_rules.tf
│   │   │   └── variables.tf
│   │   ├── hub_core
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── azure_firewall.tf
│   │   │   ├── backend.tf
│   │   │   ├── checkov_tests.md
│   │   │   ├── data.tf
│   │   │   ├── expressroute.tf
│   │   │   ├── main.tf
│   │   │   ├── output.tf
│   │   │   ├── private_endpoints
│   │   │   │   ├── backend.tf
│   │   │   │   ├── data.tf
│   │   │   │   ├── private_endpoints.tf
│   │   │   │   └── variables.tf
│   │   │   ├── route_tables.tf
│   │   │   ├── variables.tf
│   │   │   ├── virtual_networks.tf
│   │   │   └── vnet_peering.tf
│   │   ├── launchpad_core
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── checkov_tests.md
│   │   │   ├── data.tf
│   │   │   ├── launchpad.tf
│   │   │   ├── launchpad_customer
│   │   │   │   ├── README.md
│   │   │   │   ├── TEMPLATE.md
│   │   │   │   ├── backend.tf
│   │   │   │   ├── data.tf
│   │   │   │   ├── launchpad_customer.tf
│   │   │   │   ├── management_groups.tf
│   │   │   │   ├── role_assignments.tf
│   │   │   │   ├── service_principals.tf
│   │   │   │   ├── subscriptions.tf
│   │   │   │   └── variables.tf
│   │   │   ├── management_groups.tf
│   │   │   ├── role_assignments.tf
│   │   │   ├── service_principals.tf
│   │   │   ├── subscriptions.tf
│   │   │   └── variables.tf
│   │   ├── launchpad_resources
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── data.tf
│   │   │   ├── module.tf
│   │   │   ├── output.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── logging_core
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── checkov_tests.md
│   │   │   ├── data.tf
│   │   │   ├── logging_core.tf
│   │   │   ├── output.tf
│   │   │   └── variables.tf
│   │   ├── naming_standard
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── checkov_tests.md
│   │   │   ├── output.tf
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── packer_images
│   │   │   ├── adds
│   │   │   │   ├── adds.pkr.hcl
│   │   │   │   └── variables.pkr.hcl
│   │   │   ├── adfs
│   │   │   │   ├── adfs.pkr.hcl
│   │   │   │   └── variables.pkr.hcl
│   │   │   ├── deploy
│   │   │   │   ├── adds.pkrvars.hcl
│   │   │   │   ├── adfs.pkrvars.hcl
│   │   │   │   └── wap.pkrvars.hcl
│   │   │   ├── np_variables.hcl
│   │   │   └── wap
│   │   │       ├── variables.pkr.hcl
│   │   │       └── wap.pkr.hcl
│   │   ├── shared_image_gallery
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── checkov_tests.md
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   └── variables.tf
│   │   ├── spoke_core
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── output.tf
│   │   │   ├── private_endpoints.tf
│   │   │   ├── recovery_services.tf
│   │   │   ├── route_tables.tf
│   │   │   ├── variables.tf
│   │   │   ├── virtual_network.tf
│   │   │   └── vnet_peering.tf
│   │   ├── subscription_vending
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── subVend.tf
│   │   │   ├── templates
│   │   │   │   └── subvend.sh.tmpl
│   │   │   ├── variables.tf
│   │   │   └── versions.tf
│   │   ├── vmss_linux
│   │   │   ├── README.md
│   │   │   ├── TEMPLATE.md
│   │   │   ├── backend.tf
│   │   │   ├── data.tf
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   └── vmss_autoscale.tf
│   │   └── vmss_windows
│   │       ├── README.md
│   │       ├── TEMPLATE.md
│   │       ├── backend.tf
│   │       ├── checkov_tests.md
│   │       ├── data.tf
│   │       ├── module.tf
│   │       ├── outputs.tf
│   │       └── variables.tf
│   ├── org
│   │   └── caf_dev
│   │       ├── customer_001
│   │       │   ├── adds
│   │       │   │   └── global_settings.tfvars
│   │       │   ├── adfs
│   │       │   │   └── global_settings.tfvars
│   │       │   ├── azure_dns
│   │       │   │   └── global_settings.tfvars
│   │       │   └── global_settings.tfvars
│   │       ├── hub
│   │       │   ├── azure_dns
│   │       │   │   └── global_settings.tfvars
│   │       │   ├── dns_forwarder
│   │       │   │   └── global_settings.tfvars
│   │       │   ├── firewall_rules
│   │       │   │   └── global_settings.tfvars
│   │       │   ├── global_settings.tfvars
│   │       │   ├── private_endpoints
│   │       │   │   └── global_settings.tfvars
│   │       │   └── shared_image_gallery
│   │       │       └── global_settings.tfvars
│   │       ├── launchpad
│   │       │   ├── global_settings.tfvars
│   │       │   └── launchpad_customer
│   │       │       └── global_settings.tfvars
│   │       ├── logging
│   │       │   └── global_settings.tfvars
│   │       └── policy
│   │           └── global_settings.tfvars
│   ├── pull_request_template.md
│   ├── scripts
│   │   ├── Az.ps1
│   │   ├── aadsync
│   │   │   ├── README.md
│   │   │   ├── aadSync.ps1
│   │   │   ├── aadSyncTool.psd1
│   │   │   ├── aadSyncTool.psm1
│   │   │   ├── credential-example
│   │   │   └── releasenote
│   │   ├── cost_management
│   │   │   ├── billing-file-generation
│   │   │   ├── find-untagged-resources.txt
│   │   │   └── readme.md
│   │   ├── ctp_poc
│   │   │   ├── Makefile
│   │   │   ├── README.md
│   │   │   ├── go.mod
│   │   │   ├── main.go
│   │   │   ├── main.tf
│   │   │   ├── pim
│   │   │   │   ├── client.go
│   │   │   │   ├── data_source_name_allocation.go
│   │   │   │   ├── data_source_name_details.go
│   │   │   │   ├── provider.go
│   │   │   │   └── provider_test.go
│   │   │   └── test-api
│   │   │       └── main.go
│   │   ├── git-tagging
│   │   │   ├── entrypoint.sh
│   │   │   └── semver
│   │   ├── pester
│   │   │   ├── functional
│   │   │   │   ├── hub.ps1
│   │   │   │   ├── int-func-tests.ps1
│   │   │   │   ├── invoke-pester.ps1
│   │   │   │   ├── namingStd.ps1
│   │   │   │   └── spoke.ps1
│   │   │   └── tfstate-check
│   │   │       ├── functions.ps1
│   │   │       ├── invoke-pester.ps1
│   │   │       └── tfstate-check.ps1
│   │   └── pimtest
│   │       ├── CancelGovernanceRoleAssignmentRequest.ps1
│   │       ├── CreateGovernanceRoleAssignmentRequest.ps1
│   │       ├── CreateNewGroup.ps1
│   │       ├── GetGovernanceResources.ps1
│   │       ├── GetGovernanceRoleAssignmentRequests.ps1
│   │       ├── GetGovernanceRoleAssignments.ps1
│   │       ├── GetGovernanceRoleDefinitions.ps1
│   │       ├── GetGovernanceRoleSetting.ps1
│   │       ├── ListGovernanceResources.ps1
│   │       ├── ListGovernanceRoleAssignmentRequests.ps1
│   │       ├── ListGovernanceRoleAssignments.ps1
│   │       ├── ListGovernanceRoleDefinitions.ps1
│   │       ├── ListGovernanceRoleSettings.ps1
│   │       ├── RegisterGovernanceResource.ps1
│   │       ├── UpdateGovernanceRoleAssignmentRequest.ps1
│   │       ├── UpdateGovernanceRoleSetting.ps1
│   │       ├── auth.ps1
│   │       ├── how_to_use__pim_lib_example.ps1
│   │       ├── pim.psd1
│   │       ├── pim.psm1
│   │       └── summary.md
│   └── templates
│       └── budget
│           └── budget.json
├── azure_practice_management_iac_poc
│   ├── README.md
│   ├── lzeasubscriptionvending
│   │   ├── backend.tf
│   │   ├── ea_subscription_vending.tf
│   │   ├── provider.tf
│   │   └── subscription_configurations
│   │       └── example.json
│   ├── mgmtcp
│   │   ├── 01_external_modules.tf
│   │   ├── azure_iac_mgmt_cp.tf
│   │   ├── backend.tf
│   │   └── provisioner.tf
│   ├── mgmtnet
│   │   ├── backend.tf
│   │   └── provider.tf
│   ├── mgmtsub
│   │   ├── README.md
│   │   ├── azure_iac_mgmt_subscription.tf
│   │   ├── backend.tf
│   │   └── provider.tf
│   └── mgmtsvcs
│       ├── backend.tf
│       └── provider.tf
└── practice-azure
    ├── README.md
    ├── aadsync
    │   ├── README.md
    │   ├── aadSync.ps1
    │   ├── aadSyncTool.psd1
    │   ├── aadSyncTool.psm1
    │   ├── credential-example
    │   └── releasenote
    ├── arm
    │   └── landing-zone
    │       ├── Makefile
    │       ├── README.md
    │       ├── code
    │       │   ├── lib
    │       │   │   ├── config.py
    │       │   │   ├── resource_types.py
    │       │   │   ├── string_replace.py
    │       │   │   └── types
    │       │   │       ├── __init__.py
    │       │   │       ├── firewall.py
    │       │   │       ├── networkpeering.py
    │       │   │       ├── nsg.py
    │       │   │       ├── nsgflowlogs.py
    │       │   │       ├── oms.py
    │       │   │       ├── routes.py
    │       │   │       ├── storage.py
    │       │   │       ├── virtualgateway.py
    │       │   │       └── vnet.py
    │       │   └── transform.py
    │       ├── config-development.yaml
    │       ├── config-production.yaml
    │       ├── config-shared.yaml
    │       ├── deploy-development.yaml
    │       ├── deploy-production.yaml
    │       ├── deploy-shared.yaml
    │       ├── doc
    │       │   ├── Azure LandingZone Architecture Design v0.1.md
    │       │   └── images
    │       │       ├── Alert_flow.png
    │       │       ├── Connectivity_model.png
    │       │       ├── Partner_connectivity.png
    │       │       ├── VNet_peering.png
    │       │       ├── WAF_outline.png
    │       │       ├── azure_scaffold.png
    │       │       ├── cover.png
    │       │       ├── hierarchy_design.png
    │       │       ├── hld_design.png
    │       │       ├── management_group.png
    │       │       └── region_pairing.png
    │       ├── docker-compose.yaml
    │       ├── scripts
    │       │   └── deploy.sh
    │       ├── temp
    │       │   └── README.md
    │       └── templates
    │           └── arm
    │               ├── 100_oms.arm.json
    │               ├── 100_oms.parameters.json
    │               ├── 200_storage.arm.json
    │               ├── 200_storage.parameters.json
    │               ├── 300_vnet.arm.json
    │               ├── 300_vnet.parameters.json
    │               ├── 301_nsg.arm.json
    │               ├── 301_nsg.parameters.json
    │               ├── 302_nsgflowlogs.arm.json
    │               ├── 302_nsgflowlogs.parameters.json
    │               ├── 303_networkpeering.arm.json
    │               ├── 303_networkpeering.parameters.json
    │               ├── 400_firewall.arm.json
    │               ├── 400_firewall.parameters.json
    │               ├── 401_virtualgateway.arm.json
    │               ├── 401_virtualgateway.parameters.json
    │               ├── 402_routetables.arm.json
    │               └── 402_routetables.parameters.json
    ├── azure-policy
    │   └── README.md
    ├── design-doc-landingzone
    │   ├── README.md
    │   └── images
    │       ├── Alert_flow.png
    │       ├── Connectivity_model.png
    │       ├── Partner_connectivity.png
    │       ├── VNet_peering.png
    │       ├── WAF_outline.png
    │       ├── azure_scaffold.png
    │       ├── cover.png
    │       ├── hierarchy_design.png
    │       ├── hld_design.png
    │       ├── management_group.png
    │       └── region_pairing.png
    ├── scaffolding
    │   ├── README.md
    │   ├── azure-pipeline.yaml
    │   ├── extra_resource
    │   │   ├── aks_template
    │   │   │   ├── aks_deployment.ps1
    │   │   │   ├── aksdeploy.json
    │   │   │   ├── aksdeploy.parameters.json
    │   │   │   └── arm_deployment.sh
    │   │   ├── container_template
    │   │   │   ├── acrdeploy.json
    │   │   │   ├── acrdeploy.parameters.json
    │   │   │   └── container_deployment.sh
    │   │   ├── extra-azure-pipeline.yaml
    │   │   └── keyvault_template
    │   │       ├── kv_deployment.ps1
    │   │       ├── kvdeploy.json
    │   │       └── kvdeploy.parameters.json
    │   ├── landingZone
    │   │   └── blueprints
    │   │       ├── artifacts
    │   │       │   ├── artifact.artifact-template-keyvault--deploy.json.json
    │   │       │   ├── artifact.artifact-template-loganalytics.json
    │   │       │   └── artifact.artifact-template-vnet--deploy.json
    │   │       └── blueprint.json
    │   ├── mgmtGroup
    │   │   └── management.json
    │   └── scripts
    │       ├── aksspn.ps1
    │       ├── blueprint.ps1
    │       ├── cleanup_script.ps1
    │       └── mgmtGroup.ps1
    └── 📦practice-azure.md