Ga naar inhoud

Policy-compliance van de modules

De modules zijn gebouwd om de Azure-policies van het platform te halen. Deze pagina legt uit hoe een module een policy afdwingt, welke vereisten een paar modules buiten de resource hebben, en welke bevindingen je na een deployment nog in het policy-overzicht kunt zien. Hoe de bibliotheek dit test, staat bij Testen. De regels voor de mensen die modules bouwen staan in Modules maken en bijdragen.

Referentieontwerp, jouw deployment kan afwijken

De baselines van de bibliotheek zijn de CIS Microsoft Azure Foundations Benchmark 2.0, ISO 27001:2013 en de Microsoft cloud security benchmark. De policies die jouw platform toewijst kunnen verschillen, en hun parameters ook. De modules worden getest tegen de policies van de testsubscription van het onderhoudende team. Zie Governance en Policy assignments.

Hoe een module een policy afdwingt

Een module neemt de waarden die een policy controleert uit je handen. Hij doet dat op drie manieren:

Manier Voorbeeld Effect voor jou
Een vaste waarde De Key Vault-module zet de default network action op deny en schakelt legacy access policies uit Je kunt geen waarde doorgeven die de policy breekt. De parameter bestaat misschien niet, of je waarde wordt overruled.
Een standaardwaarde die de compliant waarde is De Bicep-module voor het storage account heeft public network access standaard uitgeschakeld Je kunt het wijzigen, maar je moet dat bewust doen.
Een verplichte parameter De storage account-module vraagt om een customer-managed key, een identity, een private endpoint en diagnostics voor de interface van de private endpoint Jij levert het doel aan (een key, een subnet, een workspace). De module configureert dan de rest.

In Terraform zijn de vaste waarden zichtbaar in de locals.tf van een module. Dit fragment van de Key Vault-module laat het idee zien:

locals {
  network_acls = merge(var.network_acls, {
    default_action = "Deny"
    ip_rules       = []
  })
  legacy_access_policies_enabled = false
  diagnostic_settings = { for key, settings in var.diagnostic_settings : key => merge(settings, {
    log_groups        = ["allLogs", "audit"]
    metric_categories = ["AllMetrics"]
    })
  }
}

Diagnostic settings zijn een goed voorbeeld: je geeft alleen de bestemming, en de module selecteert alle log- en metriccategorieën. Bij een major upgrade van een module worden parameters die de module nu afdwingt, verwijderd. De upgradenotities van de modules voor SQL server, container registry en network security group laten dit zien.

Policies met een parameter

Sommige policies krijgen een parameter als het platform ze toewijst (bijvoorbeeld een lijst met toegestane waarden). De module gebruikt de standaardwaarde van de policy als constante. Heeft de policy geen standaardwaarde, dan biedt de module een invoervariabele aan en documenteert die. Een voorbeeld is de runtimeversie van web apps: de CIS-policies voor PHP-, Java- en Python-versies hebben geen standaardwaarde, dus de modules zetten de versie niet vast. Stel de versie in bij de assignment van de policy op je platform, en kies in je code een ondersteunde versie (Parameterised policies).

Vereisten buiten de module

Sommige policies controleren dingen die een module niet kan inschakelen. Dat zijn instellingen op subscription-niveau van het platform.

Module Vereiste Waarom
virtual_machine_windows, virtual_machine_linux De feature encryption at host geregistreerd op de subscription De modules schakelen encryption at host in op de VM
virtual_machine_windows, virtual_machine_linux Microsoft Defender for Cloud ingeschakeld op de subscription De modules installeren de Defender-extensie voor de VM
container_registry Defender for Containers op de subscription De vulnerability-policy voor registry-images heeft het nodig. De beoordeling duurt na de deployment meer dan 24 uur.
postgresql_flexibleserver Defender for SQL ingeschakeld De policy voor onbeschermde PostgreSQL-servers hangt ervan af
sql_server Een storage account voor vulnerability assessments, aangemaakt voordat je deployt De server schrijft de scanresultaten daarheen. Standaard geeft de Bicep-module de system-assigned identity van de server de rol Storage Blob Data Contributor erop.
virtual_machine_windows Uitgaande toegang tot de endpoints voor Windows Update en guest configuration (zie de README van de module) VM-updates en configuratiebeheer

Bekende bevindingen per module

Het policy-overzicht kan non-compliance tonen voor een gedeployde module. De oorzaken staan in de tabel. De README van elke module herhaalt ze in zijn sectie Notes. Bevindingen in de eerste groep verdwijnen zonder actie.

Module Bevinding Oorzaak
Alle VM-modules Guest configuration-policies direct na de deployment nog niet compliant Guest policies hebben meer tijd nodig om te worden geëvalueerd
sql_server Vulnerability assessment should be enabled on your SQL servers De module schakelt het in, maar de scan draait wekelijks. De bevinding hoort binnen enkele dagen na de deployment te verdwijnen.
sql_server SQL databases should have vulnerability findings resolved De bevindingen van de scan zijn voor de databasebeheerder. Nieuwe bevindingen kunnen verschijnen terwijl de database in gebruik is.
container_registry Azure registry container images should have vulnerabilities resolved Heeft Defender for Containers en tijd nodig, zie hierboven
apim API Management should disable public network access to the service configuration endpoints De policy werkt niet voor de Standard V2 SKU: Azure geeft MethodNotAllowedInPricingTier terug
apim (Developer SKU) API endpoints that are unused should be disabled and removed en API endpoints should be authenticated De Developer SKU maakt standaard een Echo API aan. Verwijder die handmatig.
network_security_group Flow logs should be configured for every network security group De policy is niet meer geldig: flow logs kunnen niet op de groep worden ingeschakeld. Gebruik virtual network flow logs.
virtual_machine_windows, virtual_machine_linux Only approved VM extensions should be installed De standaardlijst van de policy bevat de extensies niet die de module installeert (voor de Windows-module azurepolicyforwindows en mde.windows). Voeg ze toe in de policy assignment van je platform.
virtual_machine_windows, virtual_machine_linux Log Analytics Extension should be enabled for listed virtual machine images De Log Analytics-extensie is deprecated
virtual_machine_windows, virtual_machine_linux SQL servers on machines should have vulnerability findings resolved Hoort bij SQL Server op de machine, niet bij de module
virtual_machine_linux Dependency agent should be enabled for listed virtual machine images, Linux machines should meet requirements for the Azure compute security baseline, Linux virtual machines should use only signed and trusted boot components Niet ondersteund voor sommige Marketplace-images, sommige guest-instellingen vragen om een handmatige actie, en Azure voert de beoordeling niet uit
app_service_site_* De CIS-policies voor PHP-, Java- en Python-versies De policies hebben geen standaardversie. Stel de versie in bij de policy assignment.

Windows-baseline in ApplyAndMonitor-modus

De guest configuration voor de Windows-baseline in de modus ApplyAndMonitor kan aanmelderechten verwijderen, waardoor een beheerder niet meer op de VM kan inloggen. De README van de module adviseert de modus Audit te gebruiken, en beschrijft een script dat het recht herstelt. Lees de notities van de module voordat je de modus wijzigt.

Andere modulenotities die de compliance beïnvloeden:

  • Een VM met back-up ingeschakeld kan niet worden hersteld in een vault met soft delete. De README van de Windows-module beschrijft de volgorde van de stappen.
  • De Bicep Windows-VM-module ondersteunt automatische guest patching voor specifieke images. Zet voor andere images patchAssessmentMode op ImageDefault en patchMode op AutomaticByOS of Manual.
  • De SQL server-module ondersteunt transparent data encryption met een customer-managed key. De identity van de server heeft de rol Key Vault Crypto Service Encryption User nodig op de Key Vault.

Wat je met een bevinding doet

  1. Zoek hem op in de tabel hierboven en in de Notes van de README van de module.
  2. Als hij verwacht is, wacht dan op de evaluatie, of los de vereiste van het platform op.
  3. Als de module iets blokkeert wat je nodig hebt, of je denkt dat een waarde fout is, vraag je platformteam dan de module uit te breiden (Een wijziging aanvragen).
  4. Als een policy om een goede reden niet gehaald kan worden, vraag dan een exemption aan (Een policy exemption aanvragen).