Zum Inhalt

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 patchAssessmentMode auf ImageDefault und patchMode auf AutomaticByOS oder Manual.
  • 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

  1. Schlage es in der Tabelle oben und in den Notes der Modul-README nach.
  2. Wenn es erwartet ist, warte auf die Auswertung oder behebe die Voraussetzung der Plattform.
  3. 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).
  4. Wenn eine policy aus gutem Grund nicht erfüllt werden kann, beantrage eine Ausnahme (Eine Policy-Ausnahme beantragen).