Åtgärda icke-kompatibla resurser med Azure Policy

Resurser som inte är kompatibla med en deployIfNotExists - eller ändringsprincip kan försättas i ett kompatibelt tillstånd via Reparation. Reparationen utförs genom att instruera Azure Policy att köra effekten deployIfNotExists eller ändra åtgärderna för den tilldelade principen på dina befintliga resurser och prenumerationer, oavsett om tilldelningen är till en hanteringsgrupp, en prenumeration, en resursgrupp eller en enskild resurs. Den här artikeln visar de steg som krävs för att förstå och utföra åtgärder med Azure Policy.

Så här fungerar reparationssäkerhet

När Azure Policy startar en malldistribution när du utvärderar deployIfNotExists-principer eller ändrar en resurs när du utvärderar ändra principer, gör den det med hjälp av en hanterad identitet som är associerad med principtilldelningen. Principtilldelningar kan antingen använda en systemtilldelad hanterad identitet som skapas av principtjänsten eller en användartilldelad identitet som tillhandahålls av användaren. Den hanterade identiteten måste tilldelas de minsta roller som krävs för att åtgärda resurser. Om den hanterade identiteten saknar roller visas ett fel under tilldelningen av principen eller ett initiativ. När du använder portalen beviljar Azure Policy automatiskt den hanterade identiteten de angivna rollerna när tilldelningen startar. När du använder SDK måste rollerna manuellt beviljas till den hanterade identiteten. Platsen för den hanterade identiteten påverkar inte dess åtgärd med Azure Policy.

Screenshot of a policy assignment creating a system assigned managed identity in East US with Log Analytics Contributor permissions.

Viktigt

I följande scenarier måste tilldelningens hanterade identitet beviljas manuellt eller så misslyckas reparationsdistributionen:

  • Om tilldelningen skapas via SDK
  • Om en resurs som har ändrats av deployIfNotExists eller ändrar ligger utanför principtilldelningens omfång
  • Om mallen har åtkomst till egenskaper för resurser utanför principtilldelningens omfång

Om du ändrar en principdefinition uppdateras inte tilldelningen eller den associerade hanterade identiteten.

Konfigurera principdefinition

Det första steget är att definiera de roller som distribuerarIfNotExists och ändrar behov i principdefinitionen för att distribuera innehållet i den inkluderade mallen. Under informationsegenskapen i principdefinitionen lägger du till egenskapen roleDefinitionIds . Den här egenskapen är en matris med strängar som matchar roller i din miljö. Ett fullständigt exempel finns i exemplet deployIfNotExists eller ändra exemplen.

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

Egenskapen roleDefinitionIds använder den fullständiga resursidentifieraren och tar inte rollens korta roleName . Använd följande kod för att hämta ID:t för rollen Deltagare i din miljö:

az role definition list --name "Contributor"

Viktigt

Behörigheter bör begränsas till minsta möjliga uppsättning när du definierar roleDefinitionIds i en principdefinition eller tilldelar behörigheter till en hanterad identitet manuellt. Mer metodtips finns i rekommendationer för bästa praxis för hanterade identiteter .

Konfigurera den hanterade identiteten manuellt

När du skapar en tilldelning med hjälp av portalen kan Azure Policy både generera en hanterad identitet och ge den rollerna som definierats i roleDefinitionIds. I följande villkor måste stegen för att skapa den hanterade identiteten och tilldela den behörigheter utföras manuellt:

  • När du använder SDK :t (till exempel Azure PowerShell)
  • När en resurs utanför tilldelningsomfånget ändras av mallen
  • När en resurs utanför tilldelningsomfånget läss av mallen

Konfigurera en hanterad identitet via Azure Portal

När du skapar en tilldelning med hjälp av portalen kan du välja antingen en systemtilldelad hanterad identitet eller en användartilldelad hanterad identitet.

Så här anger du en systemtilldelad hanterad identitet i portalen:

  1. På fliken Reparation i vyn skapa/redigera tilldelning under Typer av hanterad identitet kontrollerar du att Systemtilldelad hanterad identitet har valts.

  2. Ange den plats där den hanterade identiteten ska finnas.

Så här anger du en användartilldelad hanterad identitet i portalen:

  1. På fliken Reparation i vyn skapa/redigera tilldelning, under Typer av hanterad identitet, kontrollerar du att Användartilldelad hanterad identitet har valts.

  2. Ange omfånget där den hanterade identiteten finns. Omfånget för den hanterade identiteten behöver inte motsvara tilldelningens omfång, men det måste finnas i samma klientorganisation.

  3. Under Befintliga användartilldelade identiteter väljer du den hanterade identiteten.

    Anteckning

    Om den hanterade identiteten inte har de behörigheter som krävs för att köra den nödvändiga reparationsuppgiften beviljas den endast behörigheter automatiskt via portalen. För alla andra metoder måste behörigheter konfigureras manuellt.

Skapa hanterad identitet med PowerShell

Om du vill skapa en identitet under tilldelningen av principen måste Plats definieras och identitet användas. I följande exempel hämtas definitionen av den inbyggda principen Distribuera SQL DB transparent datakryptering anger målresursgruppen och skapar sedan tilldelningen med hjälp av en systemtilldelad hanterad identitet.

# 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 -Identity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -IdentityType "SystemAssigned"

I följande exempel hämtas definitionen av den inbyggda principen Distribuera SQL DB transparent datakryptering, anger målresursgruppen och skapar sedan tilldelningen med hjälp av en användartilldelad hanterad identitet.

# 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'

# Get the existing user assigned managed identity ID
$userassignedidentity = Get-AzUserAssignedIdentity -ResourceGroupName $rgname -Name $userassignedidentityname 
$userassignedidentityid = $userassignedidentity.Id

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

Variabeln $assignment innehåller nu huvud-ID:t för den hanterade identiteten tillsammans med de standardvärden som returneras när du skapar en principtilldelning. Den kan nås via $assignment.Identity.PrincipalId för systemtilldelade hanterade identiteter och $assignment.Identity.UserAssignedIdentities[$userassignedidentityid].PrincipalId för användartilldelade hanterade identiteter.

Bevilja en hanterad identitetsdefinierade roller med PowerShell

Den nya hanterade identiteten måste slutföra replikeringen via Azure Active Directory innan den kan beviljas de roller som behövs. När replikeringen är klar itererar följande exempel principdefinitionen i $policyDef för roleDefinitionIds och använder New-AzRoleAssignment för att bevilja den nya hanterade identiteten rollerna.

# 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 en hanterad identitetsdefinierade roller via portalen

Det finns två sätt att bevilja en tilldelnings hanterade identitet de definierade rollerna med hjälp av portalen, genom att använda Åtkomstkontroll (IAM) eller genom att redigera princip- eller initiativtilldelningen och välja Spara.

Följ dessa steg om du vill lägga till en roll i tilldelningens hanterade identitet:

  1. Starta Azure Policy-tjänsten i Azure Portal genom att välja Alla tjänster och sedan söka efter och välja Princip.

  2. Välj Tilldelningar till vänster på sidan Azure Policy.

  3. Leta upp tilldelningen som har en hanterad identitet och välj namnet.

  4. Leta reda på egenskapen Tilldelnings-ID på redigeringssidan. Tilldelnings-ID:t ser ut ungefär så här:

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

    Namnet på den hanterade identiteten är den sista delen av tilldelningens resurs-ID, som finns 2802056bfc094dfb95d4d7a5 i det här exemplet. Kopiera den här delen av tilldelningens resurs-ID.

  5. Gå till resursen eller den överordnade resurscontainern (resursgrupp, prenumeration, hanteringsgrupp) som behöver rolldefinitionen manuellt.

  6. Välj länken Åtkomstkontroll (IAM) på resurssidan och välj sedan + Lägg till rolltilldelning överst på åtkomstkontrollsidan.

  7. Välj lämplig roll som matchar en roleDefinitionIds från principdefinitionen. Låt Tilldela åtkomst vara inställt på standardvärdet "Azure AD-användare, grupp eller program". I rutan Välj klistrar du in eller skriver in den del av tilldelningsresurs-ID:t som fanns tidigare. När sökningen är klar väljer du objektet med samma namn för att välja ID och sedan Spara.

Skapa en reparationsuppgift

I följande avsnitt beskrivs hur du skapar en reparationsuppgift.

Skapa en reparationsuppgift via portalen

Under utvärderingen avgör principtilldelningen med deployIfNotExists eller ändringseffekter om det finns icke-kompatibla resurser eller prenumerationer. När icke-kompatibla resurser eller prenumerationer hittas finns informationen på sidan Reparation . Tillsammans med listan över principer som har icke-kompatibla resurser eller prenumerationer är alternativet att utlösa en reparationsaktivitet. Det här alternativet är det som skapar en distribution från mallen deployIfNotExists eller ändringsåtgärderna .

Följ dessa steg om du vill skapa en reparationsuppgift:

  1. Starta Azure Policy-tjänsten i Azure Portal genom att välja Alla tjänster och sedan söka efter och välja Princip.

    Screenshot of searching for Policy in All Services.

  2. Välj Reparation till vänster på sidan Azure Policy.

    Screenshot of the Remediation node on the Policy page.

  3. Alla deployIfNotExists och ändra principtilldelningar med icke-kompatibla resurser ingår i fliken Principer för att åtgärda flikar och datatabeller. Välj en princip med resurser som inte är kompatibla. Sidan Ny reparationsaktivitet öppnas.

    Anteckning

    Ett annat sätt att öppna åtgärdsaktivitetssidan är att hitta och välja principen på sidan Efterlevnad och sedan välja knappen Skapa reparationsaktivitet .

  4. På sidan Ny reparationsaktivitet visas valfria reparationsinställningar:

    • Tröskelvärde för fel – Används för att ange om reparationsaktiviteten ska misslyckas om procentandelen fel överskrider det angivna tröskelvärdet. Anges som ett tal mellan 0 och 100. Som standard är tröskelvärdet för fel 100 %.
    • Antal resurser – Avgör hur många icke-kompatibla resurser som ska åtgärdas i en viss reparationsuppgift. Standardvärdet är 500 (den tidigare gränsen). Det maximala antalet är 50 000 resurser.
    • Parallella distributioner – Avgör hur många resurser som ska åtgärdas samtidigt. De tillåtna värdena är mellan 1 och 30 resurser åt gången. Standardvärdet är 10.

    Anteckning

    Det går inte att ändra de här inställningarna när reparationsåtgärden har startats.

  5. På samma sida filtrerar du de resurser som ska åtgärdas med hjälp av omfångsellipserna för att välja underordnade resurser där principen tilldelas (inklusive ned till de enskilda resursobjekten). Du kan också använda listrutan Platser för att filtrera resurserna ytterligare.

    Screenshot of the Remediate node and the grid of resources to remediate.

  6. Påbörja reparationsåtgärden när resurserna har filtrerats genom att välja Åtgärda. Sidan principefterlevnad öppnas på fliken Reparationsuppgifter för att visa status för aktiviteternas förlopp. Distributioner som skapas av reparationsuppgiften påbörjas direkt.

    Screenshot of the Remediation tasks tab and progress of existing remediation tasks.

  7. Välj åtgärdsuppgiften på sidan principefterlevnad för att få information om förloppet. Filtreringen som används för uppgiften visas tillsammans med status och en lista över resurser som åtgärdas.

  8. På sidan Reparationsaktivitet väljer du och håller kvar (eller högerklickar) på en resurs för att visa antingen reparationsaktivitetens distribution eller resursen. I slutet av raden väljer du Relaterade händelser för att se information, till exempel ett felmeddelande.

    Screenshot of the context menu for a resource on the Remediate task tab.

Resurser som distribueras via en reparationsaktivitet läggs till på fliken Distribuerade resurser på sidan principefterlevnad.

Skapa en reparationsuppgift via Azure CLI

Använd kommandona för az policy remediation att skapa en reparationsuppgift med Azure CLI. Ersätt {subscriptionId} med ditt prenumerations-ID och {myAssignmentId} med ditt deployIfNotExists eller ändra principtilldelnings-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 reparationskommandon och exempel finns i az policy remediation-kommandon .

Skapa en reparationsuppgift via Azure PowerShell

Använd kommandona för Start-AzPolicyRemediation att skapa en reparationsuppgift med Azure PowerShell. Ersätt {subscriptionId} med ditt prenumerations-ID och {myAssignmentId} med ditt deployIfNotExists eller ändra principtilldelnings-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 cmdletar och exempel för reparation finns i modulen Az.PolicyInsights .

Skapa en reparationsaktivitet under principtilldelningen i Azure Portal

Ett effektivt sätt att skapa en reparationsuppgift är att göra det från Azure Portal under principtilldelningen. Om principdefinitionen som ska tilldelas är en deployIfNotExists - eller ändringseffekt , erbjuder guiden på fliken Reparation alternativet Skapa en reparationsaktivitet . Om det här alternativet väljs skapas en reparationsaktivitet samtidigt som principtilldelningen.

Nästa steg