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 parametrarnas värden för den gruppen med resurser vid tilldelningstiden, vilket gör det möjligt att återanvända principdefinitioner som hanterar samma resursegenskaper med olika efterlevnadsbehov.

Kommentar

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

Du använder JavaScript Object Notation (JSON) 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 i 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 maximal längd på 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 organisationen 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): Universal ISO 8601 DateTime-formatet 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 omfånget för parametern 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 någon.

  • updatedOn (sträng): Universal ISO 8601 DateTime-formatet för tilldelningens uppdateringstid, 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 verkan manual . 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

Den valfria resourceSelectors egenskapen 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 på specifikationerna i resursväljarna. Resursväljare kan också användas 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 ä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 lagts till i SDPRegions-väljaren . Observera att I det här exemplet innebär SDP att Valv 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 tillämpas på principtilldelningen ska utvärderas för efterlevnad.

    • 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: Den här egenskapen 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: Den här egenskapen används för att välja resurser baserat på deras typ.

      • resourceWithoutLocation: Den här egenskapen 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 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 den 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ång utvärderas när de uppfyller någon av dessa resursväljare.

Åsidosättningar

Med den valfria overrides egenskapen 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.

Vi tittar på ett exempel. Anta att du har ett principinitiativ med namnet CostManagement som innehåller en anpassad principdefinition medpolicyDefinitionReferenceId corpVMSizePolicy och en enda effekt av audit. Anta att du vill tilldela CostManagement-initiativet , men ännu inte vill se efterlevnad som rapporterats för den här principen. Den här principens granskningseffekt kan ersättas med "inaktiverad" genom en åsidosättning för initiativtilldelningen, som du ser i följande exempel:

{
    "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 omfånget för åsidosättningen. Det tillåtna värdet för kind: policyEffect är:

      • policyDefinitionReferenceId: Detta anger vilka principdefinitioner i en initiativtilldelning som ska ha effekt åsidosättningen.
    • in: Listan över tillåtna värden för 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 den 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 anpassas till säkra distributionsmetoder. enforcementMode skiljer sig från effekten Inaktiverad , eftersom den effekten förhindrar att resursutvärdering sker 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 att distribueraIfNotExists-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 för att aktivera 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.

Kommentar

En exkluderad resurs skiljer sig från en undantagen resurs. Mer information finns i Förstå omfång 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 ett tillägg till standardfelmeddelandet för inkompatibilitet och är valfritt.

Viktigt!

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

"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 parametrarna 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 suffix - LC. Samma principdefinition kan återanvändas med en annan uppsättning parametrar för en annan avdelning, vilket minskar dupliceringen och komplexiteten i principdefinitioner samtidigt som flexibiliteten ges.

Identitet

För principtilldelningar med effekt inställd på att distribueraIfNotExist eller ändra måste den ha en identitetsegenskap för att utföra reparation på icke-kompatibla resurser. När du använder identitet måste användaren också ange en plats för tilldelningen.

Kommentar

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