Tilldelningsstruktur i Azure Policy

Principtilldelningar används av Azure Policy för att definiera vilka resurser som tilldelas vilka principer eller initiativ. Principtilldelningen kan fastställa värdena för parametrarna för den resursgruppen vid tilldelningstiden, vilket gör det möjligt att återanvända principdefinitioner som hanterar samma resursegenskaper med olika efterlevnadsbehov.

Anteckning

Mer information om Azure Policy omfång finns i Förstå omfång i Azure Policy.

Du använder JSON (JavaScript Object Notation) för att skapa en principtilldelning. Principtilldelningen innehåller element för:

Följande JSON visar till exempel en principtilldelning i DoNotEnforce-läge med dynamiska parametrar:

{
    "properties": {
        "displayName": "Enforce resource naming rules",
        "description": "Force resource names to begin with DeptA and end with -LC",
        "metadata": {
            "assignedBy": "Cloud Center of Excellence"
        },
        "enforcementMode": "DoNotEnforce",
        "notScopes": [],
        "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
        "nonComplianceMessages": [
            {
                "message": "Resource names must start with 'DeptA' and end with '-LC'."
            }
        ],
        "parameters": {
            "prefix": {
                "value": "DeptA"
            },
            "suffix": {
                "value": "-LC"
            }
        },
        "identity": {
            "type": "SystemAssigned"
        },
        "resourceSelectors": [],
        "overrides": []
    }
}

Alla Azure Policy exempel finns på Azure Policy exempel.

Visningsnamn och beskrivning

Du använder displayName och beskrivning för att identifiera principtilldelningen och ange kontext för dess användning med den specifika uppsättningen resurser. displayName har en maximal längd på 128 tecken och en beskrivning på högst 512 tecken.

Metadata

Den valfria metadata egenskapen lagrar information om principtilldelningen. Kunder kan definiera alla egenskaper och värden som är användbara för deras organisation i metadata. Det finns dock några vanliga egenskaper som används av Azure Policy. Varje metadata egenskap har en gräns på 1 024 tecken.

Vanliga metadataegenskaper

  • assignedBy (sträng): Det egna namnet på säkerhetsobjektet som skapade tilldelningen.

  • createdBy (sträng): GUID för säkerhetsobjektet som skapade tilldelningen.

  • createdOn (sträng): Formatet Universal ISO 8601 DateTime för tilldelningens skapandetid.

  • parameterScopes (objekt): En samling nyckel/värde-par där nyckeln matchar ett strongType-konfigurerat parameternamn och värdet definierar resursomfånget som används i portalen för att tillhandahålla listan över tillgängliga resurser genom att matcha strongType. Portalen anger det här värdet om omfånget skiljer sig från tilldelningsomfånget. Om det anges anger en redigering av principtilldelningen i portalen automatiskt parameterns omfång till det här värdet. Omfånget är dock inte låst till värdet och kan ändras till ett annat omfång.

    Följande exempel parameterScopes är för en strongType-parameter med namnet backupPolicyId som anger ett omfång för resursval när tilldelningen redigeras i portalen.

    "metadata": {
        "parameterScopes": {
            "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}"
        }
    }
    
  • updatedBy (sträng): Det egna namnet på säkerhetsobjektet som uppdaterade tilldelningen, om sådan finns.

  • updatedOn (sträng): Universal ISO 8601 DateTime-formatet för tilldelningsuppdateringstiden, om det finns några.

  • evidenceStorages (objekt): Det rekommenderade standardlagringskontot som ska användas för att lagra bevis för attesteringar till principtilldelningar med en manual effekt. Egenskapen displayName är namnet på lagringskontot. Egenskapen evidenceStorageAccountID är resurs-ID för lagringskontot. Egenskapen evidenceBlobContainer är namnet på blobcontainern där du planerar att lagra bevisen.

    {
      "properties": {
        "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}",
        "metadata": {
          "evidenceStorages": [
            {
              "displayName": "Default evidence storage",
              "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}",
              "evidenceBlobContainer": "evidence-container"
            }
          ]
        }
      }
    }
    

Resursväljare (förhandsversion)

Den valfria egenskapen resourceSelectors underlättar säkra distributionsmetoder (SDP) genom att du gradvis kan distribuera principtilldelningar baserat på faktorer som resursplats, resurstyp eller om en resurs har en plats. När resursväljare används utvärderar Azure Policy endast resurser som är tillämpliga för specifikationerna i resursväljarna. Resursväljare kan också utnyttjas för att begränsa omfattningen av undantag på samma sätt.

I följande exempelscenario utvärderas den nya principtilldelningen endast om resursens plats antingen är USA, östra eller USA, västra.

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

När du är redo att utöka utvärderingsomfånget för principen behöver du bara ändra tilldelningen. I följande exempel visas vår principtilldelning med ytterligare två Azure-regioner som har lagts till i SDPRegions-väljaren . Observera att I det här exemplet innebär SDPsäker distributionspraxis:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus", "centralus", "southcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

Resursväljare har följande egenskaper:

  • name: Namnet på resursväljaren.

  • selectors: (Valfritt) Egenskapen som används för att avgöra vilken delmängd av resurser som ska användas för principtilldelningen bör utvärderas för kompatibilitet.

    • kind: Egenskapen för en väljare som beskriver vilken egenskap som begränsar uppsättningen utvärderade resurser. Varje typ kan bara användas en gång i en enskild resursväljare. Tillåtna värden är:

      • resourceLocation: Detta används för att välja resurser baserat på deras typ. Det går inte att använda i samma resursväljare som resourceWithoutLocation.

      • resourceType: Detta används för att välja resurser baserat på deras typ.

      • resourceWithoutLocation: Detta används för att välja resurser på prenumerationsnivå som inte har någon plats. Stöder för närvarande endast subscriptionLevelResources. Det går inte att använda i samma resursväljare som resourceLocation.

    • in: Listan över tillåtna värden för den angivna kind. Det går inte att använda med notIn. Kan innehålla upp till 50 värden.

    • notIn: Listan över värden som inte tillåts för angivna kind. Det går inte att använda med in. Kan innehålla upp till 50 värden.

En resursväljare kan innehålla flera väljare. För att kunna tillämpas på en resursväljare måste en resurs uppfylla de krav som anges av alla dess väljare. Dessutom kan upp till 10 resursväljare anges i en enda tilldelning. Resurser inom omfånget utvärderas när de uppfyller någon av dessa resursväljare.

Åsidosättningar (förhandsversion)

Med egenskapen valfria åsidosättningar kan du ändra effekten av en principdefinition utan att ändra den underliggande principdefinitionen eller använda en parametriserad effekt i principdefinitionen.

Det vanligaste användningsfallet för åsidosättningar är principinitiativ med ett stort antal associerade principdefinitioner. I den här situationen kan hantering av flera principeffekter förbruka betydande administrativt arbete, särskilt när effekten måste uppdateras då och då. Åsidosättningar kan användas för att samtidigt uppdatera effekterna av flera principdefinitioner inom ett initiativ.

Låt oss ta en titt på ett exempel. Anta att du har ett principinitiativ med namnet CostManagement som innehåller en anpassad principdefinition med policyDefinitionReferenceIdcorpVMSizePolicy och en enda effekt av audit. Anta att du vill tilldela CostManagement-initiativet , men vill ännu inte se att efterlevnaden har rapporterats för den här principen. Den här principens "granskningseffekt" kan ersättas med "inaktiverad" genom en åsidosättning för initiativtilldelningen, enligt nedan:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
        "overrides": [
            {
                "kind": "policyEffect",
                "value": "disabled",
                "selectors": [
                    {
                        "kind": "policyDefinitionReferenceId",
                        "in": [ "corpVMSizePolicy" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "CostManagement"
}

Åsidosättningar har följande egenskaper:

  • kind: Egenskapen som tilldelningen åsidosätter. Den typ som stöds är policyEffect.

  • value: Det nya värdet som åsidosätter det befintliga värdet. De värden som stöds är effekter.

  • selectors: (Valfritt) Egenskapen som används för att avgöra vilken omfattning principtilldelningen ska ha på åsidosättningen.

    • kind: Egenskapen för en väljare som beskriver vilken egenskap som begränsar åsidosättningens omfång. Tillåtet värde för kind: policyEffect är:

      • policyDefinitionReferenceId: Detta anger vilka principdefinitioner inom en initiativtilldelning som ska ha effekt åsidosättningen.
    • in: Listan över tillåtna värden för den angivna kind. Det går inte att använda med notIn. Kan innehålla upp till 50 värden.

    • notIn: Listan över värden som inte tillåts för angivna kind. Det går inte att använda med in. Kan innehålla upp till 50 värden.

Observera att en åsidosättning kan användas för att ersätta effekten av många principer genom att ange flera värden i matrisen policyDefinitionReferenceId. En enda åsidosättning kan användas för upp till 50 policyDefinitionReferenceIds, och en enskild principtilldelning kan innehålla upp till 10 åsidosättningar, utvärderas i den ordning de anges. Innan tilldelningen skapas verifieras den effekt som väljs i åsidosättningen mot principregeln och listan över tillåtna parametervärden (i de fall då effekten parametriseras).

Tvingande läge

Egenskapen enforcementMode ger kunderna möjlighet att testa resultatet av en princip på befintliga resurser utan att initiera principeffekten eller utlösa poster i Azure-aktivitetsloggen.

Det här scenariot kallas ofta "What If" och överensstämmer med säkra distributionsmetoder. enforcementMode skiljer sig från effekten Inaktiverad eftersom den effekten förhindrar att resursutvärderingen görs alls.

Den här egenskapen har följande värden:

Läge JSON-värde Typ Åtgärda manuellt Post i aktivitetslogg Description
Enabled Standardvärde sträng Ja Ja Principeffekten framtvingas när resursen skapas eller uppdateras.
Inaktiverad DoNotEnforce sträng Ja Inga Principeffekten framtvingas när resursen skapas eller uppdateras.

Om enforcementMode inte anges i en princip- eller initiativdefinition används värdet Standard . Reparationsåtgärder kan startas för deployIfNotExists-principer , även när enforcementMode är inställt på DoNotEnforce.

Undantagna omfång

Tilldelningens omfattning omfattar alla underordnade resurscontainrar och underordnade resurser. Om en underordnad resurscontainer eller underordnad resurs inte ska ha definitionen tillämpad kan var och en undantas från utvärderingen genom att ange notScopes. Den här egenskapen är en matris som gör det möjligt att exkludera en eller flera resurscontainrar eller resurser från utvärdering. notScopes kan läggas till eller uppdateras när den första tilldelningen har skapats.

Anteckning

En undantagen resurs skiljer sig från en undantagen resurs. Mer information finns i Förstå omfånget i Azure Policy.

Principdefinitions-ID

Det här fältet måste vara det fullständiga sökvägsnamnet för antingen en principdefinition eller en initiativdefinition. policyDefinitionId är en sträng och inte en matris. Det senaste innehållet i den tilldelade principdefinitionen eller initiativet hämtas varje gång principtilldelningen utvärderas. Vi rekommenderar att du använder ett initiativ i stället om flera principer ofta tilldelas tillsammans.

Icke-efterlevnadsmeddelanden

Om du vill ange ett anpassat meddelande som beskriver varför en resurs inte är kompatibel med princip- eller initiativdefinitionen anger du nonComplianceMessages i tilldelningsdefinitionen. Den här noden är en matris med message poster. Det här anpassade meddelandet är utöver standardfelmeddelandet för inkompatibilitet och är valfritt.

Viktigt

Anpassade meddelanden för inkompatibilitet stöds endast för definitioner eller initiativ med definitioner av Resource Manager lägen.

"nonComplianceMessages": [
    {
        "message": "Default message"
    }
]

Om tilldelningen är för ett initiativ kan olika meddelanden konfigureras för varje principdefinition i initiativet. Meddelandena använder värdet policyDefinitionReferenceId som konfigurerats i initiativdefinitionen. Mer information finns i egenskaper för principdefinitioner.

"nonComplianceMessages": [
    {
        "message": "Default message"
    },
    {
        "message": "Message for just this policy definition by reference ID",
        "policyDefinitionReferenceId": "10420126870854049575"
    }
]

Parametrar

Det här segmentet av principtilldelningen innehåller värdena för de parametrar som definierats i principdefinitionen eller initiativdefinitionen. Den här designen gör det möjligt att återanvända en princip- eller initiativdefinition med olika resurser, men söka efter olika affärsvärden eller resultat.

"parameters": {
    "prefix": {
        "value": "DeptA"
    },
    "suffix": {
        "value": "-LC"
    }
}

I det här exemplet är prefix de parametrar som tidigare definierats i principdefinitionen och suffix. Den här specifika principtilldelningen anges prefix till DeptA och suffixtill -LC. Samma principdefinition kan återanvändas med en annan uppsättning parametrar för en annan avdelning, vilket minskar dupliceringen och komplexiteten för principdefinitioner samtidigt som den ger flexibilitet.

Identitet

För principtilldelningar som har angetts för att distribueraIfNotExist eller ändra måste du ha en identitetsegenskap för att utföra åtgärder på icke-kompatibla resurser. När du använder identitet måste användaren också ange en plats för tilldelningen.

Anteckning

En enskild principtilldelning kan bara associeras med en system- eller användartilldelad hanterad identitet. Den identiteten kan dock tilldelas mer än en roll om det behövs.

# System-assigned identity
 "identity": {
    "type": "SystemAssigned"
  }
# User-assigned identity
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/SubscriptionID/resourceGroups/testResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
    }
  },

Nästa steg