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
patchAssessmentModeopImageDefaultenpatchModeopAutomaticByOSofManual. - 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¶
- Zoek hem op in de tabel hierboven en in de Notes van de README van de module.
- Als hij verwacht is, wacht dan op de evaluatie, of los de vereiste van het platform op.
- 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).
- Als een policy om een goede reden niet gehaald kan worden, vraag dan een exemption aan (Een policy exemption aanvragen).