Azure Policy-Ausnahmenstruktur

Die Funktion für Azure Policy-Ausnahmen wird verwendet, um eine Ressourcenhierarchie oder eine einzelne Ressource von der Bewertung von Initiativen oder Definitionen auszunehmen. Ressourcen, die ausgenommen sind, werden auf die allgemeine Konformität angerechnet, können aber nicht ausgewertet werden oder einen vorübergehenden Verzicht aufweisen. Weitere Informationen finden Sie in der Übersicht zu Anwendbarkeit in Azure Policy. Azure Policy-Ausnahmen funktionieren auch mit den folgenden Ressourcen-Manager-Modi: Microsoft.Kubernetes.Data, Microsoft.KeyVault.Data, und Microsoft.Network.Data.

Sie verwenden JSON (JavaScript Object Notation), um eine Richtlinienausnahme zu erstellen. Die Richtlinienausnahme enthält Elemente für Folgendes:

Eine Richtlinienausnahme wird als untergeordnetes Objekt in der Ressourcenhierarchie oder der einzelnen Ressource erstellt, für die die Ausnahme gewährt wird. Ausnahmen können nicht auf Komponentenebene des Ressourcenanbietermodus erstellt werden. Wenn die übergeordnete Ressource, für die die Ausnahme gilt, entfernt wird, wird auch die Ausnahme entfernt.

Der folgende JSON-Code zeigt ein Beispiel für eine Richtlinienausnahme in der Kategorie Verzicht bei einer Ressource für eine Initiativenzuweisung mit dem Namen resourceShouldBeCompliantInit. Die Ressource ist nur von zwei der Richtliniendefinitionen in der Initiative ausgenommen, der benutzerdefinierten Richtliniendefinition customOrgPolicy ( policyDefinitionReferenceId: requiredTags) und der integrierten Richtliniendefinition Zulässige Standorte ( policyDefinitionReferenceId : allowedLocations ):

{
  "id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/resourceIsNotApplicable",
  "apiVersion": "2020-07-01-preview",
  "name": "resourceIsNotApplicable",
  "type": "Microsoft.Authorization/policyExemptions",
  "properties": {
    "displayName": "This resource is scheduled for deletion",
    "description": "This resources is planned to be deleted by end of quarter and has been granted a waiver to the policy.",
    "metadata": {
      "requestedBy": "Storage team",
      "approvedBy": "IA",
      "approvedOn": "2020-07-26T08:02:32.0000000Z",
      "ticketRef": "4baf214c-8d54-4646-be3f-eb6ec7b9bc4f"
    },
    "policyAssignmentId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyAssignments/resourceShouldBeCompliantInit",
    "policyDefinitionReferenceId": [
      "requiredTags",
      "allowedLocations"
    ],
    "exemptionCategory": "waiver",
    "expiresOn": "2020-12-31T23:59:00.0000000Z",
    "assignmentScopeValidation": "Default"
  }
}

Anzeigename und Beschreibung

Mit displayName und description, geben Sie die Richtlinienausnahme und den Kontext für ihre Verwendung mit der spezifischen Ressource an. displayNamehat eine maximale Länge von 128 Zeichen und description eine maximale Länge von 512 Zeichen.

Metadaten

Mit der Eigenschaft metadata können Sie untergeordnete Eigenschaften erstellen, die zum Speichern relevanter Informationen benötigt werden. Im Beispiel enthalten die Eigenschaften requestedBy, approvedBy, approvedOn und ticketRef Kundenwerte mit Informationen dazu, wer die Ausnahme wann angefordert hat, sowie ein internes Nachverfolgungsticket für die Anforderung. Diese metadata-Eigenschaften sind Beispiele, aber sie sind nicht erforderlich, und metadata ist nicht auf diese untergeordneten Eigenschaften beschränkt.

Richtlinienzuweisungs-ID

Dieses Feld muss den vollständigen Pfadname einer Richtlinien- oder Initiativenzuweisung enthalten. policyAssignmentId ist eine Zeichenfolge und kein Array. Diese Eigenschaft definiert, von welcher Zuweisung die übergeordnete Ressourcenhierarchie oder einzelne Ressource ausgenommen ist.

Richtliniendefinitions-IDs

Wenn sich policyAssignmentId auf eine Initiativzuweisung bezieht, kann mit der policyDefinitionReferenceId-Eigenschaft angegeben werden, für welche Richtliniendefinition in der Initiative eine Ausnahme für die Objektressource gilt. Da die Ressource von einer oder mehreren enthaltenen Richtliniendefinition ausgenommen sein könnte, ist diese Eigenschaft ein Array. Die Werte müssen den Werten in der Initiativendefinition in den policyDefinitions.policyDefinitionReferenceId-Feldern entsprechen.

Ausnahmekategorie

Es gibt zwei Ausnahmekategorien, mit deren Hilfe Ausnahmen gruppiert werden können:

  • Gemindert: Die Ausnahme wird gewährt, da die Absicht der Richtlinie durch eine andere Methode erfüllt wird.
  • Verzicht: Die Ausnahme wird gewährt, da der Zustand der Nichtkonformität der Ressource vorübergehend akzeptiert wird. Ein weiterer Grund, diese Kategorie zu verwenden, ist das Ausschließen einer Ressource oder Ressourcenhierarchie von einer oder mehreren Definitionen in einer Initiative, aber nicht von der gesamten Initiative.

Ablauf

Mit der -Eigenschaft legen Sie fest, wann eine Ressourcenhierarchie oder eine einzelne Ressource nicht mehr von einer Zuweisung expiresOn wird. Diese optionale Eigenschaft muss im Universal ISO 8601-DateTime-Format yyyy-MM-ddTHH:mm:ss.fffffffZ angegeben werden.

Hinweis

Die Richtlinienausnahmen werden nicht gelöscht, wenn das durch expiresOn definierte Datum erreicht wird. Das Objekt wird für Aufzeichnungszwecke beibehalten, aber die Ausnahme wird nicht mehr berücksichtigt.

Ressourcenselektoren

Ausnahmen unterstützen eine optionale resourceSelectors-Eigenschaft, die in Ausnahmen wie bei Zuweisungen auf die gleiche Weise funktioniert. Die Eigenschaft ermöglicht ein schrittweises Rollout oder Rollback einer Ausnahme für bestimmte Teilmengen von Ressourcen auf kontrollierte Weise basierend auf Ressourcentyp, Ressourcenstandort oder ob die Ressource über einen Standort verfügt. Weitere Details zur Verwendung von Ressourcenselektoren finden Sie in der Zuweisungsstruktur. Der folgende JSON-Code ist eine Beispielausnahme, die Ressourcenselektoren verwendet. In diesem Beispiel werden nur Ressourcen in westcentralus von der Richtlinienzuweisung ausgenommen:

{
  "properties": {
    "policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "policyDefinitionReferenceId": [
      "limitSku",
      "limitType"
    ],
    "exemptionCategory": "Waiver",
    "resourceSelectors": [
      {
        "name": "TemporaryMitigation",
        "selectors": [
          {
            "kind": "resourceLocation",
            "in": [
              "westcentralus"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
  "type": "Microsoft.Authorization/policyExemptions",
  "name": "DemoExpensiveVM"
}

Die folgenden Ressourcenselektoren kinds werden im Policy Exemptions-Objekt unterstützt:

  • resourceLocation: Dieses Grundstück wird verwendet, um Ressourcen basierend auf ihrem Standort auszuwählen. Kann nicht im selben Ressourcenselektor wie resourceWithoutLocation verwendet werden.
  • resourceType: Diese Eigenschaft wird verwendet, um Ressourcen basierend auf ihrem Typ auszuwählen.
  • resourceWithoutLocation: Diese Eigenschaft wird verwendet, um Ressourcen auf Abonnementebene auszuwählen, die keinen Standort haben. Derzeit unterstützt es nur subscriptionLevelResources. Kann nicht im selben Ressourcenselektor wie ResourceLocation verwendet werden.
  • in: Die Liste der erlaubten Werte für die angegebene Art. Kann nicht mit NotIn verwendet werden. Kann bis zu 50 Werte enthalten.
  • notIn: Die Liste der nicht erlaubten Werte für die angegebene Art. Kann nicht verwendet werden. Kann bis zu 50 Werte enthalten.
  • userPrincipalId: Die Liste der erlaubten Benutzerobjekt-IDs kann in der Anfrage ausgenommen werden. Dies kann einem einzelnen Benutzer, einer MSI oder einem Dienstprinzipal zugeordnet werden.
  • groupPrincipalId: Die Liste der erlaubten Sicherheitsgruppen-IDs kann in der Anfrage ausgenommen werden. Ein Ressourcenselektor kann mehrere Selektoren enthalten. Um auf eine Ressourcenauswahl angewendet werden zu können, muss eine Ressource die von all ihren Selektoren angegebenen Anforderungen erfüllen. Außerdem können bis zu 10 resourceSelectors in einer einzigen Zuweisung angegeben werden. Inbegriffene Ressourcen werden ausgewertet, wenn sie die Anforderungen einer dieser Ressourcenselektoren erfüllen.

Identitätsbasierte Ausnahmen

Sie können Selektorarten userPrincipalId und groupPrincipalId innerhalb der Ausnahmestruktur nutzen, um einem bestimmten Service-Principal, MSI, Benutzer oder Sicherheitsgruppe zu ermöglichen, die Durchsetzung einer Richtlinienzuweisung zu umgehen.

Nehmen wir ein Beispiel, bei dem Sie die eingebaute Richtliniendefinition Allowed virtual machine size SKUs in Ihrem Abonnement festlegen möchten, um sicherzustellen, dass nur A-Familien-VMs bereitgestellt werden können, mit Ausnahme einer hochprivilegierten Gruppe. Sie können identitätsbasierte Bedingungen nutzen, um diese Gruppe in Ihrer Organisation von dieser Durchsetzung auszuschließen.

Dies ist ein Beispiel für eine identitätsbasierte Ausnahme:

"properties": {   
  "policyAssignmentId": "/subscriptions/<subscriptionID>/providers/Microsoft.Authorization/policyAssignments/CostMgmt",   
  "resourceSelectors": [{    
      "name": "AllowedGroups",   
      "selectors": [{   
          "kind": "groupPrincipalId",   
          "in": [ "<HighPrivEngGroupId>" ]   
        },      
      ]   
    }   
  ],   
  "exemptionCategory": "Waiver",   
  "displayName": "Exempt high SKU VM",   
  "description": "Exempt high SKU VM for business need"   
}   

Prüfung des Zuweisungsbereichs (Vorschau)

In den meisten Szenarien wird der Ausnahmebereich überprüft, um sicherzustellen, dass er sich im Bereich der Richtlinienzuweisung befindet. Mit der optionalen Eigenschaft assignmentScopeValidation kann eine Ausnahme diese Überprüfung umgehen und außerhalb des Zuweisungsbereichs erstellt werden. Diese Überprüfung ist für Situationen vorgesehen, in denen ein Abonnement von einer Verwaltungsgruppe in eine andere verschoben werden muss, aber die Verschiebung würde aufgrund von Eigenschaften der Ressourcen innerhalb des Abonnements von der Richtlinie blockiert werden. In diesem Szenario könnte eine Ausnahme für das Abonnement in seiner aktuellen Verwaltungsgruppe erstellt werden, damit die Ressourcen von einer Richtlinienzuweisung für die Ziel-Verwaltungsgruppe ausgenommen werden können. Auf diese Weise wird der Vorgang, wenn das Abonnement in die Ziel-Verwaltungsgruppe verschoben wird, nicht blockiert, da Ressourcen bereits von der betreffenden Richtlinienzuweisung ausgenommen sind. Die Verwendung dieser Eigenschaft wird im folgenden Beispiel gezeigt:

{
  "properties": {
    "policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgName}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "policyDefinitionReferenceId": [
      "limitSku",
      "limitType"
    ],
    "exemptionCategory": "Waiver",
    "assignmentScopeValidation": "DoNotValidate",
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
  "type": "Microsoft.Authorization/policyExemptions",
  "name": "DemoExpensiveVM"
}

Zulässige Werte für assignmentScopeValidation sind Default und DoNotValidate. Ohne Angabe erfolgt der Standardüberprüfungsprozess.

Erforderliche Berechtigungen

Die Azure RBAC-Berechtigungen (rollenbasierte Zugriffssteuerung), die zum Verwalten von Richtlinienausnahmeobjekten erforderlich sind, befinden sich in der Vorgangsgruppe Microsoft.Authorization/policyExemptions. Die integrierten Rollen Mitwirkender bei Ressourcenrichtlinien und Sicherheitsadministrator verfügen beide über die Berechtigungen read und write. Policy Insights-Datenschreiber (Vorschau) verfügt über die Berechtigung read.

Das Gewähren von Ausnahmen hat weitreichende Auswirkungen, daher weisen Ausnahmen zusätzliche Sicherheitsmaßnahmen auf. Es ist nicht nur der Microsoft.Authorization/policyExemptions/write-Vorgang für die Ressourcenhierarchie oder einzelne Ressource erforderlich, sondern der Ersteller der Ausnahme muss auch über das Verb exempt/Action für die Zielzuweisung verfügen.

Erstellung und Verwaltung von Ausnahmen

Ausnahmen werden für zeitgebundene oder spezifische Szenarien empfohlen, in denen eine Ressource oder Ressourcenhierarchie weiterhin nachverfolgt und anderweitig ausgewertet werden sollte, wenn es aber einen bestimmten Grund gibt, warum sie nicht auf Konformität geprüft werden sollte. Wenn einer Umgebung beispielsweise die integrierte Definition Storage accounts should disable public network access (ID: b2982f36-99f2-4db5-8eff-283140c09693) zugewiesen wurde, wobei Effekt auf Überprüfung festgelegt ist. Bei der Konformitätsbewertung ist die Ressource StorageAcc1 nicht konform, jedoch muss StorageAcc1 für geschäftliche Zwecke über einen öffentlichen Netzwerkzugriff verfügen. In diesem Fall sollte eine Anforderung für die Erstellung einer Ausnahmeressource eingereicht werden, die auf StorageAcc1 ausgerichtet ist. Nachdem die Ausnahme erstellt wurde, wird StorageAcc1 in der Konformitätsüberprüfung als ausgenommen angezeigt.

Überprüfen Sie ihre Ausnahmen regelmäßig, um sicherzustellen, dass alle betreffenden Elemente angemessen ausgenommen sind, und entfernen Sie unverzüglich alle, für die Ausnahmen nicht gültig sind. Zu diesem Zeitpunkt können auch abgelaufene Ausnahmeressourcen gelöscht werden.

Compliance-Substaat

Wenn eine Ausnahme für eine Ressource gilt, gilt deren Compliance-Status als Exempt. Der Compliance-Substate zeigt, wie der Compliance-Status der Ressource wäre, wenn die Ausnahme entfernt würde. Compliance-Substate wird nur für befreite Ressourcen besetzt. Nicht befreite Ressourcen haben einen leeren Compliance-Unterstaat.

Compliance-Substate ist Teil des Policy Insights-Compliance-Ergebnisses. Es ist keine Immobilie, die man in der Police Exemption Resource konfiguriert.

Um den Compliance-Substate im Azure-Portal anzuzeigen:

  1. Gehe zu Policy>Compliance und wähle dann eine Richtlinienzuweisung aus.
  2. Im Compliance-Bericht der Aufgabe wählen Sie Spalten bearbeiten aus.
  3. Fügen Sie den Compliance-Unterzustand hinzu, ordnen Sie die Spalte nach Bedarf an und wählen Sie dann Speichern.

Sie können außerdem den Waiver- oder Mitigated-Wert in der Spalte Compliance-Details auswählen, um den Compliance-Unterzustand im Detailbereich anzuzeigen.

Für organisationsweite Berichte fragen Sie die properties.stateDetails.complianceSubState Eigenschaft in Azure Resource Graph ab. Die folgende Abfrage listet befreite Ressourcen und deren Compliance-Unterstaaten auf:

policyresources
| where type == "microsoft.policyinsights/policystates"
| extend complianceState = tostring(properties.complianceState)
| extend complianceSubState = tostring(properties.stateDetails.complianceSubState),
         resourceId = tostring(properties.resourceId),
         policyAssignmentId = tostring(properties.policyAssignmentId)
| where complianceState == "Exempt"
| project resourceId, policyAssignmentId, complianceState, complianceSubState

Nächste Schritte