Å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. Du kan åtgärda detta 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 åtgärdssäkerhet

När Azure Policy kör mallen i principdefinitionen deployIfNotExists, gör den det med hjälp av en hanterad identitet. Azure Policy skapar en hanterad identitet för varje tilldelning, men måste ha information om vilka roller som ska tilldelas den hanterade identiteten. Om den hanterade identiteten saknar roller visas ett fel under tilldelningen av principen eller ett initiativ. När du använder portalen Azure Policy den hanterade identiteten de angivna rollerna när tilldelningen startar. När du använder SDK måste rollerna beviljas manuellt till den hanterade identiteten. Platsen för den hanterade identiteten påverkar inte dess åtgärd med Azure Policy.

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

Viktigt

I följande scenarier måste tilldelningens hanterade identitet beviljas åtkomst manuellt, annars misslyckas reparationsdistributionen:

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

Konfigurera principdefinition

Det första steget är att definiera de roller som deployIfNotExists och ändra behöver i principdefinitionen för att distribuera innehållet i den inkluderade mallen. Under informationsegenskapen lägger du till en roleDefinitionIds-egenskap. 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 rollnamn. 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'

Konfigurera den hanterade identiteten manuellt

När du skapar en tilldelning med hjälp av Azure Policy både den hanterade identiteten och ger den de roller som definierats i roleDefinitionIds. I följande villkor måste steg för att skapa den hanterade identiteten och tilldela den behörigheter göras manuellt:

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

Skapa hanterad identitet med PowerShell

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

# 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

Variabeln $assignment innehåller nu huvudnamns-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 .

Bevilja definierade roller med PowerShell

Den nya hanterade identiteten måste slutföra replikeringen Azure Active Directory innan den kan beviljas de nödvändiga rollerna. När replikeringen är klar itererar följande exempel principdefinitionen i för $policyDef roleDefinitionIds och använder New-AzRoleAssignment för att ge 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 definierade roller via portalen

Det finns två sätt att ge 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 tjänsten Azure Policy 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. Hitta 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 tilldelningsresurs-ID:t, som finns 2802056bfc094dfb95d4d7a5 i det här exemplet. Kopiera den här delen av tilldelningsresurs-ID:t.

  5. Gå till resursen eller den överordnade containern för resurser (resursgrupp, prenumeration, hanteringsgrupp) som behöver rolldefinitionen manuellt tillagd.

  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 roleDefinitionIds från principdefinitionen. Låt Tilldela åtkomst vara kvar på standardinställningen "Azure AD-användare, -grupp eller -program". I rutan Välj klistrar du in eller skriver in delen av tilldelningsresurs-ID:t som finns tidigare. När sökningen är klar väljer du objektet med samma namn för att välja ID och väljer Spara.

Skapa en reparationsuppgift

Skapa en reparationsuppgift via portalen

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

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

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

    Skärmbild av sökning efter princip i Alla tjänster.

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

    Skärmbild av noden Reparation på sidan Princip.

  3. Alla deployIfNotExists och ändra principtilldelningar med icke-kompatibla resurser finns på fliken Principer för att åtgärda och datatabellen. Välj en princip med resurser som inte är kompatibla. Sidan Ny reparationsuppgift öppnas.

    Anteckning

    Ett annat sätt att öppna sidan reparationsaktivitet är att söka efter och välja principen på sidan Efterlevnad och sedan välja knappen Skapa reparationsuppgift.

  4. På sidan Ny reparationsaktivitet filtrerar du de resurser som ska åtgärdas med hjälp av omfångsellipsen för att välja underordnade resurser som principen är tilldelad från (inklusive ned till de enskilda resursobjekten). Använd dessutom listrutan Platser för att filtrera resurserna ytterligare. Endast resurser som anges i tabellen kommer att åtgärdas.

    Skärmbild av noden Åtgärda och rutnätet med resurser som ska åtgärdas.

  5. Starta reparationsaktiviteten när resurserna har filtrerats genom att välja Åtgärda. Sidan för principefterlevnad öppnas på fliken Reparationsåtgärder för att visa status för aktiviteternas förlopp. Distributioner som skapats av reparationsaktiviteten börjar direkt.

    Skärmbild av fliken Reparationsåtgärder och förloppet för befintliga reparationsåtgärder.

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

  7. På sidan Reparationsaktivitet väljer du och håller ned (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.

    Skärmbild av snabbmenyn för en resurs på fliken Åtgärda uppgift.

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

Skapa en reparationsuppgift via Azure CLI

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

Skapa en reparationsuppgift via Azure PowerShell

Om du vill skapa en reparationsuppgift med Azure PowerShell använder du Start-AzPolicyRemediation kommandona . Ersätt {subscriptionId} med ditt prenumerations-ID {myAssignmentId} och 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 reparations-cmdlets och exempel finns i modulen Az.PolicyInsights.

Skapa en reparationsuppgift 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 modify-effekt, erbjuder guiden på fliken Reparation alternativet Skapa en reparationsaktivitet. Om det här alternativet är markerat skapas en reparationsuppgift samtidigt som principtilldelningen.

Nästa steg