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_groupszoekt de module de definition op als eenMicrosoft.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¶
- Zorg dat de definition bestaat:
- Built-in: zoek de ID op in de portal (Policy → Definitions).
- Custom: voeg hem toe onder
policies/policy_definitions/ofpolicies/policy_set_definitions/(zie Managed initiative op een management group). Hij wordt uitgerold door defoundation-layer, die vóórpostdeploymentdraait binnen dezelfdehub-run. - Maak de toewijzing-JSON aan in de map voor de betreffende scope.
- Valideer de JSON en open een pull request.
- Draai
hub. Verwacht plan: postdeployment(primaire regio):+toewijzing, plus role assignments (met een identity) en remediations (management group-scope);foundation: alleen als je een definition hebt toegevoegd.- 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 ofpolicy_definition_idvervangt 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_idofresource_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 geennull: de module itereert over de lijst en het plan faalt opnull.- 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.jasongebruikenpolicy_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, standaardtrue). Ziedocs/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.