Azure Organization Hierarchy

Source code & Installation

The source code of this kit module can be found hereopen in new window

Run the following command to install the kit module:

collie kit import azure/organization-hierarchy
1

This repository provides a Terraform configuration for setting up Azure Management Groups in alignment with the Azure Enterprise Scale Cloud Adoption Framework (CAF). The management groups enable efficient management, access control, and policy enforcement across multiple Azure subscriptions.

This kit module forms the core of your Azure Landing Zone architectureopen in new window. You can build on this with other kit modules, see related kit modules below.

Overview

The Terraform configuration in this repository establishes a hierarchical structure of management groups to organize and govern Azure resources effectively.

This kit module provides a good starting point with many commonly deployed policies. You should however tailor this approach to your organization's individual needs and think through the rationale of each policy. The security & compliance pillaropen in new window of the cloud foundation maturity model can provide useful guidance about which policies are essential and which ones are more optional.

It's fine to throw some policies out instead of going all in with the defaults. Remember, you can always iterate on your kit modules. This is useful when you're just starting out and want to keep things simple, or when you already have a lot of existing Azure resources and need to be careful about not disrupting existing workloads.

After deploying this module, you should probably deploy the following kit modules next to

Requirements

NameVersion
terraform>= 1.0
azurerm~> 3.97.0

Modules

NameSourceVersion
policy_rootgithub.com/meshcloud/collie-hub//kit/azure/util/azure-policiesda8dd49

Resources

NameType
azurerm_management_group.connectivityopen in new windowresource
azurerm_management_group.identityopen in new windowresource
azurerm_management_group.landingzonesopen in new windowresource
azurerm_management_group.managementopen in new windowresource
azurerm_management_group.platformopen in new windowresource
azurerm_management_group_subscription_association.managementopen in new windowresource
terraform_data.management_subscription_nameopen in new windowresource
azurerm_management_group.parentopen in new windowdata source
azurerm_subscription.currentopen in new windowdata source

Inputs

NameDescriptionTypeDefaultRequired
connectivityn/astring"connectivity"no
identityn/astring"identity"no
landingzonesn/astring"landingzones"no
locationsThis is for the Azure Allowed locations. Additionally, we use the first added locations where this policy assignment should exist, which is required when an identity is assigned.list(string)
[
"germanywestcentral"
]
no
managementn/astring"management"no
management_subscription_nameName of your management subscriptionstring"management"no
parent_management_group_namen/astring"foundation"no
platformn/astring"platform"no

Outputs

NameDescription
connectivity_idn/a
documentation_mdn/a
identity_idn/a
landingzones_idn/a
management_idn/a
parent_idn/a
platform_idn/a