Förstå Azure Policy-effekter

Varje principdefinition i Azure Policy har en enda effekt. Den effekten avgör vad som händer när principregeln utvärderas så att den matchar. Effekterna fungerar annorlunda om de gäller för en ny resurs, en uppdaterad resurs eller en befintlig resurs.

Dessa effekter stöds för närvarande i en principdefinition:

Följande effekter är inaktuella:

Viktigt

I stället för effekterna EnforceOPAConstraint eller EnforceRegoPolicy använder du granskning och neka med resursproviderläge Microsoft.Kubernetes.Data. De inbyggda principdefinitionerna har uppdaterats. När befintliga principtilldelningar av dessa inbyggda principdefinitioner ändras, måste effektparametern ändras till ett värde i den uppdaterade listan allowedValues.

Utvärderingsordning

Begäranden om att skapa eller uppdatera en resurs utvärderas först av Azure Policy. Azure Policy skapar en lista över alla tilldelningar som gäller för resursen och utvärderar sedan resursen mot varje definition. För ett Resource Manager läge bearbetar Azure Policy flera av effekterna innan begäran överlämnas till lämplig resursprovider. Den här ordningen förhindrar onödig bearbetning av en resursprovider när en resurs inte uppfyller de utformade styrningskontrollerna för Azure Policy. Med ett resursproviderläge hanterar resursprovidern utvärderingen och resultatet och rapporterar resultatet tillbaka till Azure Policy.

  • Inaktiverad kontrolleras först för att avgöra om principregeln ska utvärderas.
  • Lägg till och Ändra utvärderas sedan. Eftersom någon av dem kan ändra begäran kan en ändring som görs förhindra att en gransknings- eller neka-effekt utlöses. Dessa effekter är endast tillgängliga i ett Resource Manager läge.
  • Neka utvärderas sedan. Genom att utvärdera neka före granskning förhindras dubbel loggning av en oönstrade resurs.
  • Granskning utvärderas sist.

När resursprovidern returnerar en lyckad kod för en begäran i Resource Manager läge utvärderar AuditIfNotExists och DeployIfNotExists för att avgöra om ytterligare efterlevnadsloggning eller åtgärd krävs.

Dessutom PATCH begränsar begäranden som endast ändrar tags relaterade fält principutvärderingen till principer som innehåller villkor som inspekterar tags relaterade fält.

Lägg till

Tillägg används för att lägga till ytterligare fält i den begärda resursen när den skapas eller uppdateras. Ett vanligt exempel är att ange tillåtna IP-adresser för en lagringsresurs.

Viktigt

Tillägg är avsett att användas med egenskaper som inte är taggade. Även om tillägg kan lägga till taggar till en resurs under en begäran om att skapa eller uppdatera, rekommenderar vi att du använder effekten Ändra för taggar i stället.

Tilläggsutvärdering

Tillägg utvärderas innan begäran bearbetas av en resursprovider när en resurs skapas eller uppdateras. Lägg till fält i resursen när if-villkoret för principregeln uppfylls. Om tilläggseffekten skulle åsidosätta ett värde i den ursprungliga begäran med ett annat värde fungerar den som en neka-effekt och avvisar begäran. Om du vill lägga till ett nytt värde i en befintlig matris använder du [*]- versionen av aliaset.

När en principdefinition som använder tilläggseffekten körs som en del av en utvärderingscykel, gör den inte ändringar i resurser som redan finns. I stället markeras alla resurser som uppfyller if-villkoret som icke-kompatibla.

Tilläggsegenskaper

En tilläggseffekt har bara en informationsmatris , vilket krävs. Eftersom information är en matris kan den antingen ta ett enda fält/värde-par eller multiplar. Se definitionsstrukturen för listan över godkända fält.

Tilläggsexempel

Exempel 1: Enskilt fält/värde-par med ett icke-[*]-alias med ett matrisvärde för att ange IP-regler för ett lagringskonto. När aliaset non-[*] är en matris lägger effekten till värdet som hela matrisen. Om matrisen redan finns uppstår en neka-händelse från konflikten.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
        "value": [{
            "action": "Allow",
            "value": "134.5.0.0/21"
        }]
    }]
}

Exempel 2: Enskilt fält/värde-par med ett [*]-alias med ett matrisvärde för att ange IP-regler för ett lagringskonto. Genom att använda aliaset [*] lägger effekten till värdet i en potentiellt befintlig matris. Om matrisen inte finns ännu skapas den.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]",
        "value": {
            "value": "40.40.40.40",
            "action": "Allow"
        }
    }]
}

Granska

Granskning används för att skapa en varningshändelse i aktivitetsloggen när du utvärderar en icke-kompatibel resurs, men den stoppar inte begäran.

Granskningsutvärdering

Granskning är den sista effekten som kontrolleras av Azure Policy när en resurs skapas eller uppdateras. För ett Resource Manager läge skickar Azure Policy sedan resursen till resursprovidern. När du utvärderar en begäran om att skapa eller uppdatera en resurs lägger Azure Policy till en Microsoft.Authorization/policies/audit/action åtgärd i aktivitetsloggen och markerar resursen som icke-kompatibel. Under en utvärderingscykel för standardefterlevnad uppdateras endast kompatibilitetsstatusen för resursen.

Granskningsegenskaper

För ett Resource Manager läge har granskningseffekten inga ytterligare egenskaper för användning i principdefinitionens dåvarande villkor.

För resursproviderläget Microsoft.Kubernetes.Datahar granskningseffekten följande ytterligare underegenskaper för information. Användning av templateInfo krävs för nya eller uppdaterade principdefinitioner som constraintTemplate är inaktuella.

  • templateInfo (krävs)
    • Det går inte att använda med constraintTemplate.
    • sourceType (krävs)
      • Definierar typen av källa för villkorsmallen. Tillåtna värden: PublicURL eller Base64Encoded.

      • Om PublicURL är kopplat till egenskapen url för att ange platsen för villkorsmallen. Platsen måste vara offentligt tillgänglig.

        Varning

        Använd inte SAS-URI:er eller token i url eller något annat som kan exponera en hemlighet.

      • Om Base64Encoded, parat med egenskapen content för att tillhandahålla den grundläggande 64-kodade villkorsmallen. Se Skapa principdefinition från villkorsmall för att skapa en anpassad definition från en befintlig open policy agent (OPA) GateKeeper v3-villkorsmall.

  • begränsning (inaktuell)
    • Det går inte att använda med templateInfo.
    • CRD-implementeringen av villkorsmallen. Använder parametrar som skickas via värden som {{ .Values.<valuename> }}. I exempel 2 nedan är {{ .Values.excludedNamespaces }} dessa värden och {{ .Values.allowedContainerImagesRegex }}.
  • namnområden (valfritt)
    • En matris med Kubernetes-namnrymder som principutvärderingen ska begränsas till.
    • Ett tomt eller saknat värde gör att principutvärderingen inkluderar alla namnområden, förutom de som definieras i excludedNamespaces.
  • excludedNamespaces (obligatoriskt)
  • labelSelector (krävs)
    • Ett objekt som innehåller egenskaperna matchLabels (objekt) och matchExpression (matris) så att du kan ange vilka Kubernetes-resurser som ska inkluderas för principutvärdering som matchade de angivna etiketterna och väljarna.
    • Ett tomt eller saknat värde gör att principutvärderingen inkluderar alla etiketter och väljare, förutom namnområden som definierats i excludedNamespaces.
  • apiGroups (krävs när du använder templateInfo)
    • En matris som innehåller de API-grupper som ska matchas. En tom matris ([""]) är kärn-API-gruppen.
    • Det är inte tillåtet att definiera ["*"] för apiGroups .
  • sorter (krävs när du använder templateInfo)
    • En matris som innehåller den typ av Kubernetes-objekt som utvärderingen ska begränsas till.
    • Det är inte tillåtet att definiera ["*"] för typer .
  • värden (valfritt)
    • Definierar eventuella parametrar och värden som ska skickas till villkoret. Varje värde måste finnas i villkorsmallen CRD.
  • constraintTemplate (inaktuell)
    • Det går inte att använda med templateInfo.
    • Måste ersättas med templateInfo när du skapar eller uppdaterar en principdefinition.
    • Villkorsmallen CustomResourceDefinition (CRD) som definierar nya begränsningar. Mallen definierar Rego-logiken, villkorsschemat och villkorsparametrarna som skickas via värden från Azure Policy.

Granskningsexempel

Exempel 1: Använda granskningseffekten för Resource Manager lägen.

"then": {
    "effect": "audit"
}

Exempel 2: Använda granskningseffekten för resursproviderläget Microsoft.Kubernetes.Data. Den ytterligare informationen i details.templateInfo deklarerar användningen av PublicURL och anger url platsen för villkorsmallen som ska användas i Kubernetes för att begränsa tillåtna containeravbildningar.

"then": {
    "effect": "audit",
    "details": {
        "templateInfo": {
            "sourceType": "PublicURL",
            "url": "https://store.policy.core.windows.net/kubernetes/container-allowed-images/v1/template.yaml",
        },
        "values": {
            "imageRegex": "[parameters('allowedContainerImagesRegex')]"
        },
        "apiGroups": [""],
        "kinds": ["Pod"]
    }
}

AuditIfNotExists

AuditIfNotExists möjliggör granskning av resurser som är relaterade till resursen som matchar if-villkoret , men som inte har de egenskaper som anges i informationen omvillkoret then .

AuditIfNotExists-utvärdering

AuditIfNotExists körs efter att en resursprovider har hanterat en resursbegäran om att skapa eller uppdatera och har returnerat en statuskod för lyckad åtgärd. Granskningen sker om det inte finns några relaterade resurser eller om resurserna som definieras av ExistenceCondition inte utvärderas till sant. För nya och uppdaterade resurser lägger Azure Policy till en Microsoft.Authorization/policies/audit/action åtgärd i aktivitetsloggen och markerar resursen som icke-kompatibel. När den utlöses är resursen som uppfyllde if-villkoret den resurs som är markerad som icke-kompatibel.

AuditIfNotExists-egenskaper

Informationsegenskapen för AuditIfNotExists-effekterna har alla underegenskaper som definierar de relaterade resurser som ska matchas.

  • Typ (krävs)
    • Anger vilken typ av relaterad resurs som ska matchas.
    • Om typen är en resurstyp under resursen if-villkor frågar principen efter resurser av den här typen inom omfånget för den utvärderade resursen. Annars kan principfrågor i samma resursgrupp eller prenumeration som den utvärderade resursen, beroende på existenceScope.
  • Namn (valfritt)
    • Anger det exakta namnet på resursen som ska matchas och gör att principen hämtar en specifik resurs i stället för alla resurser av den angivna typen.
    • När villkorsvärdena för if.field.type och then.details.type matchar blir Namnobligatoriskt och måste vara [field('name')], eller [field('fullName')] för en underordnad resurs. En granskningseffekt bör dock övervägas i stället.
  • ResourceGroupName (valfritt)
    • Tillåter matchning av den relaterade resursen att komma från en annan resursgrupp.
    • Gäller inte om typen är en resurs som skulle vara under resursen if-villkor .
    • Standardvärdet är resursgruppen för if-villkoret .
  • ExistenceScope (valfritt)
    • Tillåtna värden är Prenumeration och ResourceGroup.
    • Anger var du vill hämta den relaterade resursen som ska matchas från.
    • Gäller inte om typen är en resurs som skulle vara under resursen if-villkor .
    • För ResourceGroup begränsar du till if-villkorets resursgrupp eller resursgruppen som anges i ResourceGroupName.
    • För Prenumeration frågar hela prenumerationen om den relaterade resursen. Tilldelningsomfånget ska anges i prenumerationen eller högre för korrekt utvärdering.
    • Standardvärdet är ResourceGroup.
  • EvaluationDelay (valfritt)
    • Anger när förekomsten av de relaterade resurserna ska utvärderas. Fördröjningen används bara för utvärderingar som är ett resultat av en resursbegäran för att skapa eller uppdatera.
    • Tillåtna värden är AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailureeller en ISO 8601-varaktighet mellan 0 och 360 minuter.
    • Värdena för AfterProvisioning kontrollerar etableringsresultatet för resursen som utvärderades i principregelns IF-villkor. AfterProvisioning körs när etableringen är klar, oavsett resultat. Om etableringen tar längre tid än 6 timmar behandlas den som ett fel när utvärderingsfördröjningar för AfterProvisioning fastställs.
    • Standardvärdet är PT10M (10 minuter).
    • Om du anger en lång utvärderingsfördröjning kan det leda till att resursens registrerade kompatibilitetstillstånd inte uppdateras förrän nästa utvärderingsutlösare.
  • ExistenceCondition (valfritt)
    • Om inget anges uppfyller alla relaterade resurser av typen effekten och utlöser inte granskningen.
    • Använder samma språk som principregeln för if-villkoret , men utvärderas mot varje relaterad resurs individuellt.
    • Om någon matchande relaterad resurs utvärderas till sant uppfylls effekten och utlöser inte granskningen.
    • Kan använda [field()] för att kontrollera ekvivalens med värden i if-villkoret.
    • Kan till exempel användas för att verifiera att den överordnade resursen (i if-villkoret ) finns på samma resursplats som den matchande relaterade resursen.

AuditIfNotExists-exempel

Exempel: Utvärderar Virtual Machines för att avgöra om tillägget Antimalware finns och sedan granskar när det saknas.

{
    "if": {
        "field": "type",
        "equals": "Microsoft.Compute/virtualMachines"
    },
    "then": {
        "effect": "auditIfNotExists",
        "details": {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "existenceCondition": {
                "allOf": [{
                        "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                        "equals": "Microsoft.Azure.Security"
                    },
                    {
                        "field": "Microsoft.Compute/virtualMachines/extensions/type",
                        "equals": "IaaSAntimalware"
                    }
                ]
            }
        }
    }
}

Neka

Neka används för att förhindra en resursbegäran som inte matchar definierade standarder via en principdefinition och misslyckas med begäran.

Neka utvärdering

När du skapar eller uppdaterar en matchad resurs i ett Resource Manager läge förhindrar neka begäran innan den skickas till resursprovidern. Begäran returneras som en 403 (Forbidden). I portalen kan förbjudet visas som status för distributionen som förhindrades av principtilldelningen. För ett resursproviderläge hanterar resursprovidern utvärderingen av resursen.

Under utvärderingen av befintliga resurser markeras resurser som matchar en principdefinition för nekande som icke-kompatibla.

Neka egenskaper

För ett Resource Manager läge har neka-effekten inga ytterligare egenskaper för användning i principdefinitionens dåvarande villkor.

För resursproviderläget Microsoft.Kubernetes.Datahar neka-effekten följande ytterligare underegenskaper för information. Användning av templateInfo krävs för nya eller uppdaterade principdefinitioner som constraintTemplate är inaktuella.

  • templateInfo (krävs)
    • Det går inte att använda med constraintTemplate.
    • sourceType (krävs)
      • Definierar typen av källa för villkorsmallen. Tillåtna värden: PublicURL eller Base64Encoded.

      • Om PublicURL är kopplat till egenskapen url för att ange platsen för villkorsmallen. Platsen måste vara offentligt tillgänglig.

        Varning

        Använd inte SAS-URI:er eller token i url eller något annat som kan exponera en hemlighet.

      • Om Base64Encoded, parat med egenskapen content för att tillhandahålla den grundläggande 64-kodade villkorsmallen. Se Skapa principdefinition från villkorsmall för att skapa en anpassad definition från en befintlig open policy agent (OPA) GateKeeper v3-villkorsmall.

  • villkor (valfritt)
    • Det går inte att använda med templateInfo.
    • CRD-implementeringen av villkorsmallen. Använder parametrar som skickas via värden som {{ .Values.<valuename> }}. I exempel 2 nedan är {{ .Values.excludedNamespaces }} dessa värden och {{ .Values.allowedContainerImagesRegex }}.
  • namnområden (valfritt)
    • En matris med Kubernetes-namnrymder som principutvärderingen ska begränsas till.
    • Ett tomt eller saknat värde gör att principutvärderingen inkluderar alla namnområden, förutom de som definieras i excludedNamespaces.
  • excludedNamespaces (obligatoriskt)
  • labelSelector (krävs)
    • Ett objekt som innehåller egenskaperna matchLabels (objekt) och matchExpression (matris) så att du kan ange vilka Kubernetes-resurser som ska inkluderas för principutvärdering som matchade de angivna etiketterna och väljarna.
    • Ett tomt eller saknat värde gör att principutvärderingen inkluderar alla etiketter och väljare, förutom namnområden som definierats i excludedNamespaces.
  • apiGroups (krävs när du använder templateInfo)
    • En matris som innehåller de API-grupper som ska matchas. En tom matris ([""]) är kärn-API-gruppen.
    • Det är inte tillåtet att definiera ["*"] för apiGroups .
  • sorter (krävs när du använder templateInfo)
    • En matris som innehåller den typ av Kubernetes-objekt som utvärderingen ska begränsas till.
    • Det är inte tillåtet att definiera ["*"] för typer .
  • värden (valfritt)
    • Definierar eventuella parametrar och värden som ska skickas till villkoret. Varje värde måste finnas i villkorsmallen CRD.
  • constraintTemplate (inaktuell)
    • Det går inte att använda med templateInfo.
    • Måste ersättas med templateInfo när du skapar eller uppdaterar en principdefinition.
    • Villkorsmallen CustomResourceDefinition (CRD) som definierar nya begränsningar. Mallen definierar Rego-logiken, villkorsschemat och villkorsparametrarna som skickas via värden från Azure Policy. Vi rekommenderar att du använder den nyare templateInfo för att ersätta constraintTemplate.

Neka-exempel

Exempel 1: Använda neka-effekten för Resource Manager lägen.

"then": {
    "effect": "deny"
}

Exempel 2: Använda neka-effekten för ett resursproviderläge på Microsoft.Kubernetes.Data. Den ytterligare informationen i details.templateInfo deklarerar användningen av PublicURL och anger url platsen för villkorsmallen som ska användas i Kubernetes för att begränsa tillåtna containeravbildningar.

"then": {
    "effect": "deny",
    "details": {
        "templateInfo": {
            "sourceType": "PublicURL",
            "url": "https://store.policy.core.windows.net/kubernetes/container-allowed-images/v1/template.yaml",
        },
        "values": {
            "imageRegex": "[parameters('allowedContainerImagesRegex')]"
        },
        "apiGroups": [""],
        "kinds": ["Pod"]
    }
}

DeployIfNotExists

Precis som AuditIfNotExists kör en DeployIfNotExists-principdefinition en malldistribution när villkoret uppfylls. Principtilldelningar med effektuppsättningen DeployIfNotExists kräver en hanterad identitet för att utföra reparation.

Anteckning

Kapslade mallar stöds med deployIfNotExists, men länkade mallar stöds för närvarande inte.

DeployIfNotExists-utvärdering

DeployIfNotExists körs efter en konfigurerbar fördröjning när en resursprovider hanterar en skapa- eller uppdateringsprenumeration eller resursbegäran och har returnerat en statuskod för lyckad åtgärd. En malldistribution sker om det inte finns några relaterade resurser eller om resurserna som definieras av ExistenceCondition inte utvärderas till sant. Distributionens varaktighet beror på komplexiteten för de resurser som ingår i mallen.

Under en utvärderingscykel markeras principdefinitioner med en DeployIfNotExists-effekt som matchar resurser som icke-kompatibla, men ingen åtgärd vidtas för den resursen. Befintliga icke-kompatibla resurser kan åtgärdas med en reparationsuppgift.

DeployIfNotExists-egenskaper

Informationsegenskapen för effekten DeployIfNotExists har alla underegenskaper som definierar de relaterade resurser som ska matchas och malldistributionen som ska köras.

  • Typ (krävs)

    • Anger vilken typ av relaterad resurs som ska matchas.
    • Om typen är en resurstyp under resursen if-villkor frågar principen efter resurser av den här typen inom omfånget för den utvärderade resursen. Annars kan principfrågor i samma resursgrupp eller prenumeration som den utvärderade resursen, beroende på existenceScope.
  • Namn (valfritt)

    • Anger det exakta namnet på resursen som ska matchas och gör att principen hämtar en specifik resurs i stället för alla resurser av den angivna typen.
    • När villkorsvärdena för if.field.type och then.details.type matchar blir Namnobligatoriskt och måste vara [field('name')], eller [field('fullName')] för en underordnad resurs.
  • ResourceGroupName (valfritt)

    • Tillåter matchning av den relaterade resursen att komma från en annan resursgrupp.
    • Gäller inte om typen är en resurs som skulle vara under resursen if-villkor .
    • Standardvärdet är resursgruppen för if-villkoret .
    • Om en malldistribution körs distribueras den i resursgruppen för det här värdet.
  • ExistenceScope (valfritt)

    • Tillåtna värden är Prenumeration och ResourceGroup.
    • Anger var du vill hämta den relaterade resursen som ska matchas från.
    • Gäller inte om typen är en resurs som skulle vara under resursen if-villkor .
    • För ResourceGroup begränsar du till if-villkorets resursgrupp eller resursgruppen som anges i ResourceGroupName.
    • För Prenumeration frågar hela prenumerationen om den relaterade resursen. Tilldelningsomfånget ska anges i prenumerationen eller högre för korrekt utvärdering.
    • Standardvärdet är ResourceGroup.
  • EvaluationDelay (valfritt)

    • Anger när förekomsten av de relaterade resurserna ska utvärderas. Fördröjningen används bara för utvärderingar som är ett resultat av en resursbegäran för att skapa eller uppdatera.
    • Tillåtna värden är AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailureeller en ISO 8601-varaktighet mellan 0 och 360 minuter.
    • Värdena för AfterProvisioning kontrollerar etableringsresultatet för resursen som utvärderades i principregelns IF-villkor. AfterProvisioning körs när etableringen är klar, oavsett resultat. Om etableringen tar längre tid än 6 timmar behandlas den som ett fel när utvärderingsfördröjningar för AfterProvisioning fastställs.
    • Standardvärdet är PT10M (10 minuter).
    • Om du anger en lång utvärderingsfördröjning kan det leda till att resursens registrerade kompatibilitetstillstånd inte uppdateras förrän nästa utvärderingsutlösare.
  • ExistenceCondition (valfritt)

    • Om inget anges uppfyller alla relaterade resurser av typen effekten och utlöser inte distributionen.
    • Använder samma språk som principregeln för if-villkoret , men utvärderas mot varje relaterad resurs individuellt.
    • Om någon matchande relaterad resurs utvärderas till true uppfylls effekten och utlöser inte distributionen.
    • Kan använda [field()] för att kontrollera ekvivalens med värden i if-villkoret.
    • Kan till exempel användas för att verifiera att den överordnade resursen (i if-villkoret ) finns på samma resursplats som den matchande relaterade resursen.
  • roleDefinitionIds (krävs)

    • Den här egenskapen måste innehålla en matris med strängar som matchar roll-baserat roll-ID för åtkomstkontroll som är tillgängligt för prenumerationen. Mer information finns i Reparation – konfigurera principdefinitionen.
  • DeploymentScope (valfritt)

    • Tillåtna värden är Prenumeration och ResourceGroup.
    • Anger vilken typ av distribution som ska utlösas. Prenumerationen anger en distribution på prenumerationsnivå, ResourceGroup anger en distribution till en resursgrupp.
    • En platsegenskap måste anges i distributionen när du använder distributioner på prenumerationsnivå.
    • Standardvärdet är ResourceGroup.
  • Distribution (krävs)

    • Den här egenskapen bör innehålla den fullständiga malldistributionen eftersom den skickas till PUT-API:et Microsoft.Resources/deployments . Mer information finns i REST API för distributioner.
    • Kapslade Microsoft.Resources/deployments i mallen bör använda unika namn för att undvika konkurrens mellan flera principutvärderingar. Den överordnade distributionens namn kan användas som en del av det kapslade distributionsnamnet via [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Anteckning

    Alla funktioner i egenskapen Distribution utvärderas som komponenter i mallen, inte principen. Undantaget är parameteregenskapen som skickar värden från principen till mallen. Värdet i det här avsnittet under ett mallparameternamn används för att utföra det här värdet som skickas (se fullDbName i exemplet DeployIfNotExists).

DeployIfNotExists-exempel

Exempel: Utvärderar SQL Server databaser för att avgöra om transparentDataEncryption är aktiverat. Annars körs en distribution som ska aktiveras.

"if": {
    "field": "type",
    "equals": "Microsoft.Sql/servers/databases"
},
"then": {
    "effect": "DeployIfNotExists",
    "details": {
        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
        "name": "current",
        "evaluationDelay": "AfterProvisioning",
        "roleDefinitionIds": [
            "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
            "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
        ],
        "existenceCondition": {
            "field": "Microsoft.Sql/transparentDataEncryption.status",
            "equals": "Enabled"
        },
        "deployment": {
            "properties": {
                "mode": "incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {
                        "fullDbName": {
                            "type": "string"
                        }
                    },
                    "resources": [{
                        "name": "[concat(parameters('fullDbName'), '/current')]",
                        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
                        "apiVersion": "2014-04-01",
                        "properties": {
                            "status": "Enabled"
                        }
                    }]
                },
                "parameters": {
                    "fullDbName": {
                        "value": "[field('fullName')]"
                    }
                }
            }
        }
    }
}

Inaktiverad

Den här effekten är användbar för att testa situationer eller när principdefinitionen har parametriserat effekten. Den här flexibiliteten gör det möjligt att inaktivera en enskild tilldelning i stället för att inaktivera alla tilldelningar för principen.

Ett alternativ till effekten Inaktiverad är enforcementMode, som anges för principtilldelningen. När enforcementMode är Inaktiverad utvärderas fortfarande resurser. Loggning, till exempel aktivitetsloggar, och principeffekten inträffar inte. Mer information finns i principtilldelning – tvingande läge.

EnforceOPAConstraint

Den här effekten används med principdefinitionsläget .Microsoft.Kubernetes.Data Den används för att skicka Gatekeeper v3-regler för antagningskontroll som definierats med OPA Constraint Framework till Open Policy Agent (OPA) till Kubernetes-kluster i Azure.

Viktigt

De begränsade principdefinitionerna för förhandsversionen med EnforceOPAConstraint-effekten och den relaterade Kubernetes Service-kategorin är inaktuella. Använd i stället effektgranskningen och neka med resursproviderläget Microsoft.Kubernetes.Data.

EnforceOPAConstraint-utvärdering

Open Policy Agent-antagningskontrollanten utvärderar alla nya begäranden i klustret i realtid. Var 15:e minut slutförs en fullständig genomsökning av klustret och resultaten rapporteras till Azure Policy.

EnforceOPAConstraint-egenskaper

Informationsegenskapen för effekten EnforceOPAConstraint har de underegenskaper som beskriver gatekeeper v3-åtkomstkontrollregeln.

  • constraintTemplate (krävs)
    • Villkorsmallen CustomResourceDefinition (CRD) som definierar nya begränsningar. Mallen definierar Rego-logiken, villkorsschemat och villkorsparametrarna som skickas via värden från Azure Policy.
  • villkor (obligatoriskt)
    • CRD-implementeringen av villkorsmallen. Använder parametrar som skickas via värden som {{ .Values.<valuename> }}. I följande exempel är {{ .Values.cpuLimit }} dessa värden och {{ .Values.memoryLimit }}.
  • värden (valfritt)
    • Definierar eventuella parametrar och värden som ska skickas till villkoret. Varje värde måste finnas i villkorsmallen CRD.

EnforceOPAConstraint-exempel

Exempel: Gatekeeper v3-regel för antagningskontroll för att ange gränser för containerns processor- och minnesresurser i Kubernetes.

"if": {
    "allOf": [
        {
            "field": "type",
            "in": [
                "Microsoft.ContainerService/managedClusters",
                "AKS Engine"
            ]
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "enforceOPAConstraint",
    "details": {
        "constraintTemplate": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/template.yaml",
        "constraint": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/constraint.yaml",
        "values": {
            "cpuLimit": "[parameters('cpuLimit')]",
            "memoryLimit": "[parameters('memoryLimit')]"
        }
    }
}

EnforceRegoPolicy

Den här effekten används med principdefinitionsläget .Microsoft.ContainerService.Data Den används för att skicka Gatekeeper v2-regler för antagningskontroll som definierats med Rego till Open Policy Agent (OPA) på Azure Kubernetes Service.

Viktigt

De begränsade principdefinitionerna för förhandsversionen med EnforceRegoPolicy-effekten och den relaterade Kubernetes Service-kategorin är inaktuella. Använd i stället effektgranskningen och neka med resursproviderläget Microsoft.Kubernetes.Data.

EnforceRegoPolicy-utvärdering

Open Policy Agent-antagningskontrollanten utvärderar alla nya begäranden i klustret i realtid. Var 15:e minut slutförs en fullständig genomsökning av klustret och resultaten rapporteras till Azure Policy.

EnforceRegoPolicy-egenskaper

Egenskapen details för effekten EnforceRegoPolicy har de underegenskaper som beskriver gatekeeper v2-antagningskontrollregeln.

  • policyId (krävs)
    • Ett unikt namn som skickas som en parameter till rego-regeln för antagningskontroll.
  • princip (krävs)
    • Anger URI:n för rego-antagningskontrollregeln.
  • policyParameters (valfritt)
    • Definierar eventuella parametrar och värden som ska skickas till rego-principen.

EnforceRegoPolicy-exempel

Exempel: Gatekeeper v2-antagningskontrollregeln tillåter endast angivna containeravbildningar i AKS.

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.ContainerService/managedClusters"
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "EnforceRegoPolicy",
    "details": {
        "policyId": "ContainerAllowedImages",
        "policy": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/KubernetesService/container-allowed-images/limited-preview/gatekeeperpolicy.rego",
        "policyParameters": {
            "allowedContainerImagesRegex": "[parameters('allowedContainerImagesRegex')]"
        }
    }
}

Ändra

Ändra används för att lägga till, uppdatera eller ta bort egenskaper eller taggar för en prenumeration eller resurs när du skapar eller uppdaterar. Ett vanligt exempel är att uppdatera taggar för resurser som costCenter. Befintliga icke-kompatibla resurser kan åtgärdas med en reparationsuppgift. En enskild ändringsregel kan ha valfritt antal åtgärder. Principtilldelningar med effekt inställd som Ändra kräver en hanterad identitet för att utföra reparation.

Följande åtgärder stöds av Ändra:

  • Lägg till, ersätt eller ta bort resurstaggar. För taggar ska en Ändra-princip ha modeangetts till Indexerad om inte målresursen är en resursgrupp.
  • Lägg till eller ersätt värdet för den hanterade identitetstypen (identity.type) för virtuella datorer och VM-skalningsuppsättningar.
  • Lägg till eller ersätt värdena för vissa alias.
    • AnvändningGet-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }i Azure PowerShell 4.6.0 eller senare för att hämta en lista över alias som kan användas med Modify.

Viktigt

Om du hanterar taggar rekommenderar vi att du använder Ändra i stället för Lägg till eftersom Ändra ger ytterligare åtgärdstyper och möjlighet att åtgärda befintliga resurser. Tillägg rekommenderas dock om du inte kan skapa en hanterad identitet eller om Modify ännu inte stöder aliaset för resursegenskapen.

Ändra utvärdering

Ändra utvärderas innan begäran bearbetas av en resursprovider när en resurs skapas eller uppdateras. Åtgärderna Modify tillämpas på begärandeinnehållet när villkoret if för principregeln uppfylls. Varje Ändringsåtgärd kan ange ett villkor som avgör när den tillämpas. Åtgärder med villkor som utvärderas till false hoppas över.

När ett alias anges utförs följande ytterligare kontroller för att säkerställa att åtgärden Ändra inte ändrar innehållet i begäran på ett sätt som gör att resursprovidern avvisar det:

  • Egenskapen som aliaset mappar till markeras som "Ändringsbar" i begärans API-version.
  • Tokentypen i åtgärden Ändra matchar den förväntade tokentypen för egenskapen i begärans API-version.

Om någon av dessa kontroller misslyckas återgår principutvärderingen till den angivna konfliktenEffect.

Viktigt

Vi rekommenderar att Ändra definitioner som innehåller alias använder granskningskonflikteffekten för att undvika misslyckade begäranden med hjälp av API-versioner där den mappade egenskapen inte är "Ändringsbar". Om samma alias fungerar annorlunda mellan API-versionerna kan villkorsstyrda ändringsåtgärder användas för att fastställa den ändringsåtgärd som används för varje API-version.

När en principdefinition som använder effekten Ändra körs som en del av en utvärderingscykel, gör den inte ändringar i resurser som redan finns. I stället markeras alla resurser som uppfyller if-villkoret som icke-kompatibla.

Ändra egenskaper

Informationsegenskapen för effekten Ändra har alla underegenskaper som definierar de behörigheter som krävs för reparation och de åtgärder som används för att lägga till, uppdatera eller ta bort taggvärden.

  • roleDefinitionIds (krävs)
    • Den här egenskapen måste innehålla en matris med strängar som matchar roll-baserat roll-ID för åtkomstkontroll som är tillgängligt för prenumerationen. Mer information finns i Reparation – konfigurera principdefinitionen.
    • Den definierade rollen måste innehålla alla åtgärder som beviljats rollen Deltagare .
  • conflictEffect (valfritt)
    • Avgör vilken principdefinition som "vinner" om fler än en principdefinition ändrar samma egenskap eller när åtgärden Ändra inte fungerar för det angivna aliaset.
      • För nya eller uppdaterade resurser har principdefinitionen med neka företräde. Principdefinitioner med granskning hoppar över alla åtgärder. Om fler än en principdefinition har nekat nekas begäran som en konflikt. Om alla principdefinitioner har granskning bearbetas ingen av åtgärderna i de motstridiga principdefinitionerna.
      • Om fler än en principdefinition har nekats för befintliga resurser är efterlevnadsstatusen Konflikt. Om en eller färre principdefinitioner nekar returnerar varje tilldelning kompatibilitetsstatusen Icke-kompatibel.
    • Tillgängliga värden: granska, neka, inaktiverad.
    • Standardvärdet nekas.
  • åtgärder (krävs)
    • En matris med alla taggåtgärder som ska slutföras på matchande resurser.
    • Egenskaper:
      • åtgärd (krävs)
        • Definierar vilken åtgärd som ska vidtas för en matchande resurs. Alternativen är: addOrReplace, Add, Remove. Lägg till fungerar ungefär som tilläggseffekten .
      • fält (obligatoriskt)
        • Taggen som ska läggas till, ersättas eller ta bort. Taggnamn måste följa samma namngivningskonvention för andra fält.
      • värde (valfritt)
        • Värdet som taggen ska anges till.
        • Den här egenskapen krävs om åtgärden är addOrReplace eller Lägg till.
      • villkor (valfritt)
        • En sträng som innehåller ett Azure Policy språkuttryck med principfunktioner som utvärderas till sant eller falskt.
        • Stöder inte följande principfunktioner: field(), resourceGroup(), subscription().

Ändra åtgärder

Operations-egenskapsmatrisen gör det möjligt att ändra flera taggar på olika sätt från en enda principdefinition. Varje åtgärd består av egenskaper för åtgärd, fält och värde . Åtgärden avgör vad reparationsaktiviteten gör med taggarna, fältet avgör vilken tagg som ändras och värdet definierar den nya inställningen för taggen. Följande exempel gör följande taggändringar:

  • Anger taggen environment till "Test", även om den redan finns med ett annat värde.
  • Tar bort taggen TempResource.
  • Anger taggen Dept till principparametern DeptName som konfigurerats för principtilldelningen.
"details": {
    ...
    "operations": [
        {
            "operation": "addOrReplace",
            "field": "tags['environment']",
            "value": "Test"
        },
        {
            "operation": "Remove",
            "field": "tags['TempResource']",
        },
        {
            "operation": "addOrReplace",
            "field": "tags['Dept']",
            "value": "[parameters('DeptName')]"
        }
    ]
}

Åtgärdsegenskapen har följande alternativ:

Åtgärd Beskrivning
addOrReplace Lägger till den definierade egenskapen eller taggen och värdet i resursen, även om egenskapen eller taggen redan finns med ett annat värde.
Lägg till Lägger till den definierade egenskapen eller taggen och värdet i resursen.
Ta bort Tar bort den definierade egenskapen eller taggen från resursen.

Ändra exempel

Exempel 1: Lägg till taggen environment och ersätt befintliga environment taggar med "Test":

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "operations": [
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "Test"
            }
        ]
    }
}

Exempel 2: Ta bort taggen env och lägg till taggen environment eller ersätt befintliga environment taggar med ett parameteriserat värde:

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "conflictEffect": "deny",
        "operations": [
            {
                "operation": "Remove",
                "field": "tags['env']"
            },
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "[parameters('tagValue')]"
            }
        ]
    }
}

Exempel 3: Kontrollera att ett lagringskonto inte tillåter offentlig blobåtkomst. Åtgärden Ändra tillämpas endast när begäranden med API-versionen är större eller lika med "2019-04-01":

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
        ],
        "conflictEffect": "audit",
        "operations": [
            {
                "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
                "operation": "addOrReplace",
                "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
                "value": false
            }
        ]
    }
}

Principdefinitioner för skiktning

En resurs kan påverkas av flera tilldelningar. Dessa tilldelningar kan ha samma omfång eller i olika omfång. Var och en av dessa tilldelningar kommer sannolikt också att ha en annan effekt definierad. Villkoret och effekten för varje princip utvärderas oberoende av varandra. Exempel:

  • Princip 1
    • Begränsar resursplatsen till "westus"
    • Tilldelad till prenumeration A
    • Neka effekt
  • Princip 2
    • Begränsar resursplatsen till "eastus"
    • Tilldelad till resursgrupp B i prenumeration A
    • Granskningseffekt

Den här konfigurationen skulle resultera i följande resultat:

  • Alla resurser som redan finns i resursgrupp B i "eastus" är kompatibla med princip 2 och är inte kompatibla med princip 1
  • Alla resurser som redan finns i resursgrupp B som inte finns i "eastus" är inte kompatibla med princip 2 och inkompatibla till princip 1 om den inte finns i "westus"
  • Alla nya resurser i prenumeration A som inte finns i "westus" nekas av princip 1
  • Alla nya resurser i prenumeration A och resursgrupp B i "westus" skapas och är inte kompatibla med princip 2

Om både princip 1 och princip 2 hade effekten av nekande ändras situationen till:

  • Alla resurser som redan finns i resursgrupp B som inte finns i "eastus" är inte kompatibla med princip 2
  • Alla resurser som redan finns i resursgrupp B som inte finns i "westus" är inte kompatibla med princip 1
  • Alla nya resurser i prenumeration A som inte finns i "westus" nekas av princip 1
  • Alla nya resurser i resursgrupp B i prenumeration A nekas

Varje tilldelning utvärderas individuellt. Därför finns det inte en möjlighet för en resurs att glida igenom en lucka från skillnader i omfång. Nettoresultatet av lagerprincipdefinitioner anses vara kumulativt mest restriktivt. Om både princip 1 och 2 till exempel hade en nekande effekt skulle en resurs blockeras av överlappande och motstridiga principdefinitioner. Om du fortfarande behöver resursen som ska skapas i målomfånget granskar du undantagen för varje tilldelning för att verifiera att rätt principtilldelningar påverkar rätt omfång.

Nästa steg