Å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 -eller tag- åtgärderna för den tilldelade principen på dina befintliga resurser.Remediation is accomplished by instructing Azure Policy to run the deployIfNotExists effect or the tag operations of the assigned policy on your existing resources. 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.

Hur fungerar säkerheten för reparationHow 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 identitet saknas roller, visas det här felet under tilldelningen av principen eller ett initiativ.If the managed identity is missing roles, this 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 startas.When using the portal, Azure Policy will automatically grant the managed identity the listed roles once assignment is started.

Hanterad identitet - saknas roll

Viktigt

Om en resurs som har ändrats av deployIfNotExists eller ändrar utanför omfånget för princip tilldelningen eller om mallen har åtkomst till egenskaper för resurser utanför omfånget för princip tilldelningen, måste tilldelningens hanterade identitet vara manuellt beviljad åtkomst eller reparations distributionen Miss kan.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.

Konfigurera principdefinitionConfigure 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. Under den information egenskapen, lägga till en roleDefinitionIds egenskapen.Under the details property, add a roleDefinitionIds property. Den här egenskapen är en matris med strängar 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 ”Bidragsgivar” 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 manuellt hanterad identitetManually 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. Steg för att skapa den hanterade identitet och tilldela den behörigheter måste göras manuellt under följande förhållanden:In the following conditions, steps to create the managed identity and assign it permissions must be done manually:

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

Anteckning

Azure PowerShell och .NET är de enda SDK: er som för närvarande stöd för den här funktionen.Azure PowerShell and .NET are the only SDKs that currently support this capability.

Skapa hanterad identitet med PowerShellCreate managed identity with PowerShell

Skapa en hanterad identitet vid tilldelningen av principen, plats måste definieras och AssignIdentity används.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 SQL DB transparent datakrypteringanger målresursgruppen 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

Den $assignment variabeln innehåller nu ägar-ID för den hanterade identitet tillsammans med de standardvärden som returneras när du skapar en principtilldelning.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 definierat roller med PowerShellGrant defined roles with PowerShell

Den nya hantera identiteten måste slutföra replikering via Azure Active Directory innan den kan beviljas de nödvändiga rollerna.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 rollerna den nya hanterade identiteten.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 definierat roller via portalenGrant defined roles through portal

Det finns två sätt att ge en tilldelning hanterad identitet definierade roller med hjälp av portalen med hjälp av åtkomstkontroll (IAM) eller genom att redigera tilldelningen princip eller ett initiativ och klicka på 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 clicking Save.

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

  1. Starta Azure Policy-tjänsten i Azure Portal genom att klicka på Alla tjänster och sedan söka efter och välja Princip.Launch the Azure Policy service in the Azure portal by clicking 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 den tilldelningen som har en hanterad identitet och klicka på namnet.Locate the assignment that has a managed identity and click on the name.

  4. Hitta den tilldelnings-ID egenskap på sidan Redigera.Find the Assignment ID property on the edit page. Tilldelnings-ID blir något som liknar:The assignment ID will be something like:

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

    Namnet på den hanterade identitet är den sista delen av tilldelning av resurs-ID, vilket ä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 tilldelning av resurs-ID.Copy this portion of the assignment resource ID.

  5. Gå till resursen eller resurser överordnade behållaren (resursgrupp, prenumeration, hanteringsgrupp) som behöver rolldefinitionen la till manuellt.Navigate to the resource or the resources parent container (resource group, subscription, management group) that needs the role definition manually added.

  6. Klicka på den åtkomstkontroll (IAM) länka på resurssidan och klicka på + Lägg till rolltilldelning överst på sidan för kontroll av åtkomst.Click the Access control (IAM) link in the resources page and click + Add role assignment at the top of the access control page.

  7. Välj rätt roll som matchar en roleDefinitionIds från principdefinitionen.Select the appropriate role that matches a roleDefinitionIds from the policy definition. Lämna tilldela åtkomst till inställt på standardvärdet ”Azure AD användaren, gruppen eller programmet”.Leave Assign access to set to the default of 'Azure AD user, group, or application'. I den Välj rutan, klistra in eller Skriv delen av tilldelning av resurs-ID finns tidigare.In the Select box, paste or type the portion of the assignment resource ID located earlier. När sökningen är klar klickar du på objektet med samma namn och välj ID och klicka på spara.Once the search completes, click the object with the same name to select ID and click Save.

Skapa en uppgift för reparationCreate 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 finns informationen tillhandahålls på den reparation sidan.When non-compliant resources are found, the details are provided on the Remediation page. Tillsammans med i listan över principer som har icke-kompatibla resurser är alternativet för att utlösa en reparation uppgift.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.

Skapa en reparation uppgiften, Följ dessa steg:To create a remediation task, follow these steps:

  1. Starta Azure Policy-tjänsten i Azure Portal genom att klicka på Alla tjänster och sedan söka efter och välja Princip.Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

    Sök efter princip i alla tjänster

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

    Välj reparation på princip Sidan

  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. Klicka på en princip med resurser som är icke-kompatibla.Click on a policy with resources that are non-compliant. Den ny reparation uppgift öppnas.The New remediation task page opens.

    Anteckning

    Ett annat sätt att öppna den reparation uppgift är att hitta och klicka på principen från den efterlevnad sidan och klicka sedan på den skapa reparation uppgift knappen.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. På den ny reparation uppgift sidan, filtrera resurser för att åtgärda problemet med hjälp av den omfång ellipserna att välja underordnade resurser från där principen tilldelas (inklusive till enskild 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). Dessutom kan använda den platser listrutan filtreras ytterligare resurser.Additionally, use the Locations drop-down to further filter the resources. Endast de resurser som anges i tabellen ska åtgärdas.Only resources listed in the table will be remediated.

    Åtgärda – Välj vilka resurser som ska åtgärdas

  5. Starta reparation aktiviteten när resurserna som har filtrerats genom att klicka på reparera.Begin the remediation task once the resources have been filtered by clicking Remediate. Öppnar sidan principer för efterlevnad för den reparation uppgifter flik för att visa tillståndet för uppgifter förloppet.The policy compliance page will open to the Remediation tasks tab to show the state of the tasks progress.

    Åtgärds förlopp för reparations åtgärder

  6. Klicka på den reparation uppgift från sidan princip för efterlevnad för att få information om förloppet.Click on the remediation task from the policy compliance page to get details about the progress. Filtrering 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. Från den reparation uppgift högerklickar du på en resurs för att visa antingen reparation 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 klickar du på relaterade händelser du vill ha information, till exempel ett felmeddelande.At the end of the row, click on Related events to see details such as an error message.

    Åtgärda - resurs snabbmenyn för uppgift

Resurser som distribueras via en reparation uppgift läggs till i distribuerade resurser fliken på policysidan för efterlevnad.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

Om du vill skapa en reparations uppgift med Azure CLI använder du az policy remediation-kommandon.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 aktivitet 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.

Nästa stegNext steps