Zum Inhalt

Managed Initiative auf einer Management Group

Standardänderung: Eine verwaltete Policy-Initiative einer Management Group zuweisen

Auswirkung: Eine Built-in- oder vom Plattform-Team verwaltete Initiative wird einer Management Group zugewiesen, und jede darunterliegende subscription erbt die Initiative.

Abgrenzung. Die Zuweisung einer Initiative auf einen einzelnen spoke liegt in der Verantwortung des Workload-Teams und ist keine Standardänderung. Wenn du das in diesem Repository machst, verwende den Ordner 02_subscriptions (Policy-Zuweisungen).

Anfragefelder

Feld Verwendung
Policy definition/initiative Name Built-in-Name oder GUID bzw. der name der Custom-Initiative
Begründung pull request; properties.description
Scope Ziel-Management-Group, zum Beispiel cloudplatform-landingzones-corp
Kommentare Parameter, Enforcement-Modus

Die Initiativen, die die Plattform bereits zuweist

Diese sind in infra/deploy/postdeployment/main.tf (module "landing_zone_policies") fest codiert und werden an der Management Group cloudplatform zugewiesen. Jede Plattformumgebung bekommt sie.

Anzeigename der Zuweisung Initiative
Platform Default - Compliance - ISO 27001:2013 built-in 89c6cddc-1c73-4ac1-b19c-54d1a15a42f2
Platform Default - Compliance - CIS 1.4.0 built-in c3f5c4d9-9a1d-4a99-85c0-7f93e384d5c5
Platform Default - Compliance - CIS 3.0.0 built-in 470a962c-86a0-433b-803a-3c176b5ce79c
Platform Default - Compliance - ASC built-in 1f3afdf9-d0c9-4c3d-847f-89da613e70a8 (Microsoft cloud security benchmark)
Platform Default - Compliance - NIS2 built-in 32ff9e30-4725-4ca7-ba3a-904a7721ee87
Platform Default - Diagnostic Settings - v2 - <region> built-in 0884adba-2312-4468-abeb-5422caed1038, eine pro aktiver Region
Xebia Default - Defender for Cloud v2 - Landing Zones nur wenn enable_defender_for_cloud_for_spokes = true; mit Scope landingzones

Es gibt keinen tfvars-Schalter, um die fünf Compliance-Initiativen zu entfernen. Sie zu ändern ist eine Codeänderung. Die Ausnahmen, die die Plattform darauf anwendet, sind in docs/policy_exemptions/current-platform-exemptions.md und in ADR-0001 bis ADR-0005 sowie ADR-0013 dokumentiert.

Eine weitere Initiative einer Management Group zuweisen

1. Die Initiative-ID ermitteln

  • Built-in: Azure portal → Policy → Definitions → nach Initiative filtern → öffnen → die Definition ID kopieren, zum Beispiel /providers/Microsoft.Authorization/policySetDefinitions/06f19060-9e68-4070-92ca-f15cc126059e.
  • Custom (vom Plattform-Team verwaltet): siehe Eine Custom-Definition oder -Initiative hinzufügen. Die ID lautet /providers/Microsoft.Management/managementGroups/<cloudplatform id>/providers/Microsoft.Authorization/policySetDefinitions/<name>.

2. Die Zuweisungsdatei erstellen

Erstelle <env-folder>/policies/policy_assignments/01_management_groups/<name>.json im Format aus Policy-Zuweisungen:

{
  "name": "cis-v2-corp",
  "policy_definition_id": "/providers/Microsoft.Authorization/policySetDefinitions/06f19060-9e68-4070-92ca-f15cc126059e",
  "enforce": true,
  "identityType": "SystemAssigned",
  "location": "westeurope",
  "notScopes": null,
  "managementGroupId": "/providers/Microsoft.Management/managementGroups/cloudplatform-landingzones-corp",
  "non_compliance_message": null,
  "properties": {
    "displayName": "CIS Microsoft Azure Foundations Benchmark v2.0.0 - Corp",
    "description": "Change <ticket>",
    "metadata": { "assignedBy": "Infrastructure as Code (IaC)" },
    "parameters": null
  }
}

Die Beispielkonfiguration enthält zwei vollständige, deaktivierte Beispiele (.json.ignore) für dieses Muster, mit allen ausgeschriebenen Parametern: CIS v2.0.0 und den Microsoft cloud security benchmark, beide unter config/Demo/canary/policies/policy_assignments/01_management_groups/.

3. Deployen

Führe hub aus.

  • Erwarteter postdeployment-Plan (primäre Region): + die Policy-Zuweisung auf der Management Group.
  • Mit Identity: + Rollenzuweisungen.
  • Mit automatically_start_policy_remediation = true: + eine remediation pro Initiative-Mitglied.

Eine Custom-Definition oder -Initiative hinzufügen

Custom-Definitionen und -Initiativen werden vom foundation-Layer (nur primäre Region) an der Management Group cloudplatform deployt. Die Ordner werden in <env-folder>/<primary region>/foundation.auto.tfvars festgelegt:

policy_definition_json_file_relative_path     = "policies/policy_definitions"
policy_definition_json_file_pattern           = "/**/*.json"
policy_set_definition_json_file_relative_path = "policies/policy_set_definitions"
policy_set_definition_json_file_pattern       = "/**/*.json"

Das Dateiformat ist das Azure-Exportformat: name plus properties.{policyType, mode, displayName, description, metadata, parameters, policyRule} für eine Definition und properties.{policyType, parameters, metadata, policyDefinitions[], policyDefinitionGroups[]} für eine Initiative. In einer Initiative kannst du in einer policyDefinitionId ${root_scope_resource_id} schreiben; das wird durch die ID der Management Group cloudplatform ersetzt (infra/modules/policy/main.tf).

Der Anzeigename der Initiative in Azure ist ihr name. display_name = each.value.name in infra/modules/policy/main.tf, daher wird properties.displayName bei Initiativen nicht verwendet.

Definitionen und Zuweisungen können im selben pull request liegen: foundation läuft in einem hub-Lauf vor postdeployment.

Prüfen

Azure portal → Policy → Assignments → Scope = die Management Group. Die Zuweisung wird aufgelistet, und Compliance füllt sich nach der ersten Auswertung.

Rollback

Lösche die Zuweisungsdatei (und die Definitionsdateien, falls sie für diese Änderung hinzugefügt wurden) und führe dann hub aus.