From cca0ec4ff66a080ce1385e9348ce307821c5a228 Mon Sep 17 00:00:00 2001 From: VeronicaSea <69697690+VeronicaSea@users.noreply.github.com> Date: Wed, 16 Oct 2024 02:13:49 -0700 Subject: [PATCH 1/7] docs: add microsoft cloud for sovereignty (#217) # Pull Request Add [User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty ## Description Add [User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty Description of changes: Add [User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty ## License By submitting this pull request, I confirm that my contribution is made under the terms of the projects associated license. --------- Co-authored-by: Jared Holgate Co-authored-by: Lucas McDaniel --- ...Guide]-Quick-Start-Phase-2-Azure-DevOps.md | 4 + ...[User-Guide]-Quick-Start-Phase-2-GitHub.md | 4 + .../[User-Guide]-Quick-Start-Phase-2-Local.md | 4 + ...rraform-Microsoft-Cloud-For-Sovereignty.md | 90 ++++++++++++++++++ docs/wiki/_Sidebar.md | 6 ++ ...aform-microsoft-cloud-for-sovereignty.yaml | 85 +++++++++++++++++ ...aform-microsoft-cloud-for-sovereignty.yaml | 82 ++++++++++++++++ ...aform-microsoft-cloud-for-sovereignty.yaml | 75 +++++++++++++++ ...module-microsoft_cloud_for_sovereignty.png | Bin 0 -> 146685 bytes 9 files changed, 350 insertions(+) create mode 100644 docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md create mode 100644 docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml create mode 100644 docs/wiki/examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml create mode 100644 docs/wiki/examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml create mode 100644 docs/wiki/media/starter-module-microsoft_cloud_for_sovereignty.png diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md index 2f5584ed..eee36310 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md @@ -113,6 +113,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, 1. Basic - [inputs-azure-devops-terraform-basic.yaml][example_powershell_inputs_azure_devops_terraform_basic] 1. Hub Networking - [inputs-azure-devops-terraform-hubnetworking.yaml][example_powershell_inputs_azure_devops_terraform_hubnetworking] 1. Complete - [inputs-azure-devops-terraform-complete.yaml][example_powershell_inputs_azure_devops_terraform_complete] + 1. Sovereign Landing Zone - [inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] 1. Check through the file and update each input as required. It is mandatory to update items with placeholders surrounded by angle brackets `<>`: >NOTE: The following inputs can also be supplied via environment variables. This may be useful for sensitive values you don't wish to persist to a file. The `Env Var Prefix` denotes the prefix the environment variable should have. The environment variable is formatting is `_`, e.g. `env:ALZ_iac_type = "terraform"` or `env:TF_VAR_azure_devops_personal_access_token = "*****..."`. @@ -150,6 +151,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, - [Terraform Basic Starter Module][wiki_starter_module_terraform_basic]: Management groups and policies. - [Terraform Hub Networking Starter Module][wiki_starter_module_terraform_hubnetworking]: Management groups, policies and hub networking. - [Terraform Complete Starter Module][wiki_starter_module_terraform_complete]: Management groups, policies, hub networking with fully custom configuration. + - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. 1. In your PowerShell Core (pwsh) terminal run the module: >NOTE: The following examples include 2 input files. This is the recommended approach for the `complete_multi_region` starter module. However, all inputs can be combined into a single file if desired and other starter modules only require a single input file. @@ -183,9 +185,11 @@ Now head to [Phase 3][wiki_quick_start_phase_3]. [wiki_starter_module_terraform_hubnetworking]: %5BUser-Guide%5D-Starter-Module-Terraform-HubNetworking "Wiki - Start Modules - Terraform Hub Networking" [wiki_starter_module_terraform_complete]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete "Wiki - Starter Modules - Terraform Complete" [wiki_starter_module_terraform_complete_multi_region]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete-Multi-Region "Wiki - Starter Modules - Terraform Complete Multi Region" +[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty "Wiki - Starter Modules - Terraform Sovereign Landing Zone" [wiki_quick_start_phase_3]: %5BUser-Guide%5D-Quick-Start-Phase-3 "Wiki - Quick Start - Phase 3" [example_powershell_inputs_azure_devops_bicep_complete]: examples/powershell-inputs/inputs-azure-devops-bicep-complete.yaml "Example - PowerShell Inputs - Azure DevOps - Bicep - Complete" [example_powershell_inputs_azure_devops_terraform_basic]: examples/powershell-inputs/inputs-azure-devops-terraform-basic.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Basic" [example_powershell_inputs_azure_devops_terraform_hubnetworking]: examples/powershell-inputs/inputs-azure-devops-terraform-hubnetworking.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Hub Networking" [example_powershell_inputs_azure_devops_terraform_complete]: examples/powershell-inputs/inputs-azure-devops-terraform-complete.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Complete" [example_powershell_inputs_azure_devops_terraform_complete_multi_region]: examples/powershell-inputs/inputs-azure-devops-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Complete Multi Region" +[example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Sovereign Landing Zone" diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md index 63438085..781514bf 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md @@ -103,6 +103,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, 1. Basic - [inputs-github-terraform-basic.yaml][example_powershell_inputs_github_terraform_basic] 1. Hub Networking - [inputs-github-terraform-hubnetworking.yaml][example_powershell_inputs_github_terraform_hubnetworking] 1. Complete - [inputs-github-terraform-complete.yaml][example_powershell_inputs_github_terraform_complete] + 1. Sovereign Landing Zone - [inputs-github-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_github_terraform_sovereign_landing_zone] 1. Check through the file and update each input as required. It is mandatory to update items with placeholders surrounded by angle brackets `<>`: >NOTE: The following inputs can also be supplied via environment variables. This may be useful for sensitive values you don't wish to persist to a file. The `Env Var Prefix` denotes the prefix the environment variable should have. The environment variable is formatting is `_`, e.g. `env:ALZ_iac_type = "terraform"` or `env:TF_VAR_github_personal_access_token = "*****..."`. @@ -137,6 +138,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, - [Terraform Basic Starter Module][wiki_starter_module_terraform_basic]: Management groups and policies. - [Terraform Hub Networking Starter Module][wiki_starter_module_terraform_hubnetworking]: Management groups, policies and hub networking. - [Terraform Complete Starter Module][wiki_starter_module_terraform_complete]: Management groups, policies, hub networking with fully custom configuration. + - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. 1. In your PowerShell Core (pwsh) terminal run the module: >NOTE: The following examples include 2 input files. This is the recommended approach for the `complete_multi_region` starter module. However, all inputs can be combined into a single file if desired and other starter modules only require a single input file. @@ -170,9 +172,11 @@ Now head to [Phase 3][wiki_quick_start_phase_3]. [wiki_starter_module_terraform_hubnetworking]: %5BUser-Guide%5D-Starter-Module-Terraform-HubNetworking "Wiki - Start Modules - Terraform Hub Networking" [wiki_starter_module_terraform_complete]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete "Wiki - Starter Modules - Terraform Complete" [wiki_starter_module_terraform_complete_multi_region]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete-Multi-Region "Wiki - Starter Modules - Terraform Complete Multi Region" +[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty "Wiki - Starter Modules - Terraform Sovereign Landing Zone" [wiki_quick_start_phase_3]: %5BUser-Guide%5D-Quick-Start-Phase-3 "Wiki - Quick Start - Phase 3" [example_powershell_inputs_github_bicep_complete]: examples/powershell-inputs/inputs-github-bicep-complete.yaml "Example - PowerShell Inputs - GitHub - Bicep - Complete" [example_powershell_inputs_github_terraform_basic]: examples/powershell-inputs/inputs-github-terraform-basic.yaml "Example - PowerShell Inputs - GitHub - Terraform - Basic" [example_powershell_inputs_github_terraform_hubnetworking]: examples/powershell-inputs/inputs-github-terraform-hubnetworking.yaml "Example - PowerShell Inputs - GitHub - Terraform - Hub Networking" [example_powershell_inputs_github_terraform_complete]: examples/powershell-inputs/inputs-github-terraform-complete.yaml "Example - PowerShell Inputs - GitHub - Terraform - Complete" [example_powershell_inputs_github_terraform_complete_multi_region]: examples/powershell-inputs/inputs-github-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - GitHub - Terraform - Complete Multi Region" +[example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - GitHub - Terraform - Sovereign Landing Zone" diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md index 4570d796..c574a745 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md @@ -98,6 +98,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, 1. Basic - [inputs-local-terraform-basic.yaml][example_powershell_inputs_local_terraform_basic] 1. Hub Networking - [inputs-local-terraform-hubnetworking.yaml][example_powershell_inputs_local_terraform_hubnetworking] 1. Complete - [inputs-local-terraform-complete.yaml][example_powershell_inputs_local_terraform_complete] + 1. Sovereign Landing Zone - [inputs-local-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_local_terraform_sovereign_landing_zone] 1. Check through the file and update each input as required. It is mandatory to update items with placeholders surrounded by angle brackets `<>`: >NOTE: The following inputs can also be supplied via environment variables. This may be useful for sensitive values you don't wish to persist to a file. The `Env Var Prefix` denotes the prefix the environment variable should have. The environment variable is formatting is `_`, e.g. `env:ALZ_iac_type = "terraform"` or `env:TF_VAR_target_directory = "./accelerator/target"`. @@ -126,6 +127,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, - [Terraform Basic Starter Module][wiki_starter_module_terraform_basic]: Management groups and policies. - [Terraform Hub Networking Starter Module][wiki_starter_module_terraform_hubnetworking]: Management groups, policies and hub networking. - [Terraform Complete Starter Module][wiki_starter_module_terraform_complete]: Management groups, policies, hub networking with fully custom configuration. + - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. 1. In your PowerShell Core (pwsh) terminal run the module: >NOTE: The following examples include 2 input files. This is the recommended approach for the `complete_multi_region` starter module. However, all inputs can be combined into a single file if desired and other starter modules only require a single input file. @@ -160,9 +162,11 @@ Now head to [Phase 3][wiki_quick_start_phase_3]. [wiki_starter_module_terraform_hubnetworking]: %5BUser-Guide%5D-Starter-Module-Terraform-HubNetworking "Wiki - Start Modules - Terraform Hub Networking" [wiki_starter_module_terraform_complete]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete "Wiki - Starter Modules - Terraform Complete" [wiki_starter_module_terraform_complete_multi_region]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete-Multi-Region "Wiki - Starter Modules - Terraform Complete Multi Region" +[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty "Wiki - Starter Modules - Terraform Sovereign Landing Zone" [wiki_quick_start_phase_3]: %5BUser-Guide%5D-Quick-Start-Phase-3 "Wiki - Quick Start - Phase 3" [example_powershell_inputs_local_bicep_complete]: examples/powershell-inputs/inputs-local-bicep-complete.yaml "Example - PowerShell Inputs - Local - Bicep - Complete" [example_powershell_inputs_local_terraform_basic]: examples/powershell-inputs/inputs-local-terraform-basic.yaml "Example - PowerShell Inputs - Local - Terraform - Basic" [example_powershell_inputs_local_terraform_hubnetworking]: examples/powershell-inputs/inputs-local-terraform-hubnetworking.yaml "Example - PowerShell Inputs - Local - Terraform - Hub Networking" [example_powershell_inputs_local_terraform_complete]: examples/powershell-inputs/inputs-local-terraform-complete.yaml "Example - PowerShell Inputs - Local - Terraform - Complete" [example_powershell_inputs_local_terraform_complete_multi_region]: examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Local - Terraform - Complete Multi Region" +[example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" diff --git a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md new file mode 100644 index 00000000..802f1801 --- /dev/null +++ b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md @@ -0,0 +1,90 @@ + +The `microsoft_cloud_for_sovereignty` starter module provides full customization of the Sovereign Landing Zone using the `inputs.yaml` file. The `inputs.yaml` file provides the ability to enable and disable modules, configure module inputs and outputs, and configure module resources. +A custom `inputs.yaml` file can be passed to the `inputConfigFilePath` argument of the ALZ PowerShell Module. This allows you to firstly design your Azure Landing Zone, and then deploy it. + +The default `inputs.yaml` file will need to be modified based off the documentation found [here][parameter_description_powershell_inputs_local_terraform_slz]. + +Default input files can be found here: + +- [inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_azure_devops_terraform_microsoft_cloud_for_sovereignty] +- [inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_github_terraform_microsoft_cloud_for_sovereignty] +- [inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_local_terraform_microsoft_cloud_for_sovereignty] + +The following table describes the inputs required for the `microsoft_cloud_for_sovereignty` starter module. + +| Input | Placeholder | Description | +| - | -- | --- | +| `default_prefix` | `` | Prefix value to append to all resources. | +| `default_location` | `` | This is the Azure region to deploy all SLZ resources into. | +| `allowed_locations` | `` | This is a list of Azure regions all workloads running outside of the Confidential Management Group scopes are allowed to be deployed into. | +| `allowed_locations_for_confidential_computing` | `` | This is a list of Azure regions all workloads running inside of the Confidential Management Group scopes are allowed to be deployed into. | + +Full parameter details can be found [here][parameter_description_powershell_inputs_local_terraform_slz]. + +## Further details on the Microsoft Cloud for Sovereignty Starter Module + +The Terraform-based deployment for the Sovereign Landing Zone (SLZ) provides an Enterprise Scale Landing Zone with equivalent compliance posture equal to that of our [Bicep implementation][bicep_implementation_slz]. There is not currently a migration path between the two implementations, however multiple landing zones can be created with either deployment technology in the same Azure tenant. + +### High Level Design + +![Alt text](./media/starter-module-microsoft_cloud_for_sovereignty.png) + +### Terraform Modules + +#### `alz-archetypes` and `slz-archetypes` + +The `alz-archetypes` and `slz-archetypes` are different from Terraform modules, but are used to deploy the management group hierarchy, policy assignments and management resources including the sovereign baseline policies. For more information on the archetypes, view the [ALZ archetypes](https://github.com/Azure/Azure-Landing-Zones-Library/blob/main/platform/alz/) and the [SLZ archetypes](https://github.com/Azure/Azure-Landing-Zones-Library/blob/main/platform/slz/). + +#### `subscription-vending` + +The `subscription-vending` module is used to deploy the subscriptions and move them within the right management group scopes. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-lz-vending/tree/main/modules/subscription). + +#### `hubnetworking` + +The `hubnetworking` module is used to deploy the hub VNET, Azure Firewall , Route Tables, and other networking primitives into the connectivity subscription. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-hubnetworking). + +#### `private-link` + +The `private-link` module is used to deploy default private link private DNS Zones. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-network-private-link-private-dns-zones). + +#### `alz-management` + +The `alz-management` module is used to deploy a set of management resources such as those for centralized logging. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-alz-management). + +#### `resource-group` + +The `resource-group` module is used to deploy a variety of resource groups within the default subscriptions. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-resources-resourcegroup). + +#### `portal-dashboard` + +The `portal-dashboard` module is used to deploy the default compliance dashboard. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-portal-dashboard). + +#### `azure-bastion` + +The `azure-bastion` module is used to deploy Azure Bastion for remote access. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-bastionhost). + +#### `firewall-policy` + +The `firewall-policy` module is used to deploy a default Azure Firewall Policy for further configuration. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-firewallpolicy). + +#### `ddos-protection` + +The `ddos-protection` module is used to deploy a Standard SKU DDoS Protection Plan resource for network security. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-ddosprotectionplan). + +#### `public-ip` + +The `public-ip` module is used to deploy a Azure Public IP resoures for offerings that need inbound public internet access such as the VPN and ExpressRoute Gateways. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-publicipaddress). + +#### `networksecuritygroup` + +The `networksecuritygroup` module is used to deploy a default NSG for the Azure Bastion subnet to restrict ingress and egress network access. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-networksecuritygroup). + + [//]: # (************************) + [//]: # (INSERT LINK LABELS BELOW) + [//]: # (************************) + +[example_powershell_inputs_azure_devops_terraform_microsoft_cloud_for_sovereignty]: examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Devops - Terraform - Microsoft Cloud For Sovereignty" +[example_powershell_inputs_github_terraform_microsoft_cloud_for_sovereignty]: examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Microsoft Cloud For Sovereignty" +[example_powershell_inputs_local_terraform_microsoft_cloud_for_sovereignty]: examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Microsoft Cloud For Sovereignty" +[parameter_description_powershell_inputs_local_terraform_slz]: https://aka.ms/slz/terraform/params "Parameter Description - PowerShell Inputs - Local - Terraform - SLZ" +[bicep_implementation_slz]: https://aka.ms/slz/bicep "Sovereign Landing Zone (Bicep)" diff --git a/docs/wiki/_Sidebar.md b/docs/wiki/_Sidebar.md index 7215585f..306a7f0d 100644 --- a/docs/wiki/_Sidebar.md +++ b/docs/wiki/_Sidebar.md @@ -33,16 +33,19 @@ - [Azure DevOps Terraform Hub Networking][example_powershell_inputs_azure_devops_terraform_hubnetworking] - [Azure DevOps Terraform Complete][example_powershell_inputs_azure_devops_terraform_complete] - [Azure DevOps Terraform Complete Multi Region][example_powershell_inputs_azure_devops_terraform_complete_multi_region] + - [Azure DevOps Terraform Sovereign Landing Zone][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] - [GitHub Bicep Complete][example_powershell_inputs_github_bicep_complete] - [GitHub Terraform Basic][example_powershell_inputs_github_terraform_basic] - [GitHub Terraform Hub Networking][example_powershell_inputs_github_terraform_hubnetworking] - [GitHub Terraform Complete][example_powershell_inputs_github_terraform_complete] - [GitHub Terraform Complete Multi Region][example_powershell_inputs_github_terraform_complete_multi_region] + - [GitHub Terraform Sovereign Landing Zone][example_powershell_inputs_github_terraform_sovereign_landing_zone] - [Local Bicep Complete][example_powershell_inputs_local_bicep_complete] - [Local Terraform Basic][example_powershell_inputs_local_terraform_basic] - [Local Terraform Hub Networking][example_powershell_inputs_local_terraform_hubnetworking] - [Local Terraform Complete][example_powershell_inputs_local_terraform_complete] - [Local Terraform Complete Multi Region][example_powershell_inputs_local_terraform_complete_multi_region] + - [Local Terraform Sovereign Landing Zone][example_powershell_inputs_local_terraform_sovereign_landing_zone] - [Frequently Asked Questions][wiki_frequently_asked_questions] - [Upgrade Guide][wiki_upgrade_guide] - [Advanced Scenarios][wiki_advanced_scenarios] @@ -99,6 +102,9 @@ [example_powershell_inputs_azure_devops_terraform_complete_multi_region]: examples/powershell-inputs/inputs-azure-devops-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Complete Multi Region" [example_powershell_inputs_github_terraform_complete_multi_region]: examples/powershell-inputs/inputs-github-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - GitHub - Terraform - Complete Multi Region" [example_powershell_inputs_local_terraform_complete_multi_region]: examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Local - Terraform - Complete Multi Region" +[example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - GitHub - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" [example_starter_module_complete_config_hub_spoke]: examples/starter-module-config/complete/config-hub-spoke.yaml "Example - Starter Module Config - Complete - Hub and Spoke" [example_starter_module_complete_config_vwan]: examples/starter-module-config/complete/config-vwan.yaml "Example - Starter Module Config - Complete - Virtual WAN" [example_starter_module_complete_config_hub_spoke_single_region]: examples/starter-module-config/complete-multi-region/config-hub-and-spoke-vnet-single-region.yaml "Example - Starter Module Config - Complete - Hub and Spoke VNet Single Region" diff --git a/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml new file mode 100644 index 00000000..23cdabc6 --- /dev/null +++ b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml @@ -0,0 +1,85 @@ +--- +# Basic Inputs +iac: "terraform" +bootstrap: "alz_azuredevops" +starter: "microsoft_cloud_for_sovereignty" + +# Shared Interface Inputs +bootstrap_location: "" +starter_locations: [] +root_parent_management_group_id: "" +subscription_id_management: "" +subscription_id_identity: "" +subscription_id_connectivity: "" + +# Bootstrap Inputs +azure_devops_personal_access_token: "" +azure_devops_agents_personal_access_token: "" +azure_devops_organization_name: "" +use_separate_repository_for_templates: true +bootstrap_subscription_id: "" +service_name: "slz" +environment_name: "mgmt" +postfix_number: "1" +azure_devops_use_organisation_legacy_url: false +azure_devops_create_project: true +azure_devops_project_name: "" +use_self_hosted_agents: true +use_private_networking: true +allow_storage_access_from_my_ip: false +apply_approvers: [] +create_branch_policies: true +apply_alz_archetypes_via_architecture_definition_template: true + +# Starter Module Specific Variables +allowed_locations: [] +allowed_locations_for_confidential_computing: [] +az_firewall_policies_enabled: true +bastion_outbound_ssh_rdp_ports: ["22", "3389"] +custom_subnets: { + AzureBastionSubnet: { + address_prefixes: "10.20.15.0/24", + name: "AzureBastionSubnet", + networkSecurityGroupId: "", + routeTableId: "" + }, + AzureFirewallSubnet: { + address_prefixes: "10.20.254.0/24", + name: "AzureFirewallSubnet", + networkSecurityGroupId: "", + routeTableId: "" + }, + GatewaySubnet: { + address_prefixes: "10.20.252.0/24", + name: "GatewaySubnet", + networkSecurityGroupId: "", + routeTableId: "" + } +} +customer: "Country/Region" +customer_policy_sets: {} +default_location: "" +default_postfix: "" +default_prefix: "mcfs" +deploy_bastion: true +deploy_ddos_protection: true +deploy_hub_network: true +deploy_log_analytics_workspace: true +enable_firewall: true +enable_telemetry: true +express_route_gateway_config: {name: "noconfigEr"} +hub_network_address_prefix: "10.20.0.0/16" +landing_zone_management_group_children: {} +log_analytics_workspace_retention_in_days: "365" +ms_defender_for_cloud_email_security_contact: "security_contact@replaceme.com" +policy_assignment_enforcement_mode: "Default" +policy_effect: "Deny" +policy_exemptions: {} +subscription_billing_scope: "" +tags: {} +use_premium_firewall: true +vpn_gateway_config: {name: "noconfigVpn"} + +# Advanced Inputs +bootstrap_module_version: "v4.0.5" +starter_module_version: "latest" diff --git a/docs/wiki/examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml new file mode 100644 index 00000000..383fd198 --- /dev/null +++ b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml @@ -0,0 +1,82 @@ +--- +# Basic Inputs +iac: "terraform" +bootstrap: "alz_github" +starter: "microsoft_cloud_for_sovereignty" + +# Shared Interface Inputs +bootstrap_location: "" +starter_locations: [] +root_parent_management_group_id: "" +subscription_id_management: "" +subscription_id_identity: "" +subscription_id_connectivity: "" + +# Bootstrap Inputs +github_personal_access_token: "" +github_runners_personal_access_token: "" +github_organization_name: "" +use_separate_repository_for_templates: true +bootstrap_subscription_id: "" +service_name: "slz" +environment_name: "mgmt" +postfix_number: "1" +use_self_hosted_runners: true +use_private_networking: true +allow_storage_access_from_my_ip: false +apply_approvers: [] +create_branch_policies: true +apply_alz_archetypes_via_architecture_definition_template: true + +# Starter Module Specific Variables +allowed_locations: [] +allowed_locations_for_confidential_computing: [] +az_firewall_policies_enabled: true +bastion_outbound_ssh_rdp_ports: ["22", "3389"] +custom_subnets: { + AzureBastionSubnet: { + address_prefixes: "10.20.15.0/24", + name: "AzureBastionSubnet", + networkSecurityGroupId: "", + routeTableId: "" + }, + AzureFirewallSubnet: { + address_prefixes: "10.20.254.0/24", + name: "AzureFirewallSubnet", + networkSecurityGroupId: "", + routeTableId: "" + }, + GatewaySubnet: { + address_prefixes: "10.20.252.0/24", + name: "GatewaySubnet", + networkSecurityGroupId: "", + routeTableId: "" + } +} +customer: "Country/Region" +customer_policy_sets: {} +default_location: "" +default_postfix: "" +default_prefix: "mcfs" +deploy_bastion: true +deploy_ddos_protection: true +deploy_hub_network: true +deploy_log_analytics_workspace: true +enable_firewall: true +enable_telemetry: true +express_route_gateway_config: {name: "noconfigEr"} +hub_network_address_prefix: "10.20.0.0/16" +landing_zone_management_group_children: {} +log_analytics_workspace_retention_in_days: "365" +ms_defender_for_cloud_email_security_contact: "security_contact@replaceme.com" +policy_assignment_enforcement_mode: "Default" +policy_effect: "Deny" +policy_exemptions: {} +subscription_billing_scope: "" +tags: {} +use_premium_firewall: true +vpn_gateway_config: {name: "noconfigVpn"} + +# Advanced Inputs +bootstrap_module_version: "v4.0.5" +starter_module_version: "latest" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml new file mode 100644 index 00000000..f0d35a5d --- /dev/null +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml @@ -0,0 +1,75 @@ +--- +# Basic Inputs +iac: "terraform" +bootstrap: "alz_local" +starter: "microsoft_cloud_for_sovereignty" + +# Shared Interface Inputs +bootstrap_location: "" +starter_locations: [] +root_parent_management_group_id: "" +subscription_id_management: "" +subscription_id_identity: "" +subscription_id_connectivity: "" + +# Bootstrap Inputs +target_directory: "" +create_bootstrap_resources_in_azure: false +bootstrap_subscription_id: "" +service_name: "slz" +environment_name: "mgmt" +postfix_number: "1" +apply_alz_archetypes_via_architecture_definition_template: true + +# Starter Module Specific Variables +allowed_locations: [] +allowed_locations_for_confidential_computing: [] +az_firewall_policies_enabled: true +bastion_outbound_ssh_rdp_ports: ["22", "3389"] +custom_subnets: { + AzureBastionSubnet: { + address_prefixes: "10.20.15.0/24", + name: "AzureBastionSubnet", + networkSecurityGroupId: "", + routeTableId: "" + }, + AzureFirewallSubnet: { + address_prefixes: "10.20.254.0/24", + name: "AzureFirewallSubnet", + networkSecurityGroupId: "", + routeTableId: "" + }, + GatewaySubnet: { + address_prefixes: "10.20.252.0/24", + name: "GatewaySubnet", + networkSecurityGroupId: "", + routeTableId: "" + } +} +customer: "Country/Region" +customer_policy_sets: {} +default_location: "" +default_postfix: "" +default_prefix: "mcfs" +deploy_bastion: true +deploy_ddos_protection: true +deploy_hub_network: true +deploy_log_analytics_workspace: true +enable_firewall: true +enable_telemetry: true +express_route_gateway_config: {name: "noconfigEr"} +hub_network_address_prefix: "10.20.0.0/16" +landing_zone_management_group_children: {} +log_analytics_workspace_retention_in_days: "365" +ms_defender_for_cloud_email_security_contact: "security_contact@replaceme.com" +policy_assignment_enforcement_mode: "Default" +policy_effect: "Deny" +policy_exemptions: {} +subscription_billing_scope: "" +tags: {} +use_premium_firewall: true +vpn_gateway_config: {name: "noconfigVpn"} + +# Advanced Inputs +bootstrap_module_version: "v4.0.5" +starter_module_version: "latest" diff --git a/docs/wiki/media/starter-module-microsoft_cloud_for_sovereignty.png b/docs/wiki/media/starter-module-microsoft_cloud_for_sovereignty.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9a71b8f07f27b70f628227414f74b244f126d9 GIT binary patch literal 146685 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 GGywp1F%dWb literal 0 HcmV?d00001 From 9f1ff33f2cdc28217ebce04f0a92ffa0aebb5dae Mon Sep 17 00:00:00 2001 From: Jared Holgate Date: Wed, 16 Oct 2024 12:05:00 +0100 Subject: [PATCH 2/7] Updates for SLZ --- ...Guide]-Quick-Start-Phase-2-Azure-DevOps.md | 11 +- ...[User-Guide]-Quick-Start-Phase-2-GitHub.md | 10 +- .../[User-Guide]-Quick-Start-Phase-2-Local.md | 11 +- ...rraform-Microsoft-Cloud-For-Sovereignty.md | 90 -------------- ...Module-Terraform-Sovereign-Landing-Zone.md | 114 ++++++++++++++++++ docs/wiki/_Sidebar.md | 20 +-- ...ops-terraform-sovereign-landing-zone.yaml} | 32 ++--- ...hub-terraform-sovereign-landing-zone.yaml} | 30 ++--- ...cal-terraform-sovereign-landing-zone.yaml} | 24 ++-- 9 files changed, 188 insertions(+), 154 deletions(-) delete mode 100644 docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md create mode 100644 docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md rename docs/wiki/examples/powershell-inputs/{inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml => inputs-azure-devops-terraform-sovereign-landing-zone.yaml} (73%) rename docs/wiki/examples/powershell-inputs/{inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml => inputs-github-terraform-sovereign-landing-zone.yaml} (75%) rename docs/wiki/examples/powershell-inputs/{inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml => inputs-local-terraform-sovereign-landing-zone.yaml} (77%) diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md index eee36310..e5608a2e 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md @@ -110,10 +110,11 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, 1. Open your `inputs.yaml` file in Visual Studio Code (or your preferred editor) and copy the content from the relevant input file for your chosen starter module: 1. Complete Multi Region - [inputs-azure-devops-terraform-complete-multi-region.yaml][example_powershell_inputs_azure_devops_terraform_complete_multi_region] + 1. Sovereign Landing Zone - [inputs-azure-devops-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] 1. Basic - [inputs-azure-devops-terraform-basic.yaml][example_powershell_inputs_azure_devops_terraform_basic] 1. Hub Networking - [inputs-azure-devops-terraform-hubnetworking.yaml][example_powershell_inputs_azure_devops_terraform_hubnetworking] 1. Complete - [inputs-azure-devops-terraform-complete.yaml][example_powershell_inputs_azure_devops_terraform_complete] - 1. Sovereign Landing Zone - [inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] + 1. Check through the file and update each input as required. It is mandatory to update items with placeholders surrounded by angle brackets `<>`: >NOTE: The following inputs can also be supplied via environment variables. This may be useful for sensitive values you don't wish to persist to a file. The `Env Var Prefix` denotes the prefix the environment variable should have. The environment variable is formatting is `_`, e.g. `env:ALZ_iac_type = "terraform"` or `env:TF_VAR_azure_devops_personal_access_token = "*****..."`. @@ -145,13 +146,15 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, | `allow_storage_access_from_my_ip` | `TF_VAR` | `false` | This controls whether to allow access to the storage account from your IP address. This is only needed for trouble shooting. This only applies if you have `use_private_networking` set to `true`. This defaults to `false`. | | `apply_approvers` | `TF_VAR` | `` | This is a list of service principal names (SPN) of people you wish to be in the group that approves apply of the Azure landing zone module. This is an array of strings like `["abc@xyz.com", "def@xyz.com", "ghi@xyz.com"]`. You may need to check what the SPN is prior to filling this out as it can vary based on identity provider. Use empty array `[]` to disable approvals. Note if supplying via the user interface, use a comma separated string like `abc@xyz.com,def@xyz.com,ghi@xyz.com`. | | `create_branch_policies` | `TF_VAR` | `true` | This controls whether to create branch policies for the repository. This defaults to `true`. | + | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to starter modules used by Microsoft Cloud for Industry, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | 1. Now head over to your chosen starter module documentation to get the specific inputs for that module. Come back here when you are done. - [Terraform Complete Multi Region Starter Module][wiki_starter_module_terraform_complete_multi_region]: Management groups, policies, Multi Region hub networking with fully custom configuration. + - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. - [Terraform Basic Starter Module][wiki_starter_module_terraform_basic]: Management groups and policies. - [Terraform Hub Networking Starter Module][wiki_starter_module_terraform_hubnetworking]: Management groups, policies and hub networking. - [Terraform Complete Starter Module][wiki_starter_module_terraform_complete]: Management groups, policies, hub networking with fully custom configuration. - - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. + 1. In your PowerShell Core (pwsh) terminal run the module: >NOTE: The following examples include 2 input files. This is the recommended approach for the `complete_multi_region` starter module. However, all inputs can be combined into a single file if desired and other starter modules only require a single input file. @@ -185,11 +188,11 @@ Now head to [Phase 3][wiki_quick_start_phase_3]. [wiki_starter_module_terraform_hubnetworking]: %5BUser-Guide%5D-Starter-Module-Terraform-HubNetworking "Wiki - Start Modules - Terraform Hub Networking" [wiki_starter_module_terraform_complete]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete "Wiki - Starter Modules - Terraform Complete" [wiki_starter_module_terraform_complete_multi_region]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete-Multi-Region "Wiki - Starter Modules - Terraform Complete Multi Region" -[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty "Wiki - Starter Modules - Terraform Sovereign Landing Zone" +[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Sovereign-Landing-Zone "Wiki - Starter Modules - Terraform Sovereign Landing Zone" [wiki_quick_start_phase_3]: %5BUser-Guide%5D-Quick-Start-Phase-3 "Wiki - Quick Start - Phase 3" [example_powershell_inputs_azure_devops_bicep_complete]: examples/powershell-inputs/inputs-azure-devops-bicep-complete.yaml "Example - PowerShell Inputs - Azure DevOps - Bicep - Complete" [example_powershell_inputs_azure_devops_terraform_basic]: examples/powershell-inputs/inputs-azure-devops-terraform-basic.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Basic" [example_powershell_inputs_azure_devops_terraform_hubnetworking]: examples/powershell-inputs/inputs-azure-devops-terraform-hubnetworking.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Hub Networking" [example_powershell_inputs_azure_devops_terraform_complete]: examples/powershell-inputs/inputs-azure-devops-terraform-complete.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Complete" [example_powershell_inputs_azure_devops_terraform_complete_multi_region]: examples/powershell-inputs/inputs-azure-devops-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Complete Multi Region" -[example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Sovereign Landing Zone" diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md index 781514bf..55dfb13d 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md @@ -100,10 +100,10 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, 1. Open your `inputs.yaml` file in Visual Studio Code (or your preferred editor) and copy the content from the relevant input file for your chosen starter module: 1. Complete Multi Region - [inputs-github-terraform-complete-multi-region.yaml][example_powershell_inputs_github_terraform_complete_multi_region] + 1. Sovereign Landing Zone - [inputs-github-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_github_terraform_sovereign_landing_zone] 1. Basic - [inputs-github-terraform-basic.yaml][example_powershell_inputs_github_terraform_basic] 1. Hub Networking - [inputs-github-terraform-hubnetworking.yaml][example_powershell_inputs_github_terraform_hubnetworking] 1. Complete - [inputs-github-terraform-complete.yaml][example_powershell_inputs_github_terraform_complete] - 1. Sovereign Landing Zone - [inputs-github-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_github_terraform_sovereign_landing_zone] 1. Check through the file and update each input as required. It is mandatory to update items with placeholders surrounded by angle brackets `<>`: >NOTE: The following inputs can also be supplied via environment variables. This may be useful for sensitive values you don't wish to persist to a file. The `Env Var Prefix` denotes the prefix the environment variable should have. The environment variable is formatting is `_`, e.g. `env:ALZ_iac_type = "terraform"` or `env:TF_VAR_github_personal_access_token = "*****..."`. @@ -132,13 +132,15 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, | `allow_storage_access_from_my_ip` | `TF_VAR` | `false` | This controls whether to allow access to the storage account from your IP address. This is only needed for trouble shooting. This only applies if you have `use_private_networking` set to `true`. This defaults to `false`. | | `apply_approvers` | `TF_VAR` | `` | This is a list of service principal names (SPN) of people you wish to be in the group that approves apply of the Azure landing zone module. This is an array of strings like `["abc@xyz.com", "def@xyz.com", "ghi@xyz.com"]`. You may need to check what the SPN is prior to filling this out as it can vary based on identity provider. Use empty array `[]` to disable approvals. Note if supplying via the user interface, use a comma separated string like `abc@xyz.com,def@xyz.com,ghi@xyz.com`. | | `create_branch_policies` | `TF_VAR` | `true` | This controls whether to create branch policies for the repository. This defaults to `true`. | + | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to starter modules used by Microsoft Cloud for Industry, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | 1. Now head over to your chosen starter module documentation to get the specific inputs for that module. Come back here when you are done. - [Terraform Complete Multi Region Starter Module][wiki_starter_module_terraform_complete_multi_region]: Management groups, policies, Multi Region hub networking with fully custom configuration. + - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. - [Terraform Basic Starter Module][wiki_starter_module_terraform_basic]: Management groups and policies. - [Terraform Hub Networking Starter Module][wiki_starter_module_terraform_hubnetworking]: Management groups, policies and hub networking. - [Terraform Complete Starter Module][wiki_starter_module_terraform_complete]: Management groups, policies, hub networking with fully custom configuration. - - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. + 1. In your PowerShell Core (pwsh) terminal run the module: >NOTE: The following examples include 2 input files. This is the recommended approach for the `complete_multi_region` starter module. However, all inputs can be combined into a single file if desired and other starter modules only require a single input file. @@ -172,11 +174,11 @@ Now head to [Phase 3][wiki_quick_start_phase_3]. [wiki_starter_module_terraform_hubnetworking]: %5BUser-Guide%5D-Starter-Module-Terraform-HubNetworking "Wiki - Start Modules - Terraform Hub Networking" [wiki_starter_module_terraform_complete]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete "Wiki - Starter Modules - Terraform Complete" [wiki_starter_module_terraform_complete_multi_region]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete-Multi-Region "Wiki - Starter Modules - Terraform Complete Multi Region" -[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty "Wiki - Starter Modules - Terraform Sovereign Landing Zone" +[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Sovereign-Landing-Zone "Wiki - Starter Modules - Terraform Sovereign Landing Zone" [wiki_quick_start_phase_3]: %5BUser-Guide%5D-Quick-Start-Phase-3 "Wiki - Quick Start - Phase 3" [example_powershell_inputs_github_bicep_complete]: examples/powershell-inputs/inputs-github-bicep-complete.yaml "Example - PowerShell Inputs - GitHub - Bicep - Complete" [example_powershell_inputs_github_terraform_basic]: examples/powershell-inputs/inputs-github-terraform-basic.yaml "Example - PowerShell Inputs - GitHub - Terraform - Basic" [example_powershell_inputs_github_terraform_hubnetworking]: examples/powershell-inputs/inputs-github-terraform-hubnetworking.yaml "Example - PowerShell Inputs - GitHub - Terraform - Hub Networking" [example_powershell_inputs_github_terraform_complete]: examples/powershell-inputs/inputs-github-terraform-complete.yaml "Example - PowerShell Inputs - GitHub - Terraform - Complete" [example_powershell_inputs_github_terraform_complete_multi_region]: examples/powershell-inputs/inputs-github-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - GitHub - Terraform - Complete Multi Region" -[example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - GitHub - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml "Example - PowerShell Inputs - GitHub - Terraform - Sovereign Landing Zone" diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md index c574a745..65d93181 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md @@ -95,10 +95,11 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, 1. Open your `inputs.yaml` file in Visual Studio Code (or your preferred editor) and copy the content from the relevant input file for your chosen starter module: 1. Complete Multi Region - [inputs-local-terraform-complete-multi-region.yaml][example_powershell_inputs_local_terraform_complete_multi_region] + 1. Sovereign Landing Zone - [inputs-local-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_local_terraform_sovereign_landing_zone] 1. Basic - [inputs-local-terraform-basic.yaml][example_powershell_inputs_local_terraform_basic] 1. Hub Networking - [inputs-local-terraform-hubnetworking.yaml][example_powershell_inputs_local_terraform_hubnetworking] 1. Complete - [inputs-local-terraform-complete.yaml][example_powershell_inputs_local_terraform_complete] - 1. Sovereign Landing Zone - [inputs-local-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_local_terraform_sovereign_landing_zone] + 1. Check through the file and update each input as required. It is mandatory to update items with placeholders surrounded by angle brackets `<>`: >NOTE: The following inputs can also be supplied via environment variables. This may be useful for sensitive values you don't wish to persist to a file. The `Env Var Prefix` denotes the prefix the environment variable should have. The environment variable is formatting is `_`, e.g. `env:ALZ_iac_type = "terraform"` or `env:TF_VAR_target_directory = "./accelerator/target"`. @@ -121,13 +122,15 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, | `environment_name` | `TF_VAR` | `mgmt` | This is used to build up the names of your Azure and Azure DevOps resources, for example `rg-alz--uksouth-001`. We recommend using `mgmt` for this. | | `postfix_number` | `TF_VAR` | `1` | This is used to build up the names of your Azure and Azure DevOps resources, for example `rg-alz-mgmt-uksouth-`. We recommend using `1` for this. | | `grant_permissions_to_current_user` | `TF_VAR` | `true` | This determines whether the bootstrap will grant the current user permissions to the management group structure and stroage account created by the accelerator. This defaults to `true` so that the starter module can be immediately deployed from the local file system. Set this to `false` if you itend to wire up CI/CD with your own provider. | + | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to starter modules used by Microsoft Cloud for Industry, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | 1. Now head over to your chosen starter module documentation to get the specific inputs for that module. Come back here when you are done. - [Terraform Complete Multi Region Starter Module][wiki_starter_module_terraform_complete_multi_region]: Management groups, policies, Multi Region hub networking with fully custom configuration. + - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. - [Terraform Basic Starter Module][wiki_starter_module_terraform_basic]: Management groups and policies. - [Terraform Hub Networking Starter Module][wiki_starter_module_terraform_hubnetworking]: Management groups, policies and hub networking. - [Terraform Complete Starter Module][wiki_starter_module_terraform_complete]: Management groups, policies, hub networking with fully custom configuration. - - [Terraform Sovereign Landing Zone Starter Module][wiki_starter_module_terraform_sovereign_landing_zone]: Management groups, policies, hub networking for the Sovereign Landing Zone. + 1. In your PowerShell Core (pwsh) terminal run the module: >NOTE: The following examples include 2 input files. This is the recommended approach for the `complete_multi_region` starter module. However, all inputs can be combined into a single file if desired and other starter modules only require a single input file. @@ -162,11 +165,11 @@ Now head to [Phase 3][wiki_quick_start_phase_3]. [wiki_starter_module_terraform_hubnetworking]: %5BUser-Guide%5D-Starter-Module-Terraform-HubNetworking "Wiki - Start Modules - Terraform Hub Networking" [wiki_starter_module_terraform_complete]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete "Wiki - Starter Modules - Terraform Complete" [wiki_starter_module_terraform_complete_multi_region]: %5BUser-Guide%5D-Starter-Module-Terraform-Complete-Multi-Region "Wiki - Starter Modules - Terraform Complete Multi Region" -[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty "Wiki - Starter Modules - Terraform Sovereign Landing Zone" +[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Sovereign-Landing-Zone "Wiki - Starter Modules - Terraform Sovereign Landing Zone" [wiki_quick_start_phase_3]: %5BUser-Guide%5D-Quick-Start-Phase-3 "Wiki - Quick Start - Phase 3" [example_powershell_inputs_local_bicep_complete]: examples/powershell-inputs/inputs-local-bicep-complete.yaml "Example - PowerShell Inputs - Local - Bicep - Complete" [example_powershell_inputs_local_terraform_basic]: examples/powershell-inputs/inputs-local-terraform-basic.yaml "Example - PowerShell Inputs - Local - Terraform - Basic" [example_powershell_inputs_local_terraform_hubnetworking]: examples/powershell-inputs/inputs-local-terraform-hubnetworking.yaml "Example - PowerShell Inputs - Local - Terraform - Hub Networking" [example_powershell_inputs_local_terraform_complete]: examples/powershell-inputs/inputs-local-terraform-complete.yaml "Example - PowerShell Inputs - Local - Terraform - Complete" [example_powershell_inputs_local_terraform_complete_multi_region]: examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Local - Terraform - Complete Multi Region" -[example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" diff --git a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md deleted file mode 100644 index 802f1801..00000000 --- a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Microsoft-Cloud-For-Sovereignty.md +++ /dev/null @@ -1,90 +0,0 @@ - -The `microsoft_cloud_for_sovereignty` starter module provides full customization of the Sovereign Landing Zone using the `inputs.yaml` file. The `inputs.yaml` file provides the ability to enable and disable modules, configure module inputs and outputs, and configure module resources. -A custom `inputs.yaml` file can be passed to the `inputConfigFilePath` argument of the ALZ PowerShell Module. This allows you to firstly design your Azure Landing Zone, and then deploy it. - -The default `inputs.yaml` file will need to be modified based off the documentation found [here][parameter_description_powershell_inputs_local_terraform_slz]. - -Default input files can be found here: - -- [inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_azure_devops_terraform_microsoft_cloud_for_sovereignty] -- [inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_github_terraform_microsoft_cloud_for_sovereignty] -- [inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml][example_powershell_inputs_local_terraform_microsoft_cloud_for_sovereignty] - -The following table describes the inputs required for the `microsoft_cloud_for_sovereignty` starter module. - -| Input | Placeholder | Description | -| - | -- | --- | -| `default_prefix` | `` | Prefix value to append to all resources. | -| `default_location` | `` | This is the Azure region to deploy all SLZ resources into. | -| `allowed_locations` | `` | This is a list of Azure regions all workloads running outside of the Confidential Management Group scopes are allowed to be deployed into. | -| `allowed_locations_for_confidential_computing` | `` | This is a list of Azure regions all workloads running inside of the Confidential Management Group scopes are allowed to be deployed into. | - -Full parameter details can be found [here][parameter_description_powershell_inputs_local_terraform_slz]. - -## Further details on the Microsoft Cloud for Sovereignty Starter Module - -The Terraform-based deployment for the Sovereign Landing Zone (SLZ) provides an Enterprise Scale Landing Zone with equivalent compliance posture equal to that of our [Bicep implementation][bicep_implementation_slz]. There is not currently a migration path between the two implementations, however multiple landing zones can be created with either deployment technology in the same Azure tenant. - -### High Level Design - -![Alt text](./media/starter-module-microsoft_cloud_for_sovereignty.png) - -### Terraform Modules - -#### `alz-archetypes` and `slz-archetypes` - -The `alz-archetypes` and `slz-archetypes` are different from Terraform modules, but are used to deploy the management group hierarchy, policy assignments and management resources including the sovereign baseline policies. For more information on the archetypes, view the [ALZ archetypes](https://github.com/Azure/Azure-Landing-Zones-Library/blob/main/platform/alz/) and the [SLZ archetypes](https://github.com/Azure/Azure-Landing-Zones-Library/blob/main/platform/slz/). - -#### `subscription-vending` - -The `subscription-vending` module is used to deploy the subscriptions and move them within the right management group scopes. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-lz-vending/tree/main/modules/subscription). - -#### `hubnetworking` - -The `hubnetworking` module is used to deploy the hub VNET, Azure Firewall , Route Tables, and other networking primitives into the connectivity subscription. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-hubnetworking). - -#### `private-link` - -The `private-link` module is used to deploy default private link private DNS Zones. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-network-private-link-private-dns-zones). - -#### `alz-management` - -The `alz-management` module is used to deploy a set of management resources such as those for centralized logging. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-alz-management). - -#### `resource-group` - -The `resource-group` module is used to deploy a variety of resource groups within the default subscriptions. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-resources-resourcegroup). - -#### `portal-dashboard` - -The `portal-dashboard` module is used to deploy the default compliance dashboard. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-portal-dashboard). - -#### `azure-bastion` - -The `azure-bastion` module is used to deploy Azure Bastion for remote access. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-bastionhost). - -#### `firewall-policy` - -The `firewall-policy` module is used to deploy a default Azure Firewall Policy for further configuration. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-firewallpolicy). - -#### `ddos-protection` - -The `ddos-protection` module is used to deploy a Standard SKU DDoS Protection Plan resource for network security. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-ddosprotectionplan). - -#### `public-ip` - -The `public-ip` module is used to deploy a Azure Public IP resoures for offerings that need inbound public internet access such as the VPN and ExpressRoute Gateways. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-publicipaddress). - -#### `networksecuritygroup` - -The `networksecuritygroup` module is used to deploy a default NSG for the Azure Bastion subnet to restrict ingress and egress network access. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-networksecuritygroup). - - [//]: # (************************) - [//]: # (INSERT LINK LABELS BELOW) - [//]: # (************************) - -[example_powershell_inputs_azure_devops_terraform_microsoft_cloud_for_sovereignty]: examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Devops - Terraform - Microsoft Cloud For Sovereignty" -[example_powershell_inputs_github_terraform_microsoft_cloud_for_sovereignty]: examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Microsoft Cloud For Sovereignty" -[example_powershell_inputs_local_terraform_microsoft_cloud_for_sovereignty]: examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Microsoft Cloud For Sovereignty" -[parameter_description_powershell_inputs_local_terraform_slz]: https://aka.ms/slz/terraform/params "Parameter Description - PowerShell Inputs - Local - Terraform - SLZ" -[bicep_implementation_slz]: https://aka.ms/slz/bicep "Sovereign Landing Zone (Bicep)" diff --git a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md new file mode 100644 index 00000000..2a25ede3 --- /dev/null +++ b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md @@ -0,0 +1,114 @@ + +The `sovereign_landing_zone` starter module provides full customization of the Sovereign Landing Zone (SLZ) using the `inputs.yaml` file. The `inputs.yaml` file provides the ability to enable and disable modules, configure module inputs and outputs, and configure module resources. +A custom `inputs.yaml` file can be passed to the `inputs` argument of the ALZ PowerShell Module. This allows you to firstly design your Azure Landing Zone, and then deploy it. + +The default `inputs.yaml` file will need to be modified based off the documentation found [here][parameter_description_powershell_inputs_local_terraform_slz]. + +Default input files can be found here: + +- [inputs-azure-devops-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] +- [inputs-github-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_github_terraform_sovereign_landing_zone] +- [inputs-local-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_local_terraform_sovereign_landing_zone] + +The following table describes the inputs for the `sovereign_landing_zone` starter module. + +| Input | Required | Type | Default Value | Description | +| - | -- | --- | ---- | ----- | +| `allowed_locations` | Required | List | | This is a list of Azure regions all workloads running outside of the Confidential Management Group scopes are allowed to be deployed into. | +| `allowed_locations_for_confidential_computing` | Required | List | | This is a list of Azure regions all workloads running inside of the Confidential Management Group scopes are allowed to be deployed into. | +| `az_firewall_policies_enabled` | | Boolean | `true` | Set to `true` to deploy a default Azure Firewall Policy resource if `enable_firewall` is also `true`. | +| `apply_alz_archetypes_via_architecture_definition_template` | | Boolean | `true` | This controls whether to apply the ALZ archetypes (polcy assignments) to the SLZ deployment. | +| `bastion_outbound_ssh_rdp_ports` | | List | `["22", "3389"]` | List of outbound remote access ports to enable on the Azure Bastion NSG if `deploy_bastion` is also `true`. | +| `custom_subnets` | | Map | See `inputs.yaml` for default object. | Map of subnets and their configurations to create within the hub network. | +| `customer` | | String | `"Country/Region"` | Customer name to use when branding the compliance dashboard. | +| `customer_policy_sets` | | Map | See the Custom Compliance section below for details. | Map of customer specified policy initiatives to apply alongside the SLZ. | +| `default_postfix` | | String | | Postfix value to append to all resources. | +| `default_prefix` | Required | String | `slz` | Prefix value to append to all resources. | +| `deploy_bastion` | | Boolean | `true` | Set to `true` to deploy Azure Bastion within the hub network. | +| `deploy_ddos_protection` | | Boolean | `true` | Set to `true` to deploy Azure DDoS Protection within the hub network. | +| `deploy_hub_network` | | Boolean | `true` | Set to `true` to deploy the hub network. | +| `deploy_log_analytics_workspace` | | Boolean | `true` | Set to `true` to deploy Azure Log Analytics Workspace. | +| `enable_firewall` | | Boolean | `true` | Set to `true` to deploy Azure Firewall within the hub network. | +| `enable_telemetry` | | Boolean | `true` | Set to `false` to opt out of telemetry tracking. We use telemetry data to understand usage rates to help prioritize future development efforts. | +| `express_route_gateway_config` | | Map | `{name: "noconfigEr"}` | Leave as default to not deploy an ExpressRoute Gateway. See the Network Connectivity section below for details. | +| `hub_network_address_prefix` | | CIDR | "10.20.0.0/16" | This is the CIDR to use for the hub network. | +| `landing_zone_management_group_children` | | Map | | See the Customize Application Landing Zones section below for details. | +| `log_analytics_workspace_retention_in_days` | | Numeric | 365 | Number of days to retain logs in the Log Analytics Workspace. | +| `ms_defender_for_cloud_email_security_contact` | | Email | `security_contact@replaceme.com` | Email address to use for Microsoft Defender for Cloud. | +| `policy_assignment_enforcement_mode` | | String | `Default` | The enforcement mode to use for the Sovereign Baseline Policy initiatives. | +| `policy_effect` | | String | `Deny` | The effect to use for the Sovereign Baseline Policy initiatives, when policies support multiple effects. | +| `policy_exemptions` | | Map | See the Custom Compliance section below for details. | Map of customer specified policy exemptions to use alongside the SLZ. | +| `subscription_billing_scope` | | String | | Only required if you have not provided existing subscription IDs for management, connectivity, and identity. | +| `tags` | | Map | See the Custom Tagging section below for details. | Set of tags to apply to all resources deployed. | +| `use_premium_firewall` | | Boolean | `true` | Set to `true` to deploy Premium SKU of the Azure Firewall if `enable_firewall` is also `true`. | +| `vpn_gateway_config` | | Map | `{name: "noconfigEr"}` | Leave as default to not deploy an VPN Gateway. See the Network Connectivity section below for details. | + +Full parameter details can be found [here][parameter_description_powershell_inputs_local_terraform_slz]. + +## Further details on the Sovereign Landing Zone Starter Module + +The Terraform-based deployment for the Sovereign Landing Zone (SLZ) provides an Enterprise Scale Landing Zone with equivalent compliance posture equal to that of our [Bicep implementation][bicep_implementation_slz]. There is not currently a migration path between the two implementations, however multiple landing zones can be created with either deployment technology in the same Azure tenant. + +### High Level Design + +![Alt text](./media/starter-module-microsoft_cloud_for_sovereignty.png) + +### Terraform Modules + +#### `alz-archetypes` and `slz-archetypes` + +The `alz-archetypes` and `slz-archetypes` are different from Terraform modules, but are used to deploy the management group hierarchy, policy assignments and management resources including the sovereign baseline policies. For more information on the archetypes, view the [ALZ archetypes](https://github.com/Azure/Azure-Landing-Zones-Library/blob/main/platform/alz/) and the [SLZ archetypes](https://github.com/Azure/Azure-Landing-Zones-Library/blob/main/platform/slz/). + +#### `subscription-vending` + +The `subscription-vending` module is used to deploy the subscriptions and move them within the right management group scopes. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-lz-vending/tree/main/modules/subscription). + +#### `hubnetworking` + +The `hubnetworking` module is used to deploy the hub VNET, Azure Firewall , Route Tables, and other networking primitives into the connectivity subscription. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-hubnetworking). + +#### `private-link` + +The `private-link` module is used to deploy default private link private DNS Zones. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-network-private-link-private-dns-zones). + +#### `alz-management` + +The `alz-management` module is used to deploy a set of management resources such as those for centralized logging. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-ptn-alz-management). + +#### `resource-group` + +The `resource-group` module is used to deploy a variety of resource groups within the default subscriptions. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-resources-resourcegroup). + +#### `portal-dashboard` + +The `portal-dashboard` module is used to deploy the default compliance dashboard. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-portal-dashboard). + +#### `azure-bastion` + +The `azure-bastion` module is used to deploy Azure Bastion for remote access. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-bastionhost). + +#### `firewall-policy` + +The `firewall-policy` module is used to deploy a default Azure Firewall Policy for further configuration. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-firewallpolicy). + +#### `ddos-protection` + +The `ddos-protection` module is used to deploy a Standard SKU DDoS Protection Plan resource for network security. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-ddosprotectionplan). + +#### `public-ip` + +The `public-ip` module is used to deploy a Azure Public IP resoures for offerings that need inbound public internet access such as the VPN and ExpressRoute Gateways. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-publicipaddress). + +#### `networksecuritygroup` + +The `networksecuritygroup` module is used to deploy a default NSG for the Azure Bastion subnet to restrict ingress and egress network access. For more information on the module itself see [here](https://github.com/Azure/terraform-azurerm-avm-res-network-networksecuritygroup). + + [//]: # (************************) + [//]: # (INSERT LINK LABELS BELOW) + [//]: # (************************) + +[example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-sovereign_landing_zone.yaml "Example - PowerShell Inputs - Devops - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-sovereign_landing_zone.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-sovereign_landing_zone.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" +[parameter_description_powershell_inputs_local_terraform_slz]: https://aka.ms/slz/terraform/params "Parameter Description - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" +[bicep_implementation_slz]: https://aka.ms/slz/bicep "Sovereign Landing Zone (Bicep)" diff --git a/docs/wiki/_Sidebar.md b/docs/wiki/_Sidebar.md index 306a7f0d..f475aa2f 100644 --- a/docs/wiki/_Sidebar.md +++ b/docs/wiki/_Sidebar.md @@ -21,6 +21,7 @@ - [Example Multi Region Virtual WAN config][example_starter_module_complete_config_vwan_multi_region] - [Example Single Region Hub and Spoke config][example_starter_module_complete_config_hub_spoke_single_region] - [Example Single Region Virtual WAN config][example_starter_module_complete_config_vwan_single_region] + - [Terraform - Sovereign Landing Zone][wiki_starter_module_terraform_sovereign_landing_zone] - [Terraform - Basic][wiki_starter_module_terraform_basic] - [Terraform - Hub Networking][wiki_starter_module_terraform_hubnetworking] - [Terraform - Complete][wiki_starter_module_terraform_complete] @@ -29,23 +30,23 @@ - [Example Virtual WAN config][example_starter_module_complete_config_vwan] - Input Files - [Azure DevOps Bicep Complete][example_powershell_inputs_azure_devops_bicep_complete] + - [Azure DevOps Terraform Complete Multi Region][example_powershell_inputs_azure_devops_terraform_complete_multi_region] + - [Azure DevOps Terraform Sovereign Landing Zone][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] - [Azure DevOps Terraform Basic][example_powershell_inputs_azure_devops_terraform_basic] - [Azure DevOps Terraform Hub Networking][example_powershell_inputs_azure_devops_terraform_hubnetworking] - [Azure DevOps Terraform Complete][example_powershell_inputs_azure_devops_terraform_complete] - - [Azure DevOps Terraform Complete Multi Region][example_powershell_inputs_azure_devops_terraform_complete_multi_region] - - [Azure DevOps Terraform Sovereign Landing Zone][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] - [GitHub Bicep Complete][example_powershell_inputs_github_bicep_complete] + - [GitHub Terraform Complete Multi Region][example_powershell_inputs_github_terraform_complete_multi_region] + - [GitHub Terraform Sovereign Landing Zone][example_powershell_inputs_github_terraform_sovereign_landing_zone] - [GitHub Terraform Basic][example_powershell_inputs_github_terraform_basic] - [GitHub Terraform Hub Networking][example_powershell_inputs_github_terraform_hubnetworking] - [GitHub Terraform Complete][example_powershell_inputs_github_terraform_complete] - - [GitHub Terraform Complete Multi Region][example_powershell_inputs_github_terraform_complete_multi_region] - - [GitHub Terraform Sovereign Landing Zone][example_powershell_inputs_github_terraform_sovereign_landing_zone] - [Local Bicep Complete][example_powershell_inputs_local_bicep_complete] + - [Local Terraform Complete Multi Region][example_powershell_inputs_local_terraform_complete_multi_region] + - [Local Terraform Sovereign Landing Zone][example_powershell_inputs_local_terraform_sovereign_landing_zone] - [Local Terraform Basic][example_powershell_inputs_local_terraform_basic] - [Local Terraform Hub Networking][example_powershell_inputs_local_terraform_hubnetworking] - [Local Terraform Complete][example_powershell_inputs_local_terraform_complete] - - [Local Terraform Complete Multi Region][example_powershell_inputs_local_terraform_complete_multi_region] - - [Local Terraform Sovereign Landing Zone][example_powershell_inputs_local_terraform_sovereign_landing_zone] - [Frequently Asked Questions][wiki_frequently_asked_questions] - [Upgrade Guide][wiki_upgrade_guide] - [Advanced Scenarios][wiki_advanced_scenarios] @@ -102,12 +103,13 @@ [example_powershell_inputs_azure_devops_terraform_complete_multi_region]: examples/powershell-inputs/inputs-azure-devops-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Complete Multi Region" [example_powershell_inputs_github_terraform_complete_multi_region]: examples/powershell-inputs/inputs-github-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - GitHub - Terraform - Complete Multi Region" [example_powershell_inputs_local_terraform_complete_multi_region]: examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml "Example - PowerShell Inputs - Local - Terraform - Complete Multi Region" -[example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Sovereign Landing Zone" -[example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - GitHub - Terraform - Sovereign Landing Zone" -[example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml "Example - PowerShell Inputs - Azure DevOps - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml "Example - PowerShell Inputs - GitHub - Terraform - Sovereign Landing Zone" +[example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" [example_starter_module_complete_config_hub_spoke]: examples/starter-module-config/complete/config-hub-spoke.yaml "Example - Starter Module Config - Complete - Hub and Spoke" [example_starter_module_complete_config_vwan]: examples/starter-module-config/complete/config-vwan.yaml "Example - Starter Module Config - Complete - Virtual WAN" [example_starter_module_complete_config_hub_spoke_single_region]: examples/starter-module-config/complete-multi-region/config-hub-and-spoke-vnet-single-region.yaml "Example - Starter Module Config - Complete - Hub and Spoke VNet Single Region" [example_starter_module_complete_config_vwan_single_region]: examples/starter-module-config/complete-multi-region/config-virtual-wan-single-region.yaml "Example - Starter Module Config - Complete - Virtual WAN Single Region" [example_starter_module_complete_config_hub_spoke_multi_region]: examples/starter-module-config/complete-multi-region/config-hub-and-spoke-vnet-multi-region.yaml "Example - Starter Module Config - Complete - Hub and Spoke VNet Multi Region" [example_starter_module_complete_config_vwan_multi_region]: examples/starter-module-config/complete-multi-region/config-virtual-wan-multi-region.yaml "Example - Starter Module Config - Complete - Virtual WAN Multi Region" +[wiki_starter_module_terraform_sovereign_landing_zone]: %5BUser-Guide%5D-Starter-Module-Terraform-Sovereign-Landing-Zone "Wiki - Starter Modules - Terraform - Sovereign Landing Zone" diff --git a/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml similarity index 73% rename from docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml rename to docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml index 23cdabc6..b71de037 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-microsoft-cloud-for-sovereignty.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml @@ -2,38 +2,39 @@ # Basic Inputs iac: "terraform" bootstrap: "alz_azuredevops" -starter: "microsoft_cloud_for_sovereignty" +starter: "sovereign_landing_zone" # Shared Interface Inputs -bootstrap_location: "" -starter_locations: [] +bootstrap_location: "" +starter_locations: [""] # NOTE: SLZ only support a single region by design root_parent_management_group_id: "" -subscription_id_management: "" -subscription_id_identity: "" -subscription_id_connectivity: "" +subscription_id_management: "" +subscription_id_identity: "" +subscription_id_connectivity: "" # Bootstrap Inputs -azure_devops_personal_access_token: "" -azure_devops_agents_personal_access_token: "" -azure_devops_organization_name: "" +azure_devops_personal_access_token: "" +azure_devops_agents_personal_access_token: "" +azure_devops_organization_name: "" use_separate_repository_for_templates: true bootstrap_subscription_id: "" service_name: "slz" environment_name: "mgmt" -postfix_number: "1" +postfix_number: 1 azure_devops_use_organisation_legacy_url: false azure_devops_create_project: true -azure_devops_project_name: "" +azure_devops_project_name: "" use_self_hosted_agents: true use_private_networking: true allow_storage_access_from_my_ip: false -apply_approvers: [] +apply_approvers: [""] create_branch_policies: true -apply_alz_archetypes_via_architecture_definition_template: true +architecture_definition_name: "slz" # Starter Module Specific Variables allowed_locations: [] allowed_locations_for_confidential_computing: [] +apply_alz_archetypes_via_architecture_definition_template: true az_firewall_policies_enabled: true bastion_outbound_ssh_rdp_ports: ["22", "3389"] custom_subnets: { @@ -58,9 +59,8 @@ custom_subnets: { } customer: "Country/Region" customer_policy_sets: {} -default_location: "" default_postfix: "" -default_prefix: "mcfs" +default_prefix: "slz" deploy_bastion: true deploy_ddos_protection: true deploy_hub_network: true @@ -81,5 +81,5 @@ use_premium_firewall: true vpn_gateway_config: {name: "noconfigVpn"} # Advanced Inputs -bootstrap_module_version: "v4.0.5" +bootstrap_module_version: "latest" starter_module_version: "latest" diff --git a/docs/wiki/examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml similarity index 75% rename from docs/wiki/examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml rename to docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml index 383fd198..e53d5c74 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-github-terraform-microsoft-cloud-for-sovereignty.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml @@ -2,35 +2,36 @@ # Basic Inputs iac: "terraform" bootstrap: "alz_github" -starter: "microsoft_cloud_for_sovereignty" +starter: "sovereign_landing_zone" # Shared Interface Inputs -bootstrap_location: "" -starter_locations: [] +bootstrap_location: "" +starter_locations: [""] # NOTE: SLZ only support a single region by design root_parent_management_group_id: "" -subscription_id_management: "" -subscription_id_identity: "" -subscription_id_connectivity: "" +subscription_id_management: "" +subscription_id_identity: "" +subscription_id_connectivity: "" # Bootstrap Inputs -github_personal_access_token: "" -github_runners_personal_access_token: "" -github_organization_name: "" +github_personal_access_token: "" +github_runners_personal_access_token: "" +github_organization_name: "" use_separate_repository_for_templates: true bootstrap_subscription_id: "" service_name: "slz" environment_name: "mgmt" -postfix_number: "1" +postfix_number: 1 use_self_hosted_runners: true use_private_networking: true allow_storage_access_from_my_ip: false -apply_approvers: [] +apply_approvers: [""] create_branch_policies: true -apply_alz_archetypes_via_architecture_definition_template: true +architecture_definition_name: "slz" # Starter Module Specific Variables allowed_locations: [] allowed_locations_for_confidential_computing: [] +apply_alz_archetypes_via_architecture_definition_template: true az_firewall_policies_enabled: true bastion_outbound_ssh_rdp_ports: ["22", "3389"] custom_subnets: { @@ -55,9 +56,8 @@ custom_subnets: { } customer: "Country/Region" customer_policy_sets: {} -default_location: "" default_postfix: "" -default_prefix: "mcfs" +default_prefix: "slz" deploy_bastion: true deploy_ddos_protection: true deploy_hub_network: true @@ -78,5 +78,5 @@ use_premium_firewall: true vpn_gateway_config: {name: "noconfigVpn"} # Advanced Inputs -bootstrap_module_version: "v4.0.5" +bootstrap_module_version: "latest" starter_module_version: "latest" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml similarity index 77% rename from docs/wiki/examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml rename to docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml index f0d35a5d..4a5449a2 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-microsoft-cloud-for-sovereignty.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml @@ -2,28 +2,29 @@ # Basic Inputs iac: "terraform" bootstrap: "alz_local" -starter: "microsoft_cloud_for_sovereignty" +starter: "sovereign_landing_zone" # Shared Interface Inputs -bootstrap_location: "" -starter_locations: [] +bootstrap_location: "" +starter_locations: [""] # NOTE: SLZ only support a single region by design root_parent_management_group_id: "" -subscription_id_management: "" -subscription_id_identity: "" -subscription_id_connectivity: "" +subscription_id_management: "" +subscription_id_identity: "" +subscription_id_connectivity: "" # Bootstrap Inputs target_directory: "" -create_bootstrap_resources_in_azure: false +create_bootstrap_resources_in_azure: true bootstrap_subscription_id: "" service_name: "slz" environment_name: "mgmt" -postfix_number: "1" -apply_alz_archetypes_via_architecture_definition_template: true +postfix_number: 1 +architecture_definition_name: "slz" # Starter Module Specific Variables allowed_locations: [] allowed_locations_for_confidential_computing: [] +apply_alz_archetypes_via_architecture_definition_template: true az_firewall_policies_enabled: true bastion_outbound_ssh_rdp_ports: ["22", "3389"] custom_subnets: { @@ -48,9 +49,8 @@ custom_subnets: { } customer: "Country/Region" customer_policy_sets: {} -default_location: "" default_postfix: "" -default_prefix: "mcfs" +default_prefix: "slz" deploy_bastion: true deploy_ddos_protection: true deploy_hub_network: true @@ -71,5 +71,5 @@ use_premium_firewall: true vpn_gateway_config: {name: "noconfigVpn"} # Advanced Inputs -bootstrap_module_version: "v4.0.5" +bootstrap_module_version: "latest" starter_module_version: "latest" From 270dd2329ead10bf74f475fc819d27b763bb3acd Mon Sep 17 00:00:00 2001 From: Jared Holgate Date: Wed, 16 Oct 2024 12:16:26 +0100 Subject: [PATCH 3/7] Add missing and fix comments in config examples --- ...nputs-azure-devops-terraform-sovereign-landing-zone.yaml | 6 +++++- .../inputs-github-terraform-sovereign-landing-zone.yaml | 6 +++++- .../powershell-inputs/inputs-local-bicep-complete.yaml | 2 +- .../powershell-inputs/inputs-local-terraform-basic.yaml | 2 +- .../inputs-local-terraform-complete-multi-region.yaml | 2 +- .../inputs-local-terraform-complete-vnext.yaml | 2 +- .../powershell-inputs/inputs-local-terraform-complete.yaml | 2 +- .../inputs-local-terraform-hubnetworking.yaml | 2 +- .../inputs-local-terraform-sovereign-landing-zone.yaml | 6 +++++- 9 files changed, 21 insertions(+), 9 deletions(-) diff --git a/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml index b71de037..a78e406c 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml @@ -1,4 +1,7 @@ --- +# For detailed instructions on using this file, visit: +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Azure-DevOps#2212-azure-devops-with-terraform + # Basic Inputs iac: "terraform" bootstrap: "alz_azuredevops" @@ -31,7 +34,8 @@ apply_approvers: [""] create_branch_policies: true architecture_definition_name: "slz" -# Starter Module Specific Variables +# Sovereign Landing Zone Starter Module Specific Variables +# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Stater-Module-Terraform-Sovereign-Landing-Zone) allowed_locations: [] allowed_locations_for_confidential_computing: [] apply_alz_archetypes_via_architecture_definition_template: true diff --git a/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml index e53d5c74..10f5c15a 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml @@ -1,4 +1,7 @@ --- +# For detailed instructions on using this file, visit: +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-GitHub#2222-github-with-terraform + # Basic Inputs iac: "terraform" bootstrap: "alz_github" @@ -28,7 +31,8 @@ apply_approvers: [""] create_branch_policies: true architecture_definition_name: "slz" -# Starter Module Specific Variables +# Sovereign Landing Zone Starter Module Specific Variables +# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Stater-Module-Terraform-Sovereign-Landing-Zone) allowed_locations: [] allowed_locations_for_confidential_computing: [] apply_alz_archetypes_via_architecture_definition_template: true diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-bicep-complete.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-bicep-complete.yaml index 39e33e26..c011d339 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-bicep-complete.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-bicep-complete.yaml @@ -1,6 +1,6 @@ --- # For detailed instructions on using this file, visit: -# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Azure-DevOps#2211-azure-devops-with-bicep +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Local#2231-local-file-system-with-bicep # Basic Inputs iac_type: "bicep" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-basic.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-basic.yaml index e28af322..7b32a47e 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-basic.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-basic.yaml @@ -1,6 +1,6 @@ --- # For detailed instructions on using this file, visit: -# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Azure-DevOps#2211-azure-devops-with-bicep +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Local#2232-local-file-system-with-terraform # Basic Inputs iac_type: "terraform" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml index 470baf56..d3932d93 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-multi-region.yaml @@ -1,6 +1,6 @@ --- # For detailed instructions on using this file, visit: -# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Azure-DevOps#2211-azure-devops-with-bicep +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Local#2232-local-file-system-with-terraform # Basic Inputs iac_type: "terraform" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-vnext.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-vnext.yaml index 09803788..7ee44229 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-vnext.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete-vnext.yaml @@ -1,6 +1,6 @@ --- # For detailed instructions on using this file, visit: -# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Azure-DevOps#2211-azure-devops-with-bicep +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Local#2232-local-file-system-with-terraform # Basic Inputs iac_type: "terraform" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete.yaml index db8f3f31..801c6486 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-complete.yaml @@ -1,6 +1,6 @@ --- # For detailed instructions on using this file, visit: -# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Azure-DevOps#2211-azure-devops-with-bicep +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Local#2232-local-file-system-with-terraform # Basic Inputs iac_type: "terraform" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-hubnetworking.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-hubnetworking.yaml index a87df046..9c03ff08 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-hubnetworking.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-hubnetworking.yaml @@ -1,6 +1,6 @@ --- # For detailed instructions on using this file, visit: -# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Azure-DevOps#2211-azure-devops-with-bicep +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Local#2232-local-file-system-with-terraform # Basic Inputs iac_type: "terraform" diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml index 4a5449a2..c83a1841 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml @@ -1,4 +1,7 @@ --- +# For detailed instructions on using this file, visit: +# https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Quick-Start-Phase-2-Local#2232-local-file-system-with-terraform + # Basic Inputs iac: "terraform" bootstrap: "alz_local" @@ -21,7 +24,8 @@ environment_name: "mgmt" postfix_number: 1 architecture_definition_name: "slz" -# Starter Module Specific Variables +# Sovereign Landing Zone Starter Module Specific Variables +# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Stater-Module-Terraform-Sovereign-Landing-Zone) allowed_locations: [] allowed_locations_for_confidential_computing: [] apply_alz_archetypes_via_architecture_definition_template: true From 8bbde76d74fe6c31bfd18413f976aa64f2578a05 Mon Sep 17 00:00:00 2001 From: Jared Holgate Date: Wed, 16 Oct 2024 12:17:56 +0100 Subject: [PATCH 4/7] Fix typos --- .../inputs-azure-devops-terraform-sovereign-landing-zone.yaml | 2 +- .../inputs-github-terraform-sovereign-landing-zone.yaml | 2 +- .../inputs-local-terraform-sovereign-landing-zone.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml index a78e406c..85f68fb5 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-azure-devops-terraform-sovereign-landing-zone.yaml @@ -35,7 +35,7 @@ create_branch_policies: true architecture_definition_name: "slz" # Sovereign Landing Zone Starter Module Specific Variables -# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Stater-Module-Terraform-Sovereign-Landing-Zone) +# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Starter-Module-Terraform-Sovereign-Landing-Zone) allowed_locations: [] allowed_locations_for_confidential_computing: [] apply_alz_archetypes_via_architecture_definition_template: true diff --git a/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml index 10f5c15a..33c69e13 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-github-terraform-sovereign-landing-zone.yaml @@ -32,7 +32,7 @@ create_branch_policies: true architecture_definition_name: "slz" # Sovereign Landing Zone Starter Module Specific Variables -# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Stater-Module-Terraform-Sovereign-Landing-Zone) +# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Starter-Module-Terraform-Sovereign-Landing-Zone) allowed_locations: [] allowed_locations_for_confidential_computing: [] apply_alz_archetypes_via_architecture_definition_template: true diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml index c83a1841..7eb5319d 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml @@ -25,7 +25,7 @@ postfix_number: 1 architecture_definition_name: "slz" # Sovereign Landing Zone Starter Module Specific Variables -# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Stater-Module-Terraform-Sovereign-Landing-Zone) +# (Details: https://github.com/Azure/ALZ-PowerShell-Module/wiki/%5BUser-Guide%5D-Starter-Module-Terraform-Sovereign-Landing-Zone) allowed_locations: [] allowed_locations_for_confidential_computing: [] apply_alz_archetypes_via_architecture_definition_template: true From 1e61d7169784d46432fbae3b7fb9655fd2796c39 Mon Sep 17 00:00:00 2001 From: Jared Holgate Date: Wed, 16 Oct 2024 12:22:41 +0100 Subject: [PATCH 5/7] Remove erroneous link --- ...ide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md index 2a25ede3..0b1c5e9d 100644 --- a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md +++ b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md @@ -2,9 +2,9 @@ The `sovereign_landing_zone` starter module provides full customization of the Sovereign Landing Zone (SLZ) using the `inputs.yaml` file. The `inputs.yaml` file provides the ability to enable and disable modules, configure module inputs and outputs, and configure module resources. A custom `inputs.yaml` file can be passed to the `inputs` argument of the ALZ PowerShell Module. This allows you to firstly design your Azure Landing Zone, and then deploy it. -The default `inputs.yaml` file will need to be modified based off the documentation found [here][parameter_description_powershell_inputs_local_terraform_slz]. +The default `inputs.yaml` file will need to be modified based on the documentation below. -Default input files can be found here: +Example input files can be found here: - [inputs-azure-devops-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone] - [inputs-github-terraform-sovereign-landing-zone.yaml][example_powershell_inputs_github_terraform_sovereign_landing_zone] @@ -43,8 +43,6 @@ The following table describes the inputs for the `sovereign_landing_zone` starte | `use_premium_firewall` | | Boolean | `true` | Set to `true` to deploy Premium SKU of the Azure Firewall if `enable_firewall` is also `true`. | | `vpn_gateway_config` | | Map | `{name: "noconfigEr"}` | Leave as default to not deploy an VPN Gateway. See the Network Connectivity section below for details. | -Full parameter details can be found [here][parameter_description_powershell_inputs_local_terraform_slz]. - ## Further details on the Sovereign Landing Zone Starter Module The Terraform-based deployment for the Sovereign Landing Zone (SLZ) provides an Enterprise Scale Landing Zone with equivalent compliance posture equal to that of our [Bicep implementation][bicep_implementation_slz]. There is not currently a migration path between the two implementations, however multiple landing zones can be created with either deployment technology in the same Azure tenant. @@ -110,5 +108,4 @@ The `networksecuritygroup` module is used to deploy a default NSG for the Azure [example_powershell_inputs_azure_devops_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-azure-devops-terraform-sovereign_landing_zone.yaml "Example - PowerShell Inputs - Devops - Terraform - Sovereign Landing Zone" [example_powershell_inputs_github_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-github-terraform-sovereign_landing_zone.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" [example_powershell_inputs_local_terraform_sovereign_landing_zone]: examples/powershell-inputs/inputs-local-terraform-sovereign_landing_zone.yaml "Example - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" -[parameter_description_powershell_inputs_local_terraform_slz]: https://aka.ms/slz/terraform/params "Parameter Description - PowerShell Inputs - Local - Terraform - Sovereign Landing Zone" [bicep_implementation_slz]: https://aka.ms/slz/bicep "Sovereign Landing Zone (Bicep)" From 7da42b80a3751cf9eacc86d229c96ad494567738 Mon Sep 17 00:00:00 2001 From: Zhiyan Xu Date: Wed, 16 Oct 2024 12:30:37 -0700 Subject: [PATCH 6/7] Update the default value of create_bootstrap_resources_in_azure to false. --- .../inputs-local-terraform-sovereign-landing-zone.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml index 7eb5319d..7abc4586 100644 --- a/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml +++ b/docs/wiki/examples/powershell-inputs/inputs-local-terraform-sovereign-landing-zone.yaml @@ -17,7 +17,7 @@ subscription_id_connectivity: "" # Bootstrap Inputs target_directory: "" -create_bootstrap_resources_in_azure: true +create_bootstrap_resources_in_azure: false bootstrap_subscription_id: "" service_name: "slz" environment_name: "mgmt" From 23bca2e5d242174f0be0f0078bbdecb42df2f02b Mon Sep 17 00:00:00 2001 From: Jared Holgate Date: Wed, 16 Oct 2024 21:48:05 +0100 Subject: [PATCH 7/7] Fixes per the PR feedback --- ...Guide]-Quick-Start-Phase-2-Azure-DevOps.md | 2 +- ...[User-Guide]-Quick-Start-Phase-2-GitHub.md | 2 +- .../[User-Guide]-Quick-Start-Phase-2-Local.md | 2 +- ...Module-Terraform-Sovereign-Landing-Zone.md | 159 ++++++++++++++++++ 4 files changed, 162 insertions(+), 3 deletions(-) diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md index e5608a2e..3b4da3da 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Azure-DevOps.md @@ -146,7 +146,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, | `allow_storage_access_from_my_ip` | `TF_VAR` | `false` | This controls whether to allow access to the storage account from your IP address. This is only needed for trouble shooting. This only applies if you have `use_private_networking` set to `true`. This defaults to `false`. | | `apply_approvers` | `TF_VAR` | `` | This is a list of service principal names (SPN) of people you wish to be in the group that approves apply of the Azure landing zone module. This is an array of strings like `["abc@xyz.com", "def@xyz.com", "ghi@xyz.com"]`. You may need to check what the SPN is prior to filling this out as it can vary based on identity provider. Use empty array `[]` to disable approvals. Note if supplying via the user interface, use a comma separated string like `abc@xyz.com,def@xyz.com,ghi@xyz.com`. | | `create_branch_policies` | `TF_VAR` | `true` | This controls whether to create branch policies for the repository. This defaults to `true`. | - | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to starter modules used by Microsoft Cloud for Industry, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | + | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to some starter modules, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | 1. Now head over to your chosen starter module documentation to get the specific inputs for that module. Come back here when you are done. - [Terraform Complete Multi Region Starter Module][wiki_starter_module_terraform_complete_multi_region]: Management groups, policies, Multi Region hub networking with fully custom configuration. diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md index 55dfb13d..c93da278 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-GitHub.md @@ -132,7 +132,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, | `allow_storage_access_from_my_ip` | `TF_VAR` | `false` | This controls whether to allow access to the storage account from your IP address. This is only needed for trouble shooting. This only applies if you have `use_private_networking` set to `true`. This defaults to `false`. | | `apply_approvers` | `TF_VAR` | `` | This is a list of service principal names (SPN) of people you wish to be in the group that approves apply of the Azure landing zone module. This is an array of strings like `["abc@xyz.com", "def@xyz.com", "ghi@xyz.com"]`. You may need to check what the SPN is prior to filling this out as it can vary based on identity provider. Use empty array `[]` to disable approvals. Note if supplying via the user interface, use a comma separated string like `abc@xyz.com,def@xyz.com,ghi@xyz.com`. | | `create_branch_policies` | `TF_VAR` | `true` | This controls whether to create branch policies for the repository. This defaults to `true`. | - | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to starter modules used by Microsoft Cloud for Industry, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | + | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to some starter modules, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | 1. Now head over to your chosen starter module documentation to get the specific inputs for that module. Come back here when you are done. - [Terraform Complete Multi Region Starter Module][wiki_starter_module_terraform_complete_multi_region]: Management groups, policies, Multi Region hub networking with fully custom configuration. diff --git a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md index 65d93181..7f9f0b68 100644 --- a/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md +++ b/docs/wiki/[User-Guide]-Quick-Start-Phase-2-Local.md @@ -122,7 +122,7 @@ Although you can just run `Deploy-Accelerator` and fill out the prompted inputs, | `environment_name` | `TF_VAR` | `mgmt` | This is used to build up the names of your Azure and Azure DevOps resources, for example `rg-alz--uksouth-001`. We recommend using `mgmt` for this. | | `postfix_number` | `TF_VAR` | `1` | This is used to build up the names of your Azure and Azure DevOps resources, for example `rg-alz-mgmt-uksouth-`. We recommend using `1` for this. | | `grant_permissions_to_current_user` | `TF_VAR` | `true` | This determines whether the bootstrap will grant the current user permissions to the management group structure and stroage account created by the accelerator. This defaults to `true` so that the starter module can be immediately deployed from the local file system. Set this to `false` if you itend to wire up CI/CD with your own provider. | - | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to starter modules used by Microsoft Cloud for Industry, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | + | `architecture_definition_name` | `TF_VAR` | N/A | This is the name of the architecture definition to use when applying the ALZ archetypes via the architecture definition template. This is only relevant to some starter modules, such as the `sovereign_landing_zone` starter module. This defaults to `null`. | 1. Now head over to your chosen starter module documentation to get the specific inputs for that module. Come back here when you are done. - [Terraform Complete Multi Region Starter Module][wiki_starter_module_terraform_complete_multi_region]: Management groups, policies, Multi Region hub networking with fully custom configuration. diff --git a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md index 0b1c5e9d..ed242d59 100644 --- a/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md +++ b/docs/wiki/[User-Guide]-Starter-Module-Terraform-Sovereign-Landing-Zone.md @@ -43,6 +43,165 @@ The following table describes the inputs for the `sovereign_landing_zone` starte | `use_premium_firewall` | | Boolean | `true` | Set to `true` to deploy Premium SKU of the Azure Firewall if `enable_firewall` is also `true`. | | `vpn_gateway_config` | | Map | `{name: "noconfigEr"}` | Leave as default to not deploy an VPN Gateway. See the Network Connectivity section below for details. | +## Custom Compliance + +### Custom Policy Sets + +An example of the format for the `customer_policy_sets` map is as follows: + +```yaml +customer_policy_sets: { + assignment1: { + policySetDefinitionId: "/providers/Microsoft.Authorization/policySetDefinitions/d5264498-16f4-418a-b659-fa7ef418175f", + policySetAssignmentName: "FedRAMPHigh", + policySetAssignmentDisplayName: "FedRAMP High", + policySetAssignmentDescription: "FedRAMP High", + policySetManagementGroupAssignmentScope: "/providers/Microsoft.management/managementGroups/", + policyParameterFilePath: "./policy_parameters/policySetParameterSampleFile.json" + } +} +``` + +### Policy Exemptions + +An example of the format for the `policy_exemptions` map is as follows: + +```yaml +policy_exemptions: { + policy_exemption1: { + name: "globalexemption", + display_name: "global", + description: "test", + management_group_id: "/providers/Microsoft.management/managementGroups/", + policy_assignment_id: "/providers/microsoft.management/managementGroups//providers/microsoft.Authorization/policyassignments/enforce-sovereign-global", + policy_definition_reference_ids: ["AllowedLocations"] + } +} +``` + +## Customize Application Landing Zones + +### Landing Zone Management Group Children + +An example of the format for the `landing_zone_management_group_children` map is as follows: + +```yaml +landing_zone_management_group_children: { + child1: { + id: "child1", + display_name: "Landing zone child one" + } +} +``` + +## Custom Tagging + +### Tags + +An example of the format for the `tags` map is as follows: + +```yaml +tags: { + Environment: "Production", + ServiceName: "SLZ" +} +``` + +## Network Connectivity + +### ExpressRoute Gateway Config + +An example of the format for the `express_route_gateway_config` map is as follows: + +```yaml +express_route_gateway_config: { + name: "express_route", + gatewayType: "ExpressRoute", + sku: "ErGw1AZ", + vpnType: "RouteBased", + vpnGatewayGeneration: null, + enableBgp: false, + activeActive: false, + enableBgpRouteTranslationForNat: false, + enableDnsForwarding: false, + asn: 65515, + bgpPeeringAddress: "", + peerWeight: 5 +} +``` + +### VPN Gateway Config + +An example of the format for the `vpn_gateway_config` map is as follows: + +```yaml +vpn_gateway_config: { + name: "vpn_gateway", + gatewayType: "Vpn", + sku: "VpnGw1", + vpnType: "RouteBased", + vpnGatewayGeneration: "Generation1", + enableBgp: false, + activeActive: false, + enableBgpRouteTranslationForNat: false, + enableDnsForwarding: false, + bgpPeeringAddress: "", + asn: 65515, + peerWeight: 5, + vpnClientConfiguration: { + vpnAddressSpace: ["10.2.0.0/24"] + } +} +``` + +## Known Issues + +The following are known issues with the Public Preview release for the SLZ. + +### Multiple Resources Destroyed and Recreated During Second Execution + +Occasionally, terraform will attempt to recreate many resources under a subscription despite no resource configurations being changed. A temporary work around can be done by updating `locals.tf` with the following: + +```terraform +locals { + subscription_id_management = "management_subscription_id" + subscription_id_connectivity = "connectivity_subscription_id" + subscription_id_identity = "identity_subscription_id" +} +``` + +### Multiple Inputs for Location + +The inputs for `bootstrap_location` and `starter_locations` and `default_location` must be identical. In a future release, we will have defaults and overrides for these values. + +### Terraform Plan or Apply Fails After Updating tfvars + +Any updates should be made to the `inputs.yaml` file and the tfvars will be updated upon executing the `Deploy-Accelerator` PowerShell command. + +### Invalid Hub Network Address Prefix or Subnet Address Prefix + +There is no validation done to ensure subnets fall within the hub network CIDR or that subnets do not overlap. These issues will be uncovered during apply. + +### Unable to Build Authorizer for Resource Manager API + +It is necessary to rerun `az login` after creating subscriptions for terraform to pick up that they exist. + +### Unable to Update Address Prefixes + +Updating the address prefix on either the hub network or subnets is not supported at this time. + +### Unable to Change Top Level or Sub Level Management Group Names + +Modifying the Top Level or Sub Level Management Group name is not supported at this time. + +### Tags are Not Applied to All Resources + +Certain resources are not receiving the default tags. This will be addressed in a future release. + +### Default Compliance Score is not 100% + +Certain resources will show as being out of compliance by default. This will be addressed in a future release. + ## Further details on the Sovereign Landing Zone Starter Module The Terraform-based deployment for the Sovereign Landing Zone (SLZ) provides an Enterprise Scale Landing Zone with equivalent compliance posture equal to that of our [Bicep implementation][bicep_implementation_slz]. There is not currently a migration path between the two implementations, however multiple landing zones can be created with either deployment technology in the same Azure tenant.