Åtgärda icke-kompatibla resurser med Azure PolicyRemediate non-compliant resources with Azure Policy

Resurser som inte är kompatibla med en deployIfNotExists eller en ändrings princip kan försättas i ett kompatibelt tillstånd genom reparation.Resources that are non-compliant to a deployIfNotExists or modify policy can be put into a compliant state through Remediation. Reparationen utförs genom att instruera Azure Policy att köra deployIfNotExists -effekterna eller ändra- åtgärderna för den tilldelade principen på dina befintliga resurser, om tilldelningen är till en hanterings grupp, en prenumeration, en resurs grupp eller en enskild resurs.Remediation is accomplished by instructing Azure Policy to run the deployIfNotExists effect or the modify operations of the assigned policy on your existing resources, whether that assignment is to a management group, a subscription, a resource group, or an individual resource. Den här artikeln visar de steg som krävs för att förstå och utföra reparation med Azure Policy.This article shows the steps needed to understand and accomplish remediation with Azure Policy.

Så här fungerar reparations säkerhetHow remediation security works

När Azure Policy kör mallen i deployIfNotExists -princip definitionen används en hanterad identitet.When Azure Policy runs the template in the deployIfNotExists policy definition, it does so using a managed identity. Azure Policy skapar en hanterad identitet för varje tilldelning, men du måste ha information om vilka roller som ska bevilja den hanterade identiteten.Azure Policy creates a managed identity for each assignment, but must have details about what roles to grant the managed identity. Om den hanterade identiteten saknar roller visas ett fel när principen eller ett initiativ tilldelas.If the managed identity is missing roles, an error is displayed during the assignment of the policy or an initiative. När du använder portalen beviljas Azure Policy automatiskt den hanterade identitet som listade roller när tilldelningen startar.When using the portal, Azure Policy automatically grants the managed identity the listed roles once assignment starts. När du använder SDK måste rollerna manuellt beviljas till den hanterade identiteten.When using SDK, the roles must manually be granted to the managed identity. Platsen för den hanterade identiteten påverkar inte åtgärden med Azure policy.The location of the managed identity doesn't impact its operation with Azure Policy.

Skärm bild av en deployIfNotExists-princip som saknar definierad behörighet för den hanterade identiteten.

Viktigt

I följande scenarion måste tilldelningens hanterade identitet manuellt beviljas åtkomst eller så Miss fungerar reparations distributionen:In the following scenarios, the assignment's managed identity must be manually granted access or the remediation deployment will fail:

  • Om tilldelningen skapas via SDKIf the assignment is created through SDK
  • Om en resurs som har ändrats av deployIfNotExists eller ändra ligger utanför omfånget för princip tilldelningenIf a resource modified by deployIfNotExists or modify is outside the scope of the policy assignment
  • Om mallen har åtkomst till egenskaper för resurser utanför omfånget för princip tilldelningenIf the template accesses properties on resources outside the scope of the policy assignment

Konfigurera princip definitionConfigure policy definition

Det första steget är att definiera de roller som deployIfNotExists och ändra behöver i princip definitionen för att kunna distribuera innehållet i den inkluderade mallen.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. Lägg till en roleDefinitionIds -egenskap under egenskapen information .Under the details property, add a roleDefinitionIds property. Den här egenskapen är en sträng mat ris som matchar roller i din miljö.This property is an array of strings that match roles in your environment. Ett fullständigt exempel finns i DeployIfNotExists- exemplet eller i ändra exempel.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}"
    ]
}

Egenskapen roleDefinitionIds använder det fullständiga resurs-ID: n och tar inte med den korta roleName för rollen.The roleDefinitionIds property uses the full resource identifier and doesn't take the short roleName of the role. Använd följande kod för att hämta ID för rollen "deltagare" i din miljö:To get the ID for the 'Contributor' role in your environment, use the following code:

az role definition list --name 'Contributor'

Konfigurera den hanterade identiteten manuelltManually configure the managed identity

När du skapar en tilldelning med hjälp av portalen genererar Azure Policy båda den hanterade identiteten och ger den roller som definierats i roleDefinitionIds.When creating an assignment using the portal, Azure Policy both generates the managed identity and grants it the roles defined in roleDefinitionIds. I följande fall måste steg för att skapa den hanterade identiteten och tilldela IT-behörigheter göras manuellt:In the following conditions, steps to create the managed identity and assign it permissions must be done manually:

  • När du använder SDK (till exempel Azure PowerShell)While using the SDK (such as Azure PowerShell)
  • När en resurs utanför tilldelnings omfånget ändras av mallenWhen a resource outside the assignment scope is modified by the template
  • När en resurs utanför tilldelnings omfånget läses av mallenWhen a resource outside the assignment scope is read by the template

Skapa hanterad identitet med PowerShellCreate managed identity with PowerShell

Om du vill skapa en hanterad identitet under tilldelningen av principen måste plats definieras och AssignIdentity användas.To create a managed identity during the assignment of the policy, Location must be defined and AssignIdentity used. I följande exempel hämtas definitionen av den inbyggda principen distribuera transparent data kryptering i SQL DB, ställer in mål resurs gruppen och skapar sedan tilldelningen.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

$assignmentVariabeln innehåller nu det primära ID: t för den hanterade identiteten tillsammans med de standardvärden som returneras när du skapar en princip tilldelning.The $assignment variable now contains the principal ID of the managed identity along with the standard values returned when creating a policy assignment. Den kan nås via $assignment.Identity.PrincipalId .It can be accessed through $assignment.Identity.PrincipalId.

Bevilja definierade roller med PowerShellGrant defined roles with PowerShell

Den nya hanterade identiteten måste slutföra replikeringen via Azure Active Directory innan den kan beviljas nödvändiga roller.The new managed identity must complete replication through Azure Active Directory before it can be granted the needed roles. När replikeringen är klar itererar följande exempel princip definitionen i $policyDef för roleDefinitionIds och använder New-AzRoleAssignment för att ge den nya hanterade identiteten roller.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
    }
}

Bevilja definierade roller via portalenGrant defined roles through portal

Det finns två sätt att ge en tilldelnings hanterade identitet de definierade rollerna med hjälp av portalen, med hjälp av åtkomst kontroll (IAM) eller genom att redigera principen eller initiativ tilldelningen och välja Spara.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 selecting Save.

Följ dessa steg om du vill lägga till en roll i tilldelningens hanterade identitet:To add a role to the assignment's managed identity, follow these steps:

  1. Starta tjänsten Azure Policy i Azure Portal genom att välja alla tjänsteroch sedan söka efter och välja princip.Launch the Azure Policy service in the Azure portal by selecting All services, then searching for and selecting Policy.

  2. Välj Tilldelningar till vänster på sidan Azure Policy.Select Assignments on the left side of the Azure Policy page.

  3. Leta upp tilldelningen med en hanterad identitet och välj namnet.Locate the assignment that has a managed identity and select the name.

  4. Hitta egenskapen tilldelnings-ID på sidan Redigera.Find the Assignment ID property on the edit page. Tilldelnings-ID: t ser ut ungefär så här:The assignment ID will be something like:

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

    Namnet på den hanterade identiteten är den sista delen av tilldelningens resurs-ID, som är 2802056bfc094dfb95d4d7a5 i det här exemplet.The name of the managed identity is the last portion of the assignment resource ID, which is 2802056bfc094dfb95d4d7a5 in this example. Kopiera den här delen av tilldelningens resurs-ID.Copy this portion of the assignment resource ID.

  5. Gå till resursen eller den överordnade resurs behållaren (resurs grupp, prenumeration, hanterings grupp) som behöver roll definitionen manuellt tillagda.Navigate to the resource or the resources parent container (resource group, subscription, management group) that needs the role definition manually added.

  6. Välj länken åtkomst kontroll (IAM) på sidan resurser och välj sedan + Lägg till roll tilldelning överst på sidan åtkomst kontroll.Select the Access control (IAM) link in the resources page and then select + Add role assignment at the top of the access control page.

  7. Välj lämplig roll som matchar en roleDefinitionIds från princip definitionen.Select the appropriate role that matches a roleDefinitionIds from the policy definition. Lämna behörigheten tilldela till standardvärdet för Azure AD-användare, grupp eller program.Leave Assign access to set to the default of 'Azure AD user, group, or application'. I rutan Välj klistrar du in eller skriver den del av tilldelningens resurs-ID som finns tidigare.In the Select box, paste or type the portion of the assignment resource ID located earlier. När sökningen är klar markerar du objektet med samma namn för att välja ID och väljer Spara.Once the search completes, select the object with the same name to select ID and select Save.

Skapa en reparations uppgiftCreate a remediation task

Skapa en reparations uppgift via portalenCreate a remediation task through portal

Under utvärderingen bestämmer princip tilldelningen med deployIfNotExists eller ändra effekter om det finns icke-kompatibla resurser.During evaluation, the policy assignment with deployIfNotExists or modify effects determines if there are non-compliant resources. När icke-kompatibla resurser hittas finns informationen på reparations sidan.When non-compliant resources are found, the details are provided on the Remediation page. Tillsammans med listan över principer som har icke-kompatibla resurser är alternativet att utlösa en reparations aktivitet.Along with the list of policies that have non-compliant resources is the option to trigger a remediation task. Det här alternativet är vad som skapar en distribution från deployIfNotExists -mallen eller ändra -åtgärder.This option is what creates a deployment from the deployIfNotExists template or the modify operations.

Följ dessa steg om du vill skapa en reparations uppgift:To create a remediation task, follow these steps:

  1. Starta tjänsten Azure Policy i Azure Portal genom att välja alla tjänsteroch sedan söka efter och välja princip.Launch the Azure Policy service in the Azure portal by selecting All services, then searching for and selecting Policy.

    Skärm bild av en deployIfNotExists-princip som saknar definierad behörighet för den hanterade identiteten.

  2. Välj reparation till vänster på sidan Azure policy.Select Remediation on the left side of the Azure Policy page.

    Skärm bild av en deployIfNotExists-princip som saknar definierad behörighet för den hanterade identiteten.

  3. Alla deployIfNotExists och ändra princip tilldelningar med icke-kompatibla resurser ingår i principerna för att åtgärda fliken och data tabellen.All deployIfNotExists and modify policy assignments with non-compliant resources are included on the Policies to remediate tab and data table. Välj en princip med resurser som inte är kompatibla.Select on a policy with resources that are non-compliant. Sidan ny reparations aktivitet öppnas.The New remediation task page opens.

    Anteckning

    Ett annat sätt att öppna sidan reparations uppgift är att söka efter och välja principen på sidan efterlevnad och sedan välja knappen skapa reparations uppgift .An alternate way to open the remediation task page is to find and select the policy from the Compliance page, then select the Create Remediation Task button.

  4. På sidan ny reparations aktivitet filtrerar du de resurser som ska åtgärdas genom att använda omfångs punkter för att välja underordnade resurser från där principen tilldelas (inklusive enskilda resurs objekt).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). Använd dessutom List rutan platser för att ytterligare filtrera resurserna.Additionally, use the Locations drop-down to further filter the resources. Endast resurser som anges i tabellen kommer att åtgärdas.Only resources listed in the table will be remediated.

    Skärm bild av en deployIfNotExists-princip som saknar definierad behörighet för den hanterade identiteten.

  5. Påbörja reparations åtgärden när resurserna har filtrerats genom att välja åtgärda.Begin the remediation task once the resources have been filtered by selecting Remediate. Sidan policy efterlevnad öppnas på fliken reparations aktiviteter för att visa status för aktiviteternas förlopp.The policy compliance page opens to the Remediation tasks tab to show the state of the tasks progress. Distributioner som skapats av reparations aktiviteten börjar direkt.Deployments created by the remediation task begin right away.

    Skärm bild av en deployIfNotExists-princip som saknar definierad behörighet för den hanterade identiteten.

  6. Välj på reparations uppgiften från sidan efterlevnadsprincip för att få information om förloppet.Select on the remediation task from the policy compliance page to get details about the progress. Filtreringen som används för aktiviteten visas tillsammans med en lista över de resurser som åtgärdas.The filtering used for the task is shown along with a list of the resources being remediated.

  7. På sidan reparations aktivitet högerklickar du på en resurs för att Visa reparations aktivitetens distribution eller resursen.From the Remediation task page, right-click on a resource to view either the remediation task's deployment or the resource. I slutet av raden väljer du relaterade händelser för att se information, till exempel ett fel meddelande.At the end of the row, select on Related events to see details such as an error message.

    Skärm bild av en deployIfNotExists-princip som saknar definierad behörighet för den hanterade identiteten.

Resurser som distribueras via en reparations uppgift läggs till på fliken distribuerade resurser på sidan efterlevnad av principer.Resources deployed through a remediation task are added to the Deployed Resources tab on the policy compliance page.

Skapa en reparations uppgift via Azure CLICreate a remediation task through Azure CLI

Använd kommandona om du vill skapa en reparations uppgift med Azure CLI az policy remediation .To create a remediation task with Azure CLI, use the az policy remediation commands. Ersätt {subscriptionId} med ditt prenumerations-ID och {myAssignmentId} med ditt deployIfNotExists eller ändra princip tilldelnings-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}'

Andra reparations kommandon och exempel finns i kommandona för att Reparera AZ-principer .For other remediation commands and examples, see the az policy remediation commands.

Skapa en reparations uppgift via Azure PowerShellCreate a remediation task through Azure PowerShell

Om du vill skapa en reparations uppgift med Azure PowerShell använder du Start-AzPolicyRemediation kommandona.To create a remediation task with Azure PowerShell, use the Start-AzPolicyRemediation commands. Ersätt {subscriptionId} med ditt prenumerations-ID och {myAssignmentId} med ditt deployIfNotExists eller ändra princip tilldelnings-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}'

Andra reparations-cmdletar och exempel finns i modulen AZ. PolicyInsights .For other remediation cmdlets and examples, see the Az.PolicyInsights module.

Skapa en reparations uppgift under princip tilldelningen i Azure PortalCreate a remediation task during policy assignment in the Azure portal

Ett effektiviserat sätt att skapa en reparations uppgift är att göra det från Azure Portal under princip tilldelningen.A streamlined way of creating a remediation task is to do so from the Azure portal during policy assignment. Om princip definitionen att tilldela är en deployIfNotExists eller en ändrings inverkan, erbjuder guiden på fliken reparation ett alternativ för att skapa en åtgärd .If the policy definition to assign is a deployIfNotExists or a Modify effect, the wizard on the Remediation tab offers a Create a remediation task option. Om det här alternativet är markerat skapas en reparations uppgift samtidigt som princip tilldelningen.If this option is selected, a remediation task is created at the same time as the policy assignment.

Nästa stegNext steps