Korrigieren nicht konformer Ressourcen mit Azure PolicyRemediate non-compliant resources with Azure Policy

Ressourcen, die mit der Richtlinie deployIfNotExists oder modify nicht konform sind, können über die Wiederherstellung in einen konformen Zustand versetzt werden.Resources that are non-compliant to a deployIfNotExists or modify policy can be put into a compliant state through Remediation. Die Wiederherstellung erfolgt durch die Anweisung an Azure Policy, den deployIfNotExists-Effekt oder das Tag operations der zugewiesenen Richtlinie auf Ihren vorhandenen Ressourcen auszuführen.Remediation is accomplished by instructing Azure Policy to run the deployIfNotExists effect or the tag operations of the assigned policy on your existing resources. Dieser Artikel zeigt die Schritte, die erforderlich sind, um die Korrektur mithilfe von Azure Policy zu verstehen und durchzuführen.This article shows the steps needed to understand and accomplish remediation with Azure Policy.

Sicherheit durch WiederherstellungHow remediation security works

Wenn Azure Policy die Vorlage in der Richtliniendefinition deployIfNotExists ausführt, wird hierfür eine Verwaltete Identität verwendet.When Azure Policy runs the template in the deployIfNotExists policy definition, it does so using a managed identity. Azure Policy erstellt für jede Ihrer Zuweisungen eine verwaltete Identität, muss jedoch wissen, welchen Rollen die verwaltete Identität gewährt werden soll.Azure Policy creates a managed identity for each assignment, but must have details about what roles to grant the managed identity. Wenn der der verwalteten Identität Rollen fehlen, wird dieser Fehler während der Zuweisung der Richtlinie oder in einer Initiative angezeigt.If the managed identity is missing roles, this error is displayed during the assignment of the policy or an initiative. Bei Verwendung des Portals gewährt Azure Policy der verwalteten Identität automatisch die aufgelisteten Rollen, sobald die Zuweisung ausgelöst wurde.When using the portal, Azure Policy will automatically grant the managed identity the listed roles once assignment is started.

Verwaltete Identität – fehlende Rolle

Wichtig

Wenn eine Ressource durch deployIfNotExists oder modify geänderte Ressource außerhalb des Bereichs der Richtlinienzuweisung liegt oder die Vorlage auf Eigenschaften in Ressourcen außerhalb des Bereichs der Richtlinienzuweisung zugreift, muss der verwalteten Identität der Zuweisung manuell Zugriff gewährt werden. Andernfalls schlägt die Bereitstellung der Wiederherstellung fehl.If a resource modified by deployIfNotExists or modify is outside the scope of the policy assignment or the template accesses properties on resources outside the scope of the policy assignment, the assignment's managed identity must be manually granted access or the remediation deployment will fail.

Konfigurieren einer RichtliniendefinitionConfigure policy definition

Im ersten Schritt werden die Rollen definiert, die deployIfNotExists und modify in der Richtliniendefinition benötigt, um die Inhalte Ihrer eingebundenen Vorlage bereitstellen zu können.The first step is to define the roles that deployIfNotExists and modify needs in the policy definition to successfully deploy the content of your included template. Fügen Sie unter der Eigenschaft Details eine roleDefinitionIds-Eigenschaft hinzu.Under the details property, add a roleDefinitionIds property. Diese Eigenschaft ist ein Array von Zeichenfolgen, die Rollen in Ihrer Umgebung entsprechen.This property is an array of strings that match roles in your environment. Ein vollständiges Beispiel finden Sie bei den Beispielen für „deployIfNotExists“ oder bei den Beispielen für „modify“.For a full example, see the deployIfNotExists example or the modify examples.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

Die Eigenschaft roleDefinitionIds verwendet die vollständige Ressourcen-ID und nicht den kurzen roleName der Rolle.The roleDefinitionIds property uses the full resource identifier and doesn't take the short roleName of the role. Verwenden Sie den folgenden Code, um die ID für die Rolle „Mitwirkender“ in Ihrer Umgebung abzurufen:To get the ID for the 'Contributor' role in your environment, use the following code:

az role definition list --name 'Contributor'

Manuelles Konfigurieren der verwalteten IdentitätManually configure the managed identity

Bei der Erstellung einer Zuweisung über das Portal generiert Azure Policy die verwaltete Identität und weist ihr die in roleDefinitionIds definierten Rollen zu.When creating an assignment using the portal, Azure Policy both generates the managed identity and grants it the roles defined in roleDefinitionIds. In den folgenden Bedingungen müssen die Schritte zum Erstellen der verwalteten Identität und zum Zuweisen von Berechtigungen manuell erfolgen:In the following conditions, steps to create the managed identity and assign it permissions must be done manually:

  • Bei der Verwendung des SDK (z.B. Azure PowerShell)While using the SDK (such as Azure PowerShell)
  • Wenn eine Ressource außerhalb des Zuweisungsbereichs von der Vorlage geändert wirdWhen a resource outside the assignment scope is modified by the template
  • Wenn eine Ressource außerhalb des Zuweisungsbereichs von der Vorlage gelesen wirdWhen a resource outside the assignment scope is read by the template

Hinweis

Azure PowerShell und .NET sind die einzigen SDKs, die diese Funktion derzeit unterstützen.Azure PowerShell and .NET are the only SDKs that currently support this capability.

Erstellen einer verwalteten Identität mit PowerShellCreate managed identity with PowerShell

Zum Erstellen einer verwalteten Identität während der Zuweisung der Richtlinie muss Speicherort definiert sein und AssignIdentity verwendet werden.To create a managed identity during the assignment of the policy, Location must be defined and AssignIdentity used. Im folgenden Beispiel wird die Definition der integrierten Richtlinie Transparente SQL DB-Datenbankverschlüsselung bereitstellen abgerufen, die Zielressourcengruppe festgelegt und anschließend die Zuweisung erstellt.The following example gets the definition of the built-in policy Deploy SQL DB transparent data encryption, sets the target resource group, and then creates the assignment.

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the built-in "Deploy SQL DB transparent data encryption" policy definition
$policyDef = Get-AzPolicyDefinition -Id '/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'

# Get the reference to the resource group
$resourceGroup = Get-AzResourceGroup -Name 'MyResourceGroup'

# Create the assignment using the -Location and -AssignIdentity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -AssignIdentity

Die Variable $assignment enthält nun die Prinzipal-ID der verwalteten Identität und die Standardwerte, die bei der Erstellung einer Richtlinienzuweisung zurückgegeben werden.The $assignment variable now contains the principal ID of the managed identity along with the standard values returned when creating a policy assignment. Ein Zugriff darauf ist über $assignment.Identity.PrincipalId möglich.It can be accessed through $assignment.Identity.PrincipalId.

Zuweisen definierter Rollen mit PowerShellGrant defined roles with PowerShell

Die neue verwaltete Identität muss die Replikation über Azure Active Directory ausführen, bevor ihr die erforderlichen Rollen zugewiesen werden können.The new managed identity must complete replication through Azure Active Directory before it can be granted the needed roles. Nach Abschluss der Replikation wird im folgenden Beispiel die Richtliniendefinition in $policyDef für die roleDefinitionIds wiederholt und New-AzRoleAssignment zum Zuweisen der Rollen zur neuen verwalteten Identität verwendet.Once replication is complete, the following example iterates the policy definition in $policyDef for the roleDefinitionIds and uses New-AzRoleAssignment to grant the new managed identity the roles.

# Use the $policyDef to get to the roleDefinitionIds array
$roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds

if ($roleDefinitionIds.Count -gt 0)
{
    $roleDefinitionIds | ForEach-Object {
        $roleDefId = $_.Split("/") | Select-Object -Last 1
        New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
    }
}

Zuweisen definierter Rollen über das PortalGrant defined roles through portal

Es gibt zwei Möglichkeiten, der verwalteten Identität einer Zuweisung die definierten Rollen über das Portal zuzuweisen: über die Zugriffssteuerung (IAM) oder durch Bearbeiten der Richtlinie oder Initiativenzuweisung und klicken auf Speichern.There are two ways to grant an assignment's managed identity the defined roles using the portal, by using Access control (IAM) or by editing the policy or initiative assignment and clicking Save.

Führen Sie die folgenden Schritte aus, um eine Rolle zu der verwalteten Identität der Zuweisung hinzuzufügen:To add a role to the assignment's managed identity, follow these steps:

  1. Starten Sie den Azure Policy-Dienst über das Azure-Portal, indem Sie auf Alle Dienste klicken und dann nach Richtlinie suchen und die entsprechende Option auswählen.Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

  2. Wählen Sie links auf der Seite „Azure Policy“ die Option Zuweisungen.Select Assignments on the left side of the Azure Policy page.

  3. Suchen Sie die Zuweisung, die über eine verwaltete Identität verfügt, und klicken Sie auf den Namen.Locate the assignment that has a managed identity and click on the name.

  4. Suchen Sie auf der Bearbeitungsseite nach der Eigenschaft Zuweisungs-ID.Find the Assignment ID property on the edit page. Die Zuweisungs-ID sieht wie folgt aus:The assignment ID will be something like:

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    Der letzte Teil der Ressourcen-ID der Zuweisung enthält den Namen der verwalteten Identität, in diesem Beispiel 2802056bfc094dfb95d4d7a5.The name of the managed identity is the last portion of the assignment resource ID, which is 2802056bfc094dfb95d4d7a5 in this example. Kopieren Sie diesen Teil der Ressourcen-ID der Zuweisung.Copy this portion of the assignment resource ID.

  5. Navigieren Sie zu der Ressource des übergeordneten Containers der Ressource (Ressourcengruppe, Abonnement, Verwaltungsgruppe). Dort muss die Rollendefinition manuell hinzugefügt werden.Navigate to the resource or the resources parent container (resource group, subscription, management group) that needs the role definition manually added.

  6. Klicken Sie auf der Seite „Ressourcen“ auf den Link Zugriffssteuerung (IAM) und anschließend oben auf der Seite „Zugriffssteuerung“ auf + Rollenzuweisung hinzufügen.Click the Access control (IAM) link in the resources page and click + Add role assignment at the top of the access control page.

  7. Wählen Sie die entsprechende Rolle, die roleDefinitionIds aus der Richtliniendefinition entspricht.Select the appropriate role that matches a roleDefinitionIds from the policy definition. Lassen Sie für Zugriff zuweisen zu den Standardwert „Azure AD-Benutzer, -Gruppe oder -Anwendung“ festgelegt.Leave Assign access to set to the default of 'Azure AD user, group, or application'. Fügen Sie im Feld Auswählen den zuvor lokalisierten Teil der Ressourcen-ID der Zuweisung ein oder geben Sie diesen ein.In the Select box, paste or type the portion of the assignment resource ID located earlier. Klicken Sie nach Abschluss der Suche auf das Objekt mit dem gleichen Namen, um die ID auszuwählen, und anschließend auf Speichern.Once the search completes, click the object with the same name to select ID and click Save.

Erstellen eines WartungstaskCreate a remediation task

Erstellen eines Wartungstasks über das PortalCreate a remediation task through portal

Während der Auswertung wird durch die Richtlinienzuweisung mit den Effekten deployIfNotExists oder modify bestimmt, ob nicht konforme Ressourcen vorhanden sind.During evaluation, the policy assignment with deployIfNotExists or modify effects determines if there are non-compliant resources. Falls nicht konforme Ressourcen gefunden werden, finden Sie auf der Seite Wartung weitere Einzelheiten.When non-compliant resources are found, the details are provided on the Remediation page. Neben der Liste der Richtlinien mit nicht konformen Ressourcen ist die Option, einen Wartungstask auszulösen.Along with the list of policies that have non-compliant resources is the option to trigger a remediation task. Dadurch wird eine Bereitstellung mithilfe der Vorlage deployIfNotExists oder den modify-Vorgängen erstellt.This option is what creates a deployment from the deployIfNotExists template or the modify operations.

Führen Sie die folgenden Schritte aus, um einen Wartungstask zu erstellen:To create a remediation task, follow these steps:

  1. Starten Sie den Azure Policy-Dienst über das Azure-Portal, indem Sie auf Alle Dienste klicken und dann nach Richtlinie suchen und die entsprechende Option auswählen.Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

    Suchen nach „Policy“ unter „Alle Dienste“

  2. Wählen Sie links auf der Seite „Azure Policy“ die Option Wartung aus.Select Remediation on the left side of the Azure Policy page.

    Auswählen von „Wartung“ auf der Seite „Richtlinie“

  3. Auf der Registerkarte Policies to remediate (Zu wartende Richtlinien) und in der Datentabelle sind sämtliche deployIfNotExists- und modify-Richtlinienzuweisungen mit nicht konformen Ressourcen enthalten.All deployIfNotExists and modify policy assignments with non-compliant resources are included on the Policies to remediate tab and data table. Klicken Sie auf eine Richtlinie mit Ressourcen, die nicht konform sind.Click on a policy with resources that are non-compliant. Die Seite Neuer Wiederherstellungstask wird geöffnet.The New remediation task page opens.

    Hinweis

    Eine alternative Möglichkeit zum Öffnen der Seite Wiederherstellungstask besteht darin, über die Seite Konformität nach der Richtlinie zu suchen, darauf zu klicken und anschließend auf die Schaltfläche Wartungstask erstellen zu klicken.An alternate way to open the remediation task page is to find and click on the policy from the Compliance page, then click the Create Remediation Task button.

  4. Filtern Sie auf der Seite Neuer Wartungstask die zu korrigierenden Ressourcen, indem Sie die über die Auslassungspunkte bei Bereich untergeordnete Ressourcen auswählen, von denen aus die Richtlinie zugewiesen wurde (bis hin zu den einzelnen Ressourcenobjekten).On the New remediation task page, filter the resources to remediate by using the Scope ellipses to pick child resources from where the policy is assigned (including down to the individual resource objects). Darüber hinaus können Sie die Ressourcen über das Dropdownfeld Standorte weiter filtern.Additionally, use the Locations drop-down to further filter the resources. Nur in der Tabelle aufgeführte Ressourcen werden gewartet.Only resources listed in the table will be remediated.

    Wartung – auswählen, welche Ressourcen gewartet werden

  5. Sobald die Ressourcen gefiltert wurden, können Sie den Wartungstask auslösen, indem Sie auf Korrigieren klicken.Begin the remediation task once the resources have been filtered by clicking Remediate. Auf der Registerkarte Wartungstasks wird die Seite „Richtlinienkonformität“ geöffnet, auf welcher der Fortschritt der Tasks angezeigt wird.The policy compliance page will open to the Remediation tasks tab to show the state of the tasks progress.

    Wartung – Status der Wartungsaufgaben

  6. Klicken Sie auf der Seite „Richtlinienkonformität“ auf Wartungstask, um Einzelheiten zum Fortschritt abzurufen.Click on the remediation task from the policy compliance page to get details about the progress. Die für den Task verwendete Filterung wird zusammen mit einer Liste der Ressourcen angezeigt, die gerade korrigiert werden.The filtering used for the task is shown along with a list of the resources being remediated.

  7. Klicken Sie auf der Seite Wartungstasks mit der rechten Maustaste auf eine Ressource, um die Bereitstellung des Wartungstasks oder die Ressource anzuzeigen.From the remediation task page, right-click on a resource to view either the remediation task's deployment or the resource. Klicken Sie am Ende der Zeile auf Verknüpfte Ereignisse, um Einzelheiten wie z.B. eine Fehlermeldung anzuzeigen.At the end of the row, click on Related events to see details such as an error message.

    Wartung: Kontextmenü des Task der Ressource

Ressourcen, die über einen Wartungstask bereitgestellt werden, werden auf der Seite „Richtlinienkonformität“ zur Registerkarte Bereitgestellte Ressourcen hinzugefügt.Resources deployed through a remediation task are added to the Deployed Resources tab on the policy compliance page.

Erstellen eines Wartungstasks über die Azure CLICreate a remediation task through Azure CLI

Verwenden Sie zum Erstellen eines Wartungstasks mit der Azure-Befehlszeilenschnittstelle die az policy remediation-Befehle.To create a remediation task with Azure CLI, use the az policy remediation commands. Ersetzen Sie {subscriptionId} durch Ihre Abonnement-ID und {myAssignmentId} durch Ihre deployIfNotExists- oder modify-Richtlinienzuweisungs-ID.Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# Login first with az login if not using Cloud Shell

# Create a remediation for a specific assignment
az policy remediation create --name myRemediation --policy-assignment '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

Informationen zu anderen Wartungsbefehlen und Beispiele finden Sie im Artikel zu den az policy remediation-Befehlen.For other remediation commands and examples, see the az policy remediation commands.

Erstellen eines Wartungstasks über Azure PowerShellCreate a remediation task through Azure PowerShell

Verwenden Sie zum Erstellen eines Wartungstasks mit Azure PowerShell die Start-AzPolicyRemediation-Befehle.To create a remediation task with Azure PowerShell, use the Start-AzPolicyRemediation commands. Ersetzen Sie {subscriptionId} durch Ihre Abonnement-ID und {myAssignmentId} durch Ihre deployIfNotExists- oder modify-Richtlinienzuweisungs-ID.Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# Login first with Connect-AzAccount if not using Cloud Shell

# Create a remediation for a specific assignment
Start-AzPolicyRemediation -Name 'myRemedation' -PolicyAssignmentId '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

Andere Cmdlets zur Wartung und Beispiele finden Sie im Az.PolicyInsights-Modul.For other remediation cmdlets and examples, see the Az.PolicyInsights module.

Nächste SchritteNext steps