Azure Citadel
  • Blogs

  • Azure Arc
    • Overview
    • Azure Arc-enabled Kubernetes
      • Prereqs
      • Background
      • Deploy Cluster
      • Connect to Arc
      • Enable GitOps
      • Deploy Application
      • Enable Azure AD
      • Enforce Policy
      • Enable Monitoring
      • Enable Azure Defender
      • Enable Data Services
      • Enable Application Delivery
    • Azure Arc-enabled Servers
      • Prereqs
      • Scenario
      • Hack Overview
      • Azure Landing Zone
      • Arc Pilot resource group
      • Azure Monitoring Agent
      • Additional policy assignments
      • Access your on prem VMs
      • Create onboarding scripts
      • Onboarding using scripts
      • Inventory
      • Monitoring
      • SSH
      • Windows Admin Center
      • Governance
      • Custom Script Extension
      • Key Vault Extension
      • Managed Identity
    • Useful Links
  • Azure CLI
    • Install
    • Get started
    • JMESPATH queries
    • Integrate with Bash
  • Azure Landing Zones
    • ALZ Accelerator
      • Bootstrap
      • Prereqs
      • Elevate
      • Demote
      • Components
    • Deploy an Azure Landing Zone
      • Create an initial ALZ config
      • Test locally
      • Run through the CI/CD workflow
    • Understanding Libraries
      • Library overview
      • Policies and Roles
      • Archetypes
      • Architectures
      • Metadata
    • Example Library Configs
      • Azure Landing Zone library
      • Azure Landing Zone library with overrides
  • Azure Lighthouse
    • Minimal Lighthouse definition
    • Using service principals
    • Privileged Identity Management
  • Azure Policy
    • Azure Policy Basics
      • Policy Basics in the Azure Portal
      • Creating Policy via the CLI
      • Deploy If Not Exists
      • Management Groups and Initiatives
    • Creating Custom Policies
      • Customer scenario
      • Policy Aliases
      • Determine the logic
      • Create the custom policy
      • Define, assign and test
  • Marketplace
    • Introduction
      • Terminology
      • Offer Types
    • Partner Center
    • Offer Type
    • Publish a VM Offer HOL
      • Getting Started
      • Create VM Image
      • Test VM Image
      • VM Offer with SIG
      • VM Offer with SAS
      • Publish Offer
      • Other VM Resources
    • Publish a Solution Template HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Publish a Managed App HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Managed Apps with AKS HOL
    • Other Managed App Resources
    • SaaS Offer HOLs
    • SaaS Offer Video Series
      • Video 1 - SaaS Offer Overview
      • Video 2 - Purchasing a SaaS Offer
      • Video 3 - Purchasing a Private SaaS Plan
      • Video 4 - Publishing a SaaS Offer
      • Video 5 - Publishing a Private SaaS Plan
      • Video 6 - SaaS Offer Technical Overview
      • Video 7 - Azure AD Application Registrations
      • Video 8 - Using the SaaS Offer REST Fulfillment API
      • Video 9 - The SaaS Client Library for .NET
      • Video 10 - Building a Simple SaaS Landing Page in .NET
      • Video 11 - Building a Simple SaaS Publisher Portal in .NET
      • Video 12 - SaaS Webhook Overview
      • Video 13 - Implementing a Simple SaaS Webhook in .NET
      • Video 14 - Securing a Simple SaaS Webhook in .NET
      • Video 15 - SaaS Metered Billing Overview
      • Video 16 - The SaaS Metered Billing API with REST
  • Microsoft Fabric
    • Theory
    • Prereqs
    • Fabric Capacity
    • Set up a Remote State
    • Create a repo from a GitHub template
    • Configure an app reg for development
    • Initial Terraform workflow
    • Expanding your config
    • Configure a workload identity
    • GitHub Actions for Microsoft Fabric
    • GitLab pipeline for Microsoft Fabric
  • Packer & Ansible
    • Packer
    • Ansible
    • Dynamic Inventories
    • Playbooks & Roles
    • Custom Roles
    • Shared Image Gallery
  • Partner Admin Link
    • Understanding PAL
    • User IDs & PAL
    • Service principals & PAL
    • CI/CD pipelines & PAL
    • Creating a dedicated PAL service principal
    • Azure Lighthouse & PAL
    • PAL FAQ
  • REST API
    • REST API theory
    • Using az rest
  • Setup
  • Sovereign Landing Zones
    • ALZ Accelerator
      • Prereqs
      • Elevate
      • Bootstrap
      • Demote
      • Components
    • Deploy Sovereign Landing Zone
      • Create an initial SLZ config
      • Test locally
      • Run through the CI/CD workflow
    • Custom Libraries
      • Overview of Libraries
      • Policies, Assignments and Roles
      • Archetypes, Overrides and Architecture
    • Reference Library Configs
      • Sovereign Landing Zone
      • Sovereign Landing Zone library with overrides
      • SLZ extended with a country pack
  • Terraform
    • Fundamentals
      • Initialise
      • Format
      • Validate
      • Plan
      • Apply
      • Adding resources
      • Locals and outputs
      • Managing state
      • Importing resources
      • Destroy
    • Get set up for Terraform
      • Cloud Shell
      • macOS
      • Windows with PowerShell
      • Windows with Ubuntu in WSL2
    • Using AzAPI
      • Using the REST API
      • azapi_resource
      • Removing azapi_resource
      • azapi_update_resource
      • Data sources and outputs
      • Removing azapi_update_resource
  • Virtual Machines
    • Azure Bastion with native tools & AAD
    • Managed Identities

  • About
  • Archive
  1. Home
  2. Sovereign Landing Zones
  3. Custom Libraries
  4. Archetypes, Overrides and Architecture
Archetypes, Overrides and Architecture
Archetypes, Overrides and Architecture
Custom Libraries
Overview of Libraries
Policies, Assignments and Roles
Archetypes, Overrides and Architecture

Archetypes, Overrides and Architecture

Documentation for archetype definitions within the Sovereign Landing Zones Library, including their structure, configuration, and usage patterns.

Table of Contents

Overview

The assets on the previous page - policy definitions, policy set definitions, role definitions, and policy assignments - will all be familiar to those working with governance on Azure and use the standard definition and assignment schemas for those resources.

The three constructs covered on this page are specific to the Azure Landing Zone library format, and control how those assets are used by the alz provider and by clients such as the Bicep and Terraform modules for management groups.

Those three constructs are:

  • Archetypes: Foundational building blocks that group together related policy and policy set definitions, policy assignments, and role definitions.
  • Archetype overrides: These define new archetypes as a delta from a base archetype definition.
  • Architecture: Define a management group hierarchy and the array of archetypes

Archetype

The assets in a library don’t do anything unless they are grouped into archetypes and used within an architecture definition.

archetype_definitions/<name>.alz_archetype_definition.json

Archetype Definition schema

Azure/Azure-Landing-Zones-Library/schemas/archetype_definition.json

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "name": {
      "type": "string"
    },
    "policy_assignments": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "policy_definitions": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "policy_set_definitions": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "role_definitions": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "name"
  ],
  "type": "object"
}

Archetype example: nl_root

{
  "name": "nl_root",
  "policy_assignments": [
    "Audit-NL-BIO",
    "Deny-NL-Global"
  ],
  "policy_definitions": [
    "Enforce-KV-Premium"
  ],
  "policy_set_definitions": [
    "Deny-NL-Global",
    "Deny-NL-Confidential"
  ],
  "role_definitions": []
}

  • The archetype name in the file - nl_root - may be used in an architecture definition.
  • As with all entities in a library, the name must be unique.
  • The archetype name usually indicates the intended management group, but this is merely convention.
  • Definitions - for policy, policy sets and roles - are commonly defined at the root so that they can be used throughout the management group hierarchy.
  • Each array uses the names for the assets as described on the previous page.

Archetype Overrides

Archetype overrides define a delta against a base archetype, which add significant flexibility. Overrides are not intended for use in centralised libraries - they are more commonly used in local libraries so that end customers can add or remove from archetypes.

archetype_definitions/<name>.alz_archetype_override.json

Archetype Override schema

Azure/Azure-Landing-Zones-Library/schemas/archetype_override.json

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "base_archetype": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "policy_assignments_to_add": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "policy_assignments_to_remove": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "policy_definitions_to_add": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "policy_definitions_to_remove": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "policy_set_definitions_to_add": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "policy_set_definitions_to_remove": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "role_definitions_to_add": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    },
    "role_definitions_to_remove": {
      "type": "array",
      "items": [
        {
          "type": "string"
        }
      ]
    }
  },
  "required": [
    "base_archetype",
    "name"
  ]
}

Override example: corp_custom

This is the default override file created by the accelerator in the local library for the corp archetype.

base_archetype: corp
name: corp_custom
policy_assignments_to_add: []
policy_assignments_to_remove: [
# To remove the private DNS zones policy for private endpoints
  # Deploy-Private-DNS-Zones,
]
policy_definitions_to_add: []
policy_definitions_to_remove: []
policy_set_definitions_to_add: []
policy_set_definitions_to_remove: []
role_definitions_to_add: []
role_definitions_to_remove: []

  • The base_archetype here is corp and the name is corp_custom.
  • Remember, all names in a library must be unique per type.
  • You would use the corp_custom name in the architecture definition.
  • You can add or remove assets from the baseline.
  • The example would remove Deploy-Private-DNS-Zones from the corp archetype.

Architecture Definitions

The architecture definitions finally bring everything together, defining the management group hierarchy, the IDs and displayNames, and the array of archetypes to be used at each scope point.

architecture_definitions/<name>.alz_architecture_definition.json

Architecture Definition schema

Azure/Azure-Landing-Zones-Library/schemas/architecture_definition.json

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "management_groups": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "archetypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "display_name": {
            "type": "string"
          },
          "exists": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "parent_id": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "required": [
          "archetypes",
          "display_name",
          "exists",
          "id",
          "parent_id"
        ]
      }
    },
    "name": {
      "type": "string"
    }
  },
  "required": [
    "management_groups",
    "name"
  ]
}

Architecture example #1: alz

This is the default architecture file used in the main Azure Landing Zone platform library.

flowchart LR subgraph alz[“alz”] alz_box[“alz”] end

{
  "$schema": "https://raw.githubusercontent.com/Azure/Azure-Landing-Zones-Library/main/schemas/architecture_definition.json",
  "name": "alz",
  "management_groups": [
    {
      "archetypes": [
        "root"
      ],
      "display_name": "Azure Landing Zones",
      "exists": false,
      "id": "alz",
      "parent_id": null
    },
    {
      "archetypes": [
        "platform"
      ],
      "display_name": "Platform",
      "exists": false,
      "id": "platform",
      "parent_id": "alz"
    },
    {
      "archetypes": [
        "landing_zones"
      ],
      "display_name": "Landing zones",
      "exists": false,
      "id": "landingzones",
      "parent_id": "alz"
    },
    {
      "archetypes": [
        "corp"
      ],
      "display_name": "Corp",
      "exists": false,
      "id": "corp",
      "parent_id": "landingzones"
    },
    {
      "archetypes": [
        "online"
      ],
      "display_name": "Online",
      "exists": false,
      "id": "online",
      "parent_id": "landingzones"
    },
    {
      "archetypes": [
        "sandbox"
      ],
      "display_name": "Sandbox",
      "exists": false,
      "id": "sandbox",
      "parent_id": "alz"
    },
    {
      "archetypes": [
        "security"
      ],
      "display_name": "Security",
      "exists": false,
      "id": "security",
      "parent_id": "platform"
    },
    {
      "archetypes": [
        "management"
      ],
      "display_name": "Management",
      "exists": false,
      "id": "management",
      "parent_id": "platform"
    },
    {
      "archetypes": [
        "connectivity"
      ],
      "display_name": "Connectivity",
      "exists": false,
      "id": "connectivity",
      "parent_id": "platform"
    },
    {
      "archetypes": [
        "identity"
      ],
      "display_name": "Identity",
      "exists": false,
      "id": "identity",
      "parent_id": "platform"
    },
    {
      "archetypes": [
        "decommissioned"
      ],
      "display_name": "Decommissioned",
      "exists": false,
      "id": "decommissioned",
      "parent_id": "alz"
    }
  ]
}

  • The architecture name here is alz, must be unique, and is used as the value of the architecture_name in the avm-ptn-alz Terraform module.
  • There is usually a maximum of one architecture file in a library.

Architecture example #2: alz_custom

This is the architecture file used in the local library.

alz_custom
name: alz_custom
management_groups:
  - id: alz
    display_name: Azure Landing Zones
    archetypes:
      - root_custom
    exists: false
    parent_id: null

  - id: platform
    display_name: Platform
    archetypes:
      - platform_custom
    exists: false
    parent_id: alz

  - id: landingzones
    display_name: Landing Zones
    archetypes:
      - landing_zones_custom
    exists: false
    parent_id: alz

  - id: corp
    display_name: Corp
    archetypes:
      - corp_custom
    exists: false
    parent_id: landingzones

  - id: online
    display_name: Online
    archetypes:
      - online_custom
    exists: false
    parent_id: landingzones

  - id: sandbox
    display_name: Sandbox
    archetypes:
      - sandbox_custom
    exists: false
    parent_id: alz

  - id: security
    display_name: Security
    archetypes:
      - security_custom
    exists: false
    parent_id: platform

  - id: management
    display_name: Management
    archetypes:
      - management_custom
    exists: false
    parent_id: platform

  - id: connectivity
    display_name: Connectivity
    archetypes:
      - connectivity_custom
    exists: false
    parent_id: platform

  - id: identity
    display_name: Identity
    archetypes:
      - identity_custom
    exists: false
    parent_id: platform

  - id: decommissioned
    display_name: Decommissioned
    archetypes:
      - decommissioned_custom
    exists: false
    parent_id: alz

  • The architecture name here is alz_custom, so the value of the architecture_name in the avm-ptn-alz Terraform module call would need to be updated.
  • The management group hierarchy itself is unchanged.
  • The only difference is the archetype names which reflect the override archetype names, e.g. corp_custom rather than corp.

Architecture example #3: alz_custom + slz

This is the same architecture file in the local library after it has been updated with the additional Sovereign Landing Zone archetypes and management groups.

alz_custom with slz
name: alz_custom
management_groups:
  - id: alz
    display_name: Sovereign Landing Zone
    archetypes:
      - root_custom
      - sovereign_root_custom
    exists: false
    parent_id: null

  - id: platform
    display_name: Platform
    archetypes:
      - platform_custom
    exists: false
    parent_id: alz

  - id: landingzones
    display_name: Landing Zones
    archetypes:
      - landing_zones_custom
    exists: false
    parent_id: alz

  - id: public
    display_name: Public
    archetypes:
      - public_custom
    exists: false
    parent_id: landingzones

  - id: corp
    display_name: Corp
    archetypes:
      - corp_custom
    exists: false
    parent_id: landingzones

  - id: online
    display_name: Online
    archetypes:
      - online_custom
    exists: false
    parent_id: landingzones

  - id: confidential-corp
    display_name: Confidential Corp
    archetypes:
      - confidential_corp_custom
    exists: false
    parent_id: landingzones

  - id: confidential-online
    display_name: Confidential Online
    archetypes:
      - confidential_online_custom
    exists: false
    parent_id: landingzones

  - id: sandbox
    display_name: Sandbox
    archetypes:
      - sandbox_custom
    exists: false
    parent_id: alz

  - id: security
    display_name: Security
    archetypes:
      - security_custom
    exists: false
    parent_id: platform

  - id: management
    display_name: Management
    archetypes:
      - management_custom
    exists: false
    parent_id: platform

  - id: connectivity
    display_name: Connectivity
    archetypes:
      - connectivity_custom
    exists: false
    parent_id: platform

  - id: identity
    display_name: Identity
    archetypes:
      - identity_custom
    exists: false
    parent_id: platform

  - id: decommissioned
    display_name: Decommissioned
    archetypes:
      - decommissioned_custom
    exists: false
    parent_id: alz

  • Note that the update steps do not change the file name or architecture name.
  • The value of the architecture_name in the avm-ptn-alz Terraform module stays as alz_custom to limit the terraform plan diff.
  • The management group hierarchy is extended with Public, Confidential Corp, and Confidential Online.
  • The new archetypes are associated to those new management group scopes.
  • The root (alz) management group includes both the root_custom and sovereign_root_custom archetypes.

Architecture example #4: nl_slz_custom

This final version includes the is the same architecture file in the local library after it has been updated with the additional Sovereign Landing Zone archetypes and management groups.

alz_custom with slz
name: alz_custom
management_groups:
  - id: alz
    display_name: Sovereign Landing Zone
    archetypes:
      - root_custom
      - sovereign_root_custom
    exists: false
    parent_id: null

  - id: platform
    display_name: Platform
    archetypes:
      - platform_custom
    exists: false
    parent_id: alz

  - id: landingzones
    display_name: Landing Zones
    archetypes:
      - landing_zones_custom
    exists: false
    parent_id: alz

  - id: public
    display_name: Public
    archetypes:
      - public_custom
    exists: false
    parent_id: landingzones

  - id: corp
    display_name: Corp
    archetypes:
      - corp_custom
    exists: false
    parent_id: landingzones

  - id: online
    display_name: Online
    archetypes:
      - online_custom
    exists: false
    parent_id: landingzones

  - id: confidential-corp
    display_name: Confidential Corp
    archetypes:
      - confidential_corp_custom
    exists: false
    parent_id: landingzones

  - id: confidential-online
    display_name: Confidential Online
    archetypes:
      - confidential_online_custom
    exists: false
    parent_id: landingzones

  - id: sandbox
    display_name: Sandbox
    archetypes:
      - sandbox_custom
    exists: false
    parent_id: alz

  - id: security
    display_name: Security
    archetypes:
      - security_custom
    exists: false
    parent_id: platform

  - id: management
    display_name: Management
    archetypes:
      - management_custom
    exists: false
    parent_id: platform

  - id: connectivity
    display_name: Connectivity
    archetypes:
      - connectivity_custom
    exists: false
    parent_id: platform

  - id: identity
    display_name: Identity
    archetypes:
      - identity_custom
    exists: false
    parent_id: platform

  - id: decommissioned
    display_name: Decommissioned
    archetypes:
      - decommissioned_custom
    exists: false
    parent_id: alz

  • Note that the update steps do not change the file name or architecture name.
  • The value of the architecture_name in the avm-ptn-alz Terraform module stays as alz_custom to limit the terraform plan diff.
  • The management group hierarchy is extended with Public, Confidential Corp, and Confidential Online.
  • The new archetypes are associated to those new management group scopes.
  • The root (alz) management group includes both the root_custom and sovereign_root_custom archetypes.

Source: https://www.azurecitadel.com/slz/custom_libraries/constructs/
Published: 20 Nov 2025
Printed:
Policies, Assignments and Roles Archetypes, Overrides and Architecture Next