Ga naar inhoud

Policy-toewijzingen (nieuw, bijwerken)

Standaardwijzigingen: Nieuwe Azure Policy-toewijzing (een bestaande definition of initiative toewijzen aan een nieuwe scope) en Managed Azure Policy-toewijzing bijwerken.

Effect: een Azure Policy-toewijzing wordt aangemaakt of bijgewerkt op een management group, subscription, resource group of resource. Heeft de toewijzing een managed identity, dan worden ook de benodigde role assignments aangemaakt. Alleen de postdeployment-layer verandert, in de primaire regio.

Voor de verwante wijziging een managed initiative toewijzen aan een management group zie Managed initiative op een management group.

Aanvraagvelden

Veld Waar het naartoe gaat
Policy definition/initiative Name policy_definition_id (volledige resource-ID)
Onderbouwing pull request; ook properties.description
Scope Map plus scope key: managementGroupId, subscriptionId, resourceGroupId of resourceId
Opmerkingen bijv. parameters, uitsluitingen (notScopes), enforcement mode

Waar de bestanden staan

Ingesteld in <env-folder>/<primary region>/postdeployment.auto.tfvars:

policy_assignment_mg_json_file_relative_path  = "policies/policy_assignments/01_management_groups"
policy_assignment_mg_json_file_pattern        = "/**/*.json"
policy_assignment_sub_json_file_relative_path = "policies/policy_assignments/02_subscriptions"
policy_assignment_sub_json_file_pattern       = "/**/*.json"
policy_assignment_rg_json_file_relative_path  = "policies/policy_assignments/03_resource_groups"
policy_assignment_rg_json_file_pattern        = "/**/*.json"
policy_assignment_res_json_file_relative_path = "policies/policy_assignments/04_resources"
policy_assignment_res_json_file_pattern       = "/**/*.json"

Deze paden worden alleen gelezen in de primaire regio (infra/deploy/postdeployment/locals.tf).

Map Scope key in de JSON Voorbeeldwaarde Terraform-resource
01_management_groups managementGroupId /providers/Microsoft.Management/managementGroups/cloudplatform-landingzones azurerm_management_group_policy_assignment
02_subscriptions subscriptionId /subscriptions/<guid> azurerm_subscription_policy_assignment
03_resource_groups resourceGroupId /subscriptions/<guid>/resourceGroups/<rg> azurerm_resource_group_policy_assignment
04_resources resourceId volledige resource-ID azurerm_resource_policy_assignment

Toewijzingen op management groups moeten naar een initiative (policy set) verwijzen. Voor 01_management_groups zoekt de module de definition op als een Microsoft.Authorization/policySetDefinitions-resource (infra/modules/policy_definition_references). Een ID van een losse policy definition faalt daar. Om één policy op een management group toe te wijzen, verpak je die eerst in een initiative. De andere scopes accepteren zowel definitions als initiatives.

Toewijzing-JSON

Uit infra/modules/policy/main.tf. Alle getoonde keys worden gelezen. Gebruik null waar je geen waarde hebt.

{
  "name": "lz-require-tags",
  "policy_definition_id": "/providers/Microsoft.Management/managementGroups/cloudplatform/providers/Microsoft.Authorization/policySetDefinitions/lz-polset-require-tags",
  "enforce": true,
  "identityType": null,
  "location": "westeurope",
  "notScopes": null,
  "managementGroupId": "/providers/Microsoft.Management/managementGroups/cloudplatform-landingzones",
  "non_compliance_message": {
    "content": "Resources in landing zones must carry the required tags.",
    "policy_definition_reference_id": null
  },
  "properties": {
    "displayName": "Require tags on landing zone resources",
    "description": "Change <ticket>: enforce costcentre and owner tags.",
    "metadata": { "assignedBy": "Infrastructure as Code (IaC)" },
    "parameters": {
      "tagName": { "value": "costcentre" }
    }
  }
}
Key Opmerkingen
name De naam van de toewijzing in Azure en de Terraform key. Maximaal 24 tekens voor management group-scope (Azure-limiet). Wijzigen vervangt de toewijzing.
policy_definition_id Built-in: /providers/Microsoft.Authorization/policySetDefinitions/<guid> of /policyDefinitions/<guid>. Custom (door dit platform uitgerold): /providers/Microsoft.Management/managementGroups/<cloudplatform id>/providers/Microsoft.Authorization/policySetDefinitions/<name>.
enforce true = Default (deny/deploy-effecten werken), false = DoNotEnforce (alleen evalueren). Het voorbeeld gebruikt de string "true"; een boolean is duidelijker.
identityType "SystemAssigned" voor policies met deployIfNotExists / modify-effecten, anders null.
location Verplicht wanneer een identity wordt gebruikt. Gebruik de naam van de primaire regio.
notScopes Lijst van uitgesloten onderliggende scopes (key op topniveau; properties.notScopes wordt niet gelezen).
non_compliance_message Optioneel bericht dat bij een weigering wordt getoond; null om weg te laten.
properties.parameters { "<param>": { "value": … } }, precies zoals in de JSON uit de Azure portal.

Role assignments voor de identity worden automatisch aangemaakt (ADR-0008). Met identityType: "SystemAssigned" leest de module roleDefinitionIds uit de definition, of uit elke definition in de initiative, en wijst die rollen toe op de scope van de toewijzing (infra/modules/policy/main_role_assignments_auto.tf).

Remediation tasks worden alleen aangemaakt voor toewijzingen op management groups, en alleen als automatically_start_policy_remediation = true in postdeployment.auto.tfvars (de variabele staat standaard op true). Ze worden opnieuw aangemaakt zodra de toewijzing verandert (ADR-0010). Start remediation voor andere scopes in de portal.

Nieuwe toewijzing: stappen

  1. Zorg dat de definition bestaat:
  2. Built-in: zoek de ID op in de portal (Policy → Definitions).
  3. Custom: voeg hem toe onder policies/policy_definitions/ of policies/policy_set_definitions/ (zie Managed initiative op een management group). Hij wordt uitgerold door de foundation-layer, die vóór postdeployment draait binnen dezelfde hub-run.
  4. Maak de toewijzing-JSON aan in de map voor de betreffende scope.
  5. Valideer de JSON en open een pull request.
  6. Draai hub. Verwacht plan:
  7. postdeployment (primaire regio): + toewijzing, plus role assignments (met een identity) en remediations (management group-scope);
  8. foundation: alleen als je een definition hebt toegevoegd.
  9. Apply.

Een bestaande toewijzing bijwerken

Bewerk de JSON (parameters, enforce, notScopes, non-compliance message) en draai daarna hub.

  • Een in-place update verschijnt als ~.
  • Het wijzigen van name, de scope key of policy_definition_id vervangt de toewijzing (-/+). Een tijdje is de policy niet toegewezen, en uitzonderingen die naar de oude toewijzings-ID verwijzen breken.

Een toewijzing verwijderen

Verwijder het bestand (of hernoem het naar .json.ignore) en draai hub. Het plan toont dat de toewijzing, en de bijbehorende role assignments en remediations, worden vernietigd. Verwijder uitzonderingen die ernaar verwijzen in dezelfde wijziging.

Uitzonderingen

Het proces (aanvraag, goedkeuring, review, doorzetten naar de secure score) staat in Policy-uitzonderingen. Deze sectie beschrijft het bestandsformaat.

Uitzonderingen zijn JSON-bestanden in policies/policy_exemptions/01_management_groups … 04_resources (paden in postdeployment.auto.tfvars, policy_exemption_*_json_file_relative_path):

{
  "name": "exempt-app1-public-ip",
  "policy_assignment_id": "/providers/Microsoft.Management/managementGroups/cloudplatform-landingzones/providers/Microsoft.Authorization/policyAssignments/lz-deny-public-ip",
  "subscription_id": "/subscriptions/<guid>",
  "exemption_category": "Waiver",
  "description": "Change <ticket>: approved public IP for app1 until 2026-12-31.",
  "display_name": "app1 public IP waiver",
  "expires_on": "2026-12-31T00:00:00Z",
  "policy_definition_ids": [],
  "metadata": null
}
  • De scope key hangt af van de map: management_group_id, subscription_id, resource_group_id of resource_id.
  • policy_definition_ids: om slechts een deel van de policies van een initiative uit te zonderen, geef je hun definition-ID's op. Die worden automatisch omgezet naar reference-ID's (infra/modules/policy_reference_ids). Gebruik [] (lege lijst) voor de hele toewijzing. Gebruik geen null: de module itereert over de lijst en het plan faalt op null.
  • Uitzonderingen werken alleen voor toewijzingen van een initiative. De reference-ID-lookup leest de toegewezen definition altijd als een policySetDefinitions-resource (infra/modules/policy_reference_ids/main.tf). Om uit te zonderen van een toewijzing van één policy maak je de uitzondering buiten dit mechanisme aan, of wijs je de policy toe via een initiative.
  • Gebruik de key policy_definition_ids. De voorbeeldbestanden .jason gebruiken policy_definition_reference_ids, die de module niet leest.
  • Uitzonderingen op subscription, resource group en resource worden ook gespiegeld naar de toewijzing van de Microsoft cloud security benchmark (mirror_exemptions_to_mcsb, standaard true). Zie docs/policy_exemptions/README.md.

Uitzonderingen documenteren die voor het platform gelden

Sommige uitzonderingen horen bij hoe het platform werkt en gelden voor de hub zelf. Houd daar één lijst van bij, met per uitzondering de policy, de scope en de motivatie, en review die regelmatig. De redenen zijn meestal van deze soort:

Reden Voorbeeld
De engineers van de managed-service-provider zijn gastaccounts die toegang nodig hebben Policies die gastaccounts met lees-, schrijf- of eigenaarrechten markeren. De toegang blijft least-privilege met PIM.
Een bewuste kosten- of risicobeslissing DDoS-bescherming is niet ingeschakeld omdat de kosten voor deze klant zwaarder wegen dan het voordeel. Leg vast wie dit heeft besloten en wanneer het wordt herzien.
Het deploymentmechanisme heeft het nodig Een policy tegen administratieve rollen voor service principals, omdat infrastructure as code met een service principal deployt.

Een uitzondering zonder motivatie en zonder einddatum of reviewdatum is in een audit moeilijk te verdedigen.

Auditen in non-productie, afdwingen in productie

Een gangbare aanpak is om de baseline-initiatives in non-productie te auditen en in productieachtige omgevingen af te dwingen (deny-effecten). Teams zien non-compliance dan in dev en tst zonder geblokkeerd te worden, en lossen die op voordat ze bij acc en prd komen. Met de JSON hierboven: wijs het initiative toe op de management group voor non-productie met enforce op false (DoNotEnforce), en op de management group voor productie met enforce op true. Zorg dat workload teams weten welk gedrag waar geldt (zie Policies en uitzonderingen).

Controleren

  • Azure portal → Policy → Assignments, gefilterd op de scope: de toewijzing is aanwezig met de juiste parameters.
  • Compliance: de eerste evaluatie kan na de toewijzing tot ongeveer 30 minuten duren (Azure-gedrag).
  • Voor deployIfNotExists / modify: controleer de remediation task, of start er een.

Terugdraaien

Draai de pull request terug en draai hub.