Policy-Compliance der Module¶
Die Module sind so gebaut, dass sie die Azure-policies der Plattform erfüllen. Diese Seite erklärt, wie ein Modul eine policy durchsetzt, welche Voraussetzungen einige Module außerhalb der Ressource haben und welche Findings du nach einem Deployment noch in der Policy-Übersicht sehen kannst. Wie die Bibliothek das testet, steht unter Tests. Die Regeln für die Menschen, die Module bauen, stehen unter Module erstellen und beitragen.
Referenzdesign, dein Deployment kann abweichen
Die Baselines der Bibliothek sind der CIS Microsoft Azure Foundations Benchmark 2.0, ISO 27001:2013 und der Microsoft Cloud Security Benchmark. Die policies, die deine Plattform zuweist, können abweichen, ebenso ihre Parameter. Die Module werden gegen die policies der Test-subscription des pflegenden Teams getestet. Siehe Governance und Policy-Zuweisungen.
Wie ein Modul eine policy durchsetzt¶
Ein Modul nimmt dir die Werte ab, die eine policy prüft. Es tut das auf drei Wegen:
| Weg | Beispiel | Wirkung für dich |
|---|---|---|
| Ein fester Wert | Das Key-Vault-Modul setzt die Default-Netzwerkaktion auf Deny und schaltet die alten Access Policies aus | Du kannst keinen Wert übergeben, der die policy verletzt. Der Parameter existiert vielleicht nicht, oder dein Wert wird überstimmt. |
| Ein Default, der der konforme Wert ist | Das Bicep-Modul für das Storage Account hat den öffentlichen Netzwerkzugriff standardmäßig deaktiviert | Du kannst ihn ändern, musst es aber bewusst tun. |
| Ein erforderlicher Parameter | Das Storage-Account-Modul verlangt einen Customer-managed Key, eine Identity, einen Private Endpoint und Diagnose für die Schnittstelle des Private Endpoints | Du gibst das Ziel an (einen Key, ein Subnet, einen Workspace). Das Modul konfiguriert dann den Rest. |
In Terraform sind die festen Werte in der locals.tf eines Moduls sichtbar. Dieser Auszug aus dem Key-Vault-Modul zeigt die Idee:
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"]
})
}
}
Diagnoseeinstellungen sind ein gutes Beispiel: Du gibst nur das Ziel an, und das Modul wählt alle Log- und Metrik- Kategorien. Bei einem Major-Upgrade eines Moduls werden Parameter entfernt, die das Modul jetzt erzwingt. Die Upgrade-Hinweise der Module für SQL Server, Container Registry und Network Security Group zeigen das.
Policies mit einem Parameter¶
Einige policies nehmen bei der Zuweisung durch die Plattform einen Parameter entgegen (zum Beispiel eine Liste erlaubter Werte). Das Modul verwendet den Default-Wert der policy als Konstante. Wenn die policy keinen Default hat, bietet das Modul eine Input-Variable an und dokumentiert sie. Ein Beispiel ist die Runtime-Version von Web-Apps: Die CIS-policies für PHP-, Java- und Python-Versionen haben keinen Default-Wert, deshalb legen die Module die Version nicht fest. Setze die Version in der Zuweisung der policy auf deiner Plattform und wähle in deinem Code eine unterstützte Version (Parametrisierte policies).
Voraussetzungen außerhalb des Moduls¶
Einige policies prüfen Dinge, die ein Modul nicht einschalten kann. Das sind Einstellungen der Plattform auf subscription-Ebene.
| Modul | Voraussetzung | Warum |
|---|---|---|
virtual_machine_windows, virtual_machine_linux |
Das Feature Encryption at Host ist auf der subscription registriert | Die Module aktivieren Encryption at Host auf der VM |
virtual_machine_windows, virtual_machine_linux |
Microsoft Defender for Cloud ist auf der subscription aktiviert | Die Module installieren die Defender-Extension für die VM |
container_registry |
Defender for Containers auf der subscription | Die Vulnerability-policy für Registry-Images braucht es. Die Bewertung dauert nach dem Deployment mehr als 24 Stunden. |
postgresql_flexibleserver |
Defender for SQL aktiviert | Die policy für ungeschützte PostgreSQL-Server hängt davon ab |
sql_server |
Ein Storage Account für Vulnerability Assessments, vor dem Deployment erstellt | Der Server schreibt dort die Scan-Ergebnisse hin. Standardmäßig gibt das Bicep-Modul der System-assigned Identity des Servers dort die Rolle Storage Blob Data Contributor. |
virtual_machine_windows |
Ausgehender Zugriff auf Windows Update und die Guest-Configuration-Endpoints (siehe die README des Moduls) | VM-Updates und Konfigurationsmanagement |
Bekannte Findings pro Modul¶
Die Policy-Übersicht kann für ein deploytes Modul Non-Compliance zeigen. Die Ursachen stehen in der Tabelle. Die README jedes Moduls wiederholt sie im Abschnitt Notes. Findings in der ersten Gruppe verschwinden ohne Eingreifen.
| Modul | Finding | Ursache |
|---|---|---|
| Alle VM-Module | Guest-Configuration-policies direkt nach dem Deployment noch nicht konform | Guest-policies brauchen mehr Zeit für die Auswertung |
sql_server |
Vulnerability assessment should be enabled on your SQL servers | Das Modul aktiviert es, aber der Scan läuft wöchentlich. Das Finding sollte innerhalb von Tagen nach dem Deployment verschwinden. |
sql_server |
SQL databases should have vulnerability findings resolved | Die Findings des Scans sind Sache des Datenbankadministrators. Neue Findings können auftauchen, während die Datenbank in Benutzung ist. |
container_registry |
Azure registry container images should have vulnerabilities resolved | Braucht Defender for Containers und Zeit, siehe oben |
apim |
API Management should disable public network access to the service configuration endpoints | Die policy funktioniert nicht für die SKU Standard V2: Azure liefert MethodNotAllowedInPricingTier |
apim (Developer SKU) |
API endpoints that are unused should be disabled and removed und API endpoints should be authenticated | Die Developer-SKU erstellt standardmäßig eine Echo-API. Entferne sie manuell. |
network_security_group |
Flow logs should be configured for every network security group | Die policy ist nicht mehr gültig: Flow Logs lassen sich auf der Gruppe nicht aktivieren. Verwende Virtual Network Flow Logs. |
virtual_machine_windows, virtual_machine_linux |
Only approved VM extensions should be installed | Die Default-Liste der policy enthält die Extensions nicht, die das Modul installiert (beim Windows-Modul azurepolicyforwindows und mde.windows). Füge sie in der policy-Zuweisung deiner Plattform hinzu. |
virtual_machine_windows, virtual_machine_linux |
Log Analytics Extension should be enabled for listed virtual machine images | Die Log-Analytics-Extension ist veraltet |
virtual_machine_windows, virtual_machine_linux |
SQL servers on machines should have vulnerability findings resolved | Betrifft SQL Server auf der Maschine, nicht das Modul |
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 | Für einige Marketplace-Images nicht unterstützt, einige Guest-Einstellungen brauchen eine manuelle Aktion, und Azure führt die Bewertung nicht durch |
app_service_site_* |
Die CIS-policies für PHP-, Java- und Python-Versionen | Die policies haben keine Default-Version. Setze die Version in der policy-Zuweisung. |
Windows-Baseline im Modus ApplyAndMonitor
Die Windows-Baseline als Guest Configuration im Modus ApplyAndMonitor kann Anmelderechte entfernen, sodass sich ein Administrator
nicht mehr an der VM anmelden kann. Die README des Moduls rät zum Modus Audit und beschreibt ein Skript, das das
Recht wiederherstellt. Lies die Hinweise des Moduls, bevor du den Modus änderst.
Weitere Modulhinweise, die die Compliance beeinflussen:
- Eine VM mit aktiviertem Backup kann nicht in einen Vault mit Soft Delete wiederhergestellt werden. Die README des Windows-Moduls beschreibt die Reihenfolge der Schritte.
- Das Bicep-Windows-VM-Modul unterstützt automatisches Guest Patching für bestimmte Images. Setze für andere Images
patchAssessmentModeaufImageDefaultundpatchModeaufAutomaticByOSoderManual. - Das SQL-Server-Modul unterstützt Transparent Data Encryption mit einem Customer-managed Key. Die Identity des Servers braucht die Rolle Key Vault Crypto Service Encryption User auf dem Key Vault.
Was du mit einem Finding tust¶
- Schlage es in der Tabelle oben und in den Notes der Modul-README nach.
- Wenn es erwartet ist, warte auf die Auswertung oder behebe die Voraussetzung der Plattform.
- Wenn das Modul etwas blockiert, das du brauchst, oder du einen Wert für falsch hältst, bitte dein Plattform-Team, das Modul zu erweitern (Eine Änderung anfragen).
- Wenn eine policy aus gutem Grund nicht erfüllt werden kann, beantrage eine Ausnahme (Eine Policy-Ausnahme beantragen).