Informazioni sugli effetti di Criteri di Azure

Ogni definizione di criteri in Criteri di Azure ha un effetto. Questo effetto determina cosa accade quando viene valutata la corrispondenza della regola dei criteri. Il comportamento degli effetti varia a seconda che riguardino una nuova risorsa, una risorsa aggiornata o una risorsa esistente.

Attualmente questi effetti sono supportati in una definizione dei criteri:

Gli effetti seguenti sono deprecati:

Importante

Al posto degli effetti EnforceOPAConstraint o EnforceRegoPolicy , usare audit e deny con la modalità Microsoft.Kubernetes.Dataprovider di risorse . Le definizioni dei criteri predefinite sono state aggiornate. Quando vengono modificate le assegnazioni di criteri esistenti di queste definizioni di criteri predefinite, il parametro dell'effetto deve essere modificato in un valore nell'elenco allowedValues aggiornato.

Ordine di valutazione

Le richieste per creare o aggiornare una risorsa vengono valutate per prime da Criteri di Azure. Criteri di Azure crea un elenco di tutte le assegnazioni che si applicano alla risorsa e valuta quindi la risorsa rispetto a ogni definizione. Per una modalità di Resource Manager, Criteri di Azure elabora diversi effetti prima di consegnare la richiesta al provider di risorse appropriato. Questo ordine impedisce l'elaborazione non necessaria da parte di un provider di risorse quando una risorsa non soddisfa i controlli di governance progettati di Criteri di Azure. Con una modalità provider di risorse, il provider di risorse gestisce la valutazione e il risultato e segnala i risultati a Criteri di Azure.

  • Disabilitato viene verificato per primo, per determinare se valutare la regola dei criteri.
  • Vengono quindi valutati Append e Modify. Dal momento che entrambi possono modificare la richiesta, una modifica apportata potrebbe impedire l'attivazione di un effetto Audit o Deny. Questi effetti sono disponibili solo con una modalità Resource Manager.
  • Successivamente viene valutato Deny. La valutazione di Deny prima di Audit impedisce la doppia registrazione di una risorsa non desiderata.
  • Audit viene valutato l'ultimo.

Dopo che il provider di risorse restituisce un codice di esito positivo in una richiesta di Resource Manager modalità, AuditIfNotExists e DeployIfNotExists valutano se è necessaria una registrazione o un'azione di conformità aggiuntive.

Inoltre, PATCH le richieste che modificano tags solo i campi correlati limitano la valutazione dei criteri ai criteri contenenti condizioni che controllano tags i campi correlati.

Accoda

Append viene usato per aggiungere altri campi alla risorsa richiesta durante la creazione o l'aggiornamento. Un esempio comune è la specifica di indirizzi IP consentiti per una risorsa di archiviazione.

Importante

Append è destinato all'uso con proprietà di non tag. Sebbene Append possa aggiungere tag a una risorsa durante una richiesta di creazione o aggiornamento, è consigliabile usare l'effetto Modify per i tag.

Valutazione di Append

Append viene valutato prima che la richiesta venga elaborata da un provider di risorse durante la creazione o l'aggiornamento di una risorsa. Append aggiunge campi alla risorsa quando viene soddisfatta la condizione if della regola dei criteri. Se l'effetto Append sostituisce un valore nella richiesta originale con un valore diverso, agisce come effetto Deny e rifiuta la richiesta. Per aggiungere un nuovo valore a una matrice esistente, usare la versione [*] dell'alias.

Quando una definizione dei criteri che usa l'effetto Append viene eseguita come parte di un ciclo di valutazione, non apporta modifiche alle risorse già esistenti. Al contrario, contrassegna qualsiasi risorsa che soddisfi la condizione if come non conforme.

Proprietà di Append

Un effetto Append ha solo una matrice details obbligatoria. Essendo una matrice, details può richiedere una coppia campo/valore singola o coppie multiple. Fare riferimento alla struttura di definizione per l'elenco dei campi accettabili.

Esempi di Append

Esempio 1: coppia campo/valore singolo usando un alias non-[*]con un valore di matrice per impostare le regole IP in un account di archiviazione. Quando l'alias non[*] è una matrice, l'effetto aggiunge il valore come intera matrice. Se la matrice esiste già, si verifica un evento Deny per effetto del conflitto.

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

Esempio 2: coppia campo/valore singolo usando un alias[*]con un valore di matrice per impostare le regole IP in un account di archiviazione. Usando l'alias [*] , l'effetto aggiunge il valore a una matrice potenzialmente preesistente. Se la matrice non esiste ancora, viene creata.

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

Audit

Audit viene usato per creare un evento di avviso nel log attività quando viene valutata una risorsa non conforme, ma non arresta la richiesta.

Valutazione di Audit

Audit è l'ultimo effetto controllato da Criteri di Azure durante la creazione o l'aggiornamento di una risorsa. Per una modalità Resource Manager, Criteri di Azure quindi invia la risorsa al provider di risorse. Quando si valuta una richiesta di creazione o aggiornamento per una risorsa, Criteri di Azure aggiunge un'operazione Microsoft.Authorization/policies/audit/action al log attività e contrassegna la risorsa come non conforme. Durante un ciclo di valutazione della conformità standard, viene aggiornato solo lo stato di conformità della risorsa.

Proprietà di Audit

Per una modalità Resource Manager, l'effetto di controllo non ha proprietà aggiuntive da usare nella condizione successiva della definizione dei criteri.

Per una modalità provider di risorse di Microsoft.Kubernetes.Data, l'effetto di controllo presenta le seguenti sottoproprietà aggiuntive dei dettagli. L'uso di è necessario per le definizioni dei templateInfo criteri nuove o aggiornate, come constraintTemplate deprecato.

  • templateInfo (obbligatorio)
    • Non è possibile usare con constraintTemplate.
    • sourceType (obbligatorio)
      • Definisce il tipo di origine per il modello di vincolo. Valori consentiti: PublicURL o Base64Encoded.

      • Se PublicURL, associato alla proprietà url per specificare la posizione del modello di vincolo. La posizione deve essere accessibile pubblicamente.

        Avviso

        Non usare URI di firma di accesso condiviso, token URL o qualsiasi altro elemento che potrebbe esporre segreti in testo normale.

      • Se Base64Encoded, associato alla proprietà content per fornire il modello di vincolo con codifica Base 64. Vedere Creare una definizione di criteri dal modello di vincolo per creare una definizione personalizzata da un modello di vincolo GateKeeper v3 (Open Policy Agent) esistente.

  • vincolo (deprecato)
    • Non è possibile usare con templateInfo.
    • L'implementazione CRD del modello Constraint. Usa i parametri passati tramite valori come {{ .Values.<valuename> }}. Nell'esempio 2 seguente, questi valori sono {{ .Values.excludedNamespaces }} e {{ .Values.allowedContainerImagesRegex }}.
  • spazi dei nomi (facoltativo)
    • Matrice di spazi dei nomi Kubernetes a cui limitare la valutazione dei criteri.
    • Un valore vuoto o mancante fa sì che la valutazione dei criteri includa tutti gli spazi dei nomi, ad eccezione di quelli definiti in excludedNamespaces.
  • excludedNamespaces (obbligatorio)
  • labelSelector (obbligatorio)
    • Oggetto che include le proprietà matchLabels (oggetto) e matchExpression (matrice) per consentire di specificare quali risorse Kubernetes includere per la valutazione dei criteri corrispondenti alle etichette e ai selettori forniti.
    • Un valore vuoto o mancante fa sì che la valutazione dei criteri includa tutte le etichette e i selettori, ad eccezione degli spazi dei nomi definiti in excludedNamespaces.
  • apiGroups (obbligatorio quando si usa templateInfo)
    • Matrice che include i gruppi di API da associare. Una matrice vuota ([""]) è il gruppo di API di base.
    • La definizione ["*"] di per apiGroups non è consentita.
  • tipi (obbligatorio quando si usa templateInfo)
    • Matrice che include il tipo di oggetto Kubernetes a cui limitare la valutazione.
    • La definizione ["*"]di tipi non è consentita.
  • valori (facoltativo)
    • Definisce tutti i parametri e i valori da passare a Constraint. Ogni valore deve esistere nel modello Constraint CRD.
  • constraintTemplate (deprecato)
    • Non è possibile usare con templateInfo.
    • Deve essere sostituito con templateInfo durante la creazione o l'aggiornamento di una definizione di criteri.
    • Il modello Constraint CustomResourceDefinition (CRD) che definisce nuovi vincoli. Il modello definisce la logica Rego, lo schema Constraint e i parametri Constraint passati tramite valori da Criteri di Azure.

Esempio di Audit

Esempio 1: Uso dell'effetto di controllo per le modalità di Resource Manager.

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

Esempio 2: Uso dell'effetto di controllo per una modalità provider di risorse di Microsoft.Kubernetes.Data. Le informazioni aggiuntive contenute in details.templateInfo dichiarano l'uso di PublicURL e impostano url il percorso del modello Vincolo da usare in Kubernetes per limitare le immagini del contenitore consentite.

"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 consente il controllo delle risorse correlate alla risorsa che corrisponde alla condizione if , ma non hanno le proprietà specificate nei dettagli della condizione successiva .

Valutazione di AuditIfNotExists

AuditIfNotExists viene eseguito dopo che un provider di risorse ha gestito una richiesta di creazione o aggiornamento di risorse e ha restituito un codice di stato con esito positivo. L'effetto Audit si verifica se non ci sono risorse correlate o se le risorse definite da ExistenceCondition non restituiscono true. Per le risorse nuove e aggiornate, Criteri di Azure aggiunge un'operazione Microsoft.Authorization/policies/audit/action al log attività e contrassegna la risorsa come non conforme. Quando è attivato, la risorsa che ha soddisfatto la condizione if è la risorsa contrassegnata come non conforme.

Proprietà di AuditIfNotExists

La proprietà details degli effetti AuditIfNotExists ha tutte le sottoproprietà che definiscono le risorse correlate a cui corrispondere.

  • Tipo (obbligatorio)
    • Specifica il tipo della risorsa correlata a cui corrispondere.
    • Se il tipo è un tipo di risorsa sotto la risorsa condizione if , i criteri eseguono query sulle risorse di questo tipo nell'ambito della risorsa valutata. In caso contrario, le query sui criteri all'interno dello stesso gruppo di risorse o della stessa sottoscrizione della risorsa valutata a seconda dell'esistenzaScope.
  • Name (facoltativo)
    • Specifica il nome esatto della risorsa a cui corrispondere e fa sì che il criterio recuperi una risorsa specifica invece di tutte le risorse del tipo specificato.
    • Quando i valori della condizione per if.field.type e then.details.type corrispondono, name diventa obbligatorio e deve essere [field('name')]o [field('fullName')] per una risorsa figlio. Tuttavia, deve essere considerato invece un effetto audit.
  • ResourceGroupName (facoltativo)
    • Consente che la corrispondenza della risorsa correlata provenga da un gruppo di risorse diverso.
    • Non è applicabile se type è una risorsa sottostante la risorsa della condizione if.
    • L'impostazione predefinita è il gruppo di risorse della risorsa della condizione if.
  • ExistenceScope (facoltativo)
    • I valori consentiti sono Subscription e ResourceGroup.
    • Imposta l'ambito dove recuperare la risorsa correlata a cui corrispondere.
    • Non è applicabile se type è una risorsa sottostante la risorsa della condizione if.
    • Per ResourceGroup, si limita al gruppo di risorse della risorsa della condizione if o al gruppo di risorse specificato in ResourceGroupName.
    • Per Subscription, esegue una query nell'intera sottoscrizione per la risorsa correlata. L'ambito di assegnazione deve essere impostato in corrispondenza della sottoscrizione o superiore per una valutazione appropriata.
    • L'impostazione predefinita è ResourceGroup.
  • EvaluationDelay (facoltativo)
    • Specifica quando deve essere valutata l'esistenza delle risorse correlate. Il ritardo viene usato solo per le valutazioni risultanti da una richiesta di risorsa di creazione o aggiornamento.
    • I valori consentiti sono AfterProvisioning, AfterProvisioningSuccessAfterProvisioningFailure, o una durata ISO 8601 compresa tra 0 e 360 minuti.
    • I valori AfterProvisioning esaminano il risultato del provisioning della risorsa valutata nella condizione IF della regola dei criteri. AfterProvisioning viene eseguito al termine del provisioning, indipendentemente dal risultato. Se il provisioning richiede più di 6 ore, viene considerato come un errore durante la determinazione dei ritardi della valutazione AfterProvisioning .
    • Il valore predefinito è PT10M (10 minuti).
    • Se si specifica un ritardo di valutazione prolungato, è possibile che lo stato di conformità registrato della risorsa non venga aggiornato fino al trigger di valutazione successivo.
  • ExistenceCondition (facoltativo)
    • Se non specificato, qualsiasi risorsa correlata di type soddisfa l'effetto e non attiva il controllo.
    • Usa lo stesso linguaggio della regola dei criteri per la condizione if, ma viene valutato singolarmente rispetto a ogni risorsa correlata.
    • Se qualsiasi risorsa correlata corrispondente restituisce true, l'effetto è soddisfatto e non attiva il controllo.
    • Può usare [field()] per controllare l'equivalenza con i valori nella condizione if.
    • Ad esempio, può essere usato per convalidare che la risorsa padre (nella condizione if) sia nello stesso percorso della risorsa della risorsa correlata corrispondente.

Esempio di AuditIfNotExists

Esempio: valuta Macchine virtuali per determinare se l'estensione Antimalware esiste e quindi controlla se manca.

{
    "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"
                    }
                ]
            }
        }
    }
}

Nega

Deny viene usato per impedire una richiesta di risorse che non corrisponde agli standard definiti tramite una definizione dei criteri e che genera un errore della richiesta.

Valutazione di Deny

Quando si crea o si aggiorna una risorsa corrispondente in modalità Resource Manager, nega impedisce l'invio della richiesta al provider di risorse. La richiesta viene restituita come 403 (Forbidden). Nel portale l'accesso negato può essere visualizzato come stato della distribuzione impedita dall'assegnazione dei criteri. Per una modalità provider di risorse, il provider di risorse gestisce la valutazione della risorsa.

Durante la valutazione di risorse esistenti, le risorse che corrispondono a una definizione di criteri Deny vengono contrassegnate come non conformi.

Proprietà di Deny

Per una modalità Resource Manager, l'effetto deny non ha proprietà aggiuntive da usare nella condizione successiva della definizione dei criteri.

Per la modalità provider di risorse di Microsoft.Kubernetes.Data, l'effetto deny presenta le seguenti sottoproprietà aggiuntive dei dettagli. L'uso di è necessario per le definizioni dei templateInfo criteri nuove o aggiornate, come constraintTemplate deprecato.

  • templateInfo (obbligatorio)
    • Non è possibile usare con constraintTemplate.
    • sourceType (obbligatorio)
      • Definisce il tipo di origine per il modello di vincolo. Valori consentiti: PublicURL o Base64Encoded.

      • Se PublicURL, associato alla proprietà url per specificare la posizione del modello di vincolo. La posizione deve essere accessibile pubblicamente.

        Avviso

        Non usare URI o token di firma di accesso condiviso in url o qualsiasi altro elemento che potrebbe esporre un segreto.

      • Se Base64Encoded, associato alla proprietà content per fornire il modello di vincolo con codifica Base 64. Vedere Creare una definizione di criteri dal modello di vincolo per creare una definizione personalizzata da un modello di vincolo GateKeeper v3 (Open Policy Agent) esistente.

  • vincolo (facoltativo)
    • Non è possibile usare con templateInfo.
    • L'implementazione CRD del modello Constraint. Usa i parametri passati tramite valori come {{ .Values.<valuename> }}. Nell'esempio 2 seguente, questi valori sono {{ .Values.excludedNamespaces }} e {{ .Values.allowedContainerImagesRegex }}.
  • spazi dei nomi (facoltativo)
    • Matrice di spazi dei nomi Kubernetes a cui limitare la valutazione dei criteri.
    • Un valore vuoto o mancante fa sì che la valutazione dei criteri includa tutti gli spazi dei nomi, ad eccezione di quelli definiti in excludedNamespaces.
  • excludedNamespaces (obbligatorio)
  • labelSelector (obbligatorio)
    • Oggetto che include le proprietà matchLabels (oggetto) e matchExpression (matrice) per consentire di specificare quali risorse Kubernetes includere per la valutazione dei criteri corrispondenti alle etichette e ai selettori forniti.
    • Un valore vuoto o mancante fa sì che la valutazione dei criteri includa tutte le etichette e i selettori, ad eccezione degli spazi dei nomi definiti in excludedNamespaces.
  • apiGroups (obbligatorio quando si usa templateInfo)
    • Matrice che include i gruppi di API da associare. Una matrice vuota ([""]) è il gruppo di API di base.
    • La definizione ["*"] per apiGroups non è consentita.
  • tipi (necessari quando si usa templateInfo)
    • Matrice che include il tipo di oggetto Kubernetes a cui limitare la valutazione.
    • La definizione ["*"] di tipi non è consentita.
  • valori (facoltativo)
    • Definisce tutti i parametri e i valori da passare a Constraint. Ogni valore deve esistere nel modello Constraint CRD.
  • constraintTemplate (deprecato)
    • Impossibile usare con templateInfo.
    • Deve essere sostituito con templateInfo durante la creazione o l'aggiornamento di una definizione di criteri.
    • Il modello Constraint CustomResourceDefinition (CRD) che definisce nuovi vincoli. Il modello definisce la logica Rego, lo schema Constraint e i parametri Constraint passati tramite valori da Criteri di Azure. È consigliabile usare la versione più recente templateInfo per sostituire constraintTemplate.

Esempio di Deny

Esempio 1: uso dell'effetto di negazione per le modalità di Resource Manager.

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

Esempio 2: Uso dell'effetto di negazione per una modalità provider di risorse di Microsoft.Kubernetes.Data. Le informazioni aggiuntive contenute in details.templateInfo dichiarano l'uso di PublicURL e impostano url il percorso del modello di vincolo da usare in Kubernetes per limitare le immagini del contenitore consentite.

"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

Analogamente ad AuditIfNotExists, una definizione dei criteri DeployIfNotExists esegue una distribuzione di modelli quando la condizione viene soddisfatta. Le assegnazioni di criteri con effetto impostate come DeployIfNotExists richiedono un'identità gestita per eseguire la correzione.

Nota

I Modelli nidificati sono supportati con deployIfNotExists ma i Modelli collegati non sono attualmente supportati.

Valutazione di DeployIfNotExists

DeployIfNotExists viene eseguito dopo un ritardo configurabile quando un provider di risorse gestisce una sottoscrizione di creazione o aggiornamento o una richiesta di risorsa e ha restituito un codice di stato riuscito. Una distribuzione di modello si verifica se non ci sono risorse correlate o se le risorse definite da ExistenceCondition non restituiscono true. La durata della distribuzione dipende dalla complessità delle risorse incluse nel modello.

Durante un ciclo di valutazione, le definizioni dei criteri con un effetto DeployIfNotExists che corrispondono alle risorse vengono contrassegnate come non conformi, ma non vengono eseguite azioni sulla risorsa stessa. È possibile correggere le risorse non conformi esistenti con un'attività di correzione.

Proprietà di DeployIfNotExists

La proprietà details dell'effetto DeployIfNotExists ha tutte le sottoproprietà che definiscono le risorse correlate a cui corrispondere e la distribuzione di modelli da eseguire.

  • Tipo (obbligatorio)

    • Specifica il tipo della risorsa correlata a cui corrispondere.
    • Se il tipo è un tipo di risorsa sotto la risorsa condizione if , i criteri query per le risorse di questo tipo nell'ambito della risorsa valutata. In caso contrario, le query dei criteri all'interno dello stesso gruppo di risorse o sottoscrizione della risorsa valutata a seconda dell'esistenzaScope.
  • Name (facoltativo)

    • Specifica il nome esatto della risorsa a cui corrispondere e fa sì che il criterio recuperi una risorsa specifica invece di tutte le risorse del tipo specificato.
    • Quando i valori della condizione per if.field.type e quindi.details.type corrispondono, il nome diventa obbligatorio e deve essere [field('name')]o [field('fullName')] per una risorsa figlio.
  • ResourceGroupName (facoltativo)

    • Consente che la corrispondenza della risorsa correlata provenga da un gruppo di risorse diverso.
    • Non è applicabile se type è una risorsa sottostante la risorsa della condizione if.
    • L'impostazione predefinita è il gruppo di risorse della risorsa della condizione if.
    • Se viene eseguita una distribuzione di modelli, la distribuzione avviene nel gruppo di risorse di questo valore.
  • ExistenceScope (facoltativo)

    • I valori consentiti sono Subscription e ResourceGroup.
    • Imposta l'ambito dove recuperare la risorsa correlata a cui corrispondere.
    • Non è applicabile se type è una risorsa sottostante la risorsa della condizione if.
    • Per ResourceGroup, si limita al gruppo di risorse della risorsa della condizione if o al gruppo di risorse specificato in ResourceGroupName.
    • Per Subscription, esegue una query nell'intera sottoscrizione per la risorsa correlata. L'ambito di assegnazione deve essere impostato in sottoscrizione o superiore per la valutazione corretta.
    • L'impostazione predefinita è ResourceGroup.
  • EvaluationDelay (facoltativo )

    • Specifica quando è necessario valutare l'esistenza delle risorse correlate. Il ritardo viene usato solo per le valutazioni che sono un risultato di una richiesta di risorsa di creazione o aggiornamento.
    • I valori consentiti sono AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailureo una durata ISO 8601 compresa tra 0 e 360 minuti.
    • I valori AfterProvisioning controllano il risultato del provisioning della risorsa valutata nella condizione IF della regola dei criteri. AfterProvisioning viene eseguito dopo il completamento del provisioning, indipendentemente dal risultato. Se il provisioning richiede più di 6 ore, viene considerato come errore quando si determinano ritardi di valutazione AfterProvisioning .
    • Il valore predefinito è PT10M (10 minuti).
    • Se si specifica un ritardo di valutazione lungo, è possibile che lo stato di conformità registrato della risorsa non venga aggiornato fino al successivo trigger di valutazione.
  • ExistenceCondition (facoltativo)

    • Se non specificato, qualsiasi risorsa correlata di type soddisfa l'effetto e non attiva la distribuzione.
    • Usa lo stesso linguaggio della regola dei criteri per la condizione if, ma viene valutato singolarmente rispetto a ogni risorsa correlata.
    • Se qualsiasi risorsa correlata corrispondente restituisce true, l'effetto è soddisfatto e non attiva la distribuzione.
    • Può usare [field()] per controllare l'equivalenza con i valori nella condizione if.
    • Ad esempio, può essere usato per convalidare che la risorsa padre (nella condizione if) sia nello stesso percorso della risorsa della risorsa correlata corrispondente.
  • roleDefinitionIds (obbligatorio)

    • Questa proprietà deve contenere una matrice di stringhe che corrispondono all'ID ruolo di controllo degli accessi in base al ruolo accessibile dalla sottoscrizione. Per altre informazioni, vedere Correzione: configurare la definizione dei criteri.
  • DeploymentScope (facoltativo)

    • I valori consentiti sono Subscription e ResourceGroup.
    • Imposta il tipo di distribuzione da attivare. Subscription indica una distribuzione a livello di sottoscrizione, ResourceGroup indica una distribuzione a un gruppo di risorse.
    • Una proprietà location deve essere specificata in Deployment quando si usano distribuzioni a livello di sottoscrizione.
    • L'impostazione predefinita è ResourceGroup.
  • Distribuzione (obbligatoria)

    • Questa proprietà deve contenere la distribuzione di modelli completa passata all'API PUT Microsoft.Resources/deployments. Per altre informazioni, vedere l'API REST per le distribuzioni.
    • Annidato Microsoft.Resources/deployments all'interno del modello deve usare nomi univoci per evitare conflitti tra più valutazioni dei criteri. Il nome della distribuzione padre può essere usato come parte del nome della distribuzione annidata tramite [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Nota

    Tutte le funzioni all'interno della proprietà Deployment vengono valutate come componenti del modello, non del criterio. L'eccezione è costituita dalla proprietà parameters che passa i valori dai criteri al modello. value in questa sezione sotto un nome di parametro del modello viene usato per eseguire il passaggio del valore (vedere fullDbName nell'esempio di DeployIfNotExists).

Esempio di DeployIfNotExists

Esempio: valuta SQL Server database per determinare se transparentDataEncryption è abilitato. In caso contrario, viene eseguita una distribuzione per abilitarlo.

"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')]"
                    }
                }
            }
        }
    }
}

Disabled

Questo effetto è utile per gli scenari di test o quando la definizione dei criteri ha parametrizzato l'effetto. Grazie a questa flessibilità è possibile disabilitare una singola assegnazione invece di disabilitare tutte le assegnazioni di quei criteri.

Un'alternativa all'effetto Disabilitato è enforcementMode, che è impostata sull'assegnazione dei criteri. Quando enforcementMode viene disabilitato, le risorse vengono comunque valutate. La registrazione, ad esempio i log attività, e l'effetto del criterio non si verificano. Per altre informazioni, vedere assegnazione di criteri - modalità di imposizione.

EnforceOPAConstraint

Questo effetto viene usato con una modalitàdi definizione di criteri di Microsoft.Kubernetes.Data. Viene usato per passare le regole di controllo dell'ammissione di Gatekeeper v3 definite con OPA Constraint Framework in Open Policy Agent (OPA) per i cluster Kubernetes in Azure.

Importante

Le definizioni dei criteri di anteprima limitate con l'effetto EnforceOPAConstraint e la categoria del servizio Kubernetes correlata sono deprecate. Usare invece il controllo degli effetti e negare con la modalità Microsoft.Kubernetes.DataProvider di risorse .

Valutazione EnforceOPAConstraint

Il controller di ammissione di Open Policy Agent valuta tutte le nuove richieste nel cluster in tempo reale. Ogni 15 minuti, viene completata un'analisi completa del cluster e i risultati vengono segnalati a Criteri di Azure.

Proprietà EnforceOPAConstraint

Nella proprietà details dell'effetto EnforceOPAConstraint sono presenti le sottoproprietà che descrivono la regola di controllo dell'ammissione Gatekeeper v3.

  • constraintTemplate (obbligatorio)
    • Il modello Constraint CustomResourceDefinition (CRD) che definisce nuovi vincoli. Il modello definisce la logica Rego, lo schema Constraint e i parametri Constraint passati tramite valori da Criteri di Azure.
  • vincolo (obbligatorio)
    • L'implementazione CRD del modello Constraint. Usa i parametri passati tramite valori come {{ .Values.<valuename> }}. Nell'esempio seguente questi valori sono {{ .Values.cpuLimit }} e {{ .Values.memoryLimit }}.
  • valori (facoltativo)
    • Definisce tutti i parametri e i valori da passare a Constraint. Ogni valore deve esistere nel modello Constraint CRD.

Esempio EnforceOPAConstraint

Esempio: Regola di controllo dell'ammissione di Gatekeeper v3 per impostare i limiti delle risorse di memoria e CPU del contenitore in 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

Questo effetto viene usato con una modalitàdi definizione dei criteri di Microsoft.ContainerService.Data. Viene usato per passare le regole di controllo dell'ammissione di Gatekeeper v2 definite con Rego in Open Policy Agent (OPA) nei servizi Azure Kubernetes.

Importante

Le definizioni dei criteri in anteprima limitata con l'effetto EnforceRegoPolicy e la categoria Servizio Kubernetes sono deprecate. Usare invece il controllo degli effetti e negarlo con la modalità provider di risorse Microsoft.Kubernetes.Data.

Valutazione EnforceRegoPolicy

Il controller di ammissione di Open Policy Agent valuta tutte le nuove richieste nel cluster in tempo reale. Ogni 15 minuti, viene completata un'analisi completa del cluster e i risultati vengono segnalati a Criteri di Azure.

Proprietà EnforceRegoPolicy

Nella proprietà details dell'effetto EnforceRegoPolicy sono presenti le sottoproprietà che descrivono la regola di controllo dell'ammissione Gatekeeper v2.

  • policyId (obbligatorio)
    • Un nome univoco passato come parametro alla regola di controllo dell'ammissione Rego.
  • criterio (obbligatorio)
    • Specifica l'URI della regola di controllo dell'ammissione Rego.
  • policyParameters (facoltativo)
    • Definisce tutti i parametri e i valori da passare al criterio Rego.

Esempio EnforceRegoPolicy

Esempio: Regola di controllo di ammissione Gatekeeper V2 per consentire solo le immagini del contenitore specificate in 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')]"
        }
    }
}

Manuale (anteprima)

Il nuovo manual effetto (anteprima) consente di definire e tenere traccia delle risorse di attestazione personalizzate. A differenza di altre definizioni di criteri che analizzano attivamente la valutazione, l'effetto Manuale consente modifiche manuali allo stato di conformità. Per modificare la conformità per un criterio manuale, è necessario creare un'attestazione per tale stato di conformità.

Nota

Durante l'anteprima pubblica, il supporto per i criteri manuali è disponibile tramite varie Microsoft Defender per le iniziative di conformità alle normative cloud. Se si è un Microsoft Defender per il cliente del livello Cloud Premium, fare riferimento alla panoramica dell'esperienza.

Attualmente, le seguenti iniziative di criteri normativi includono definizioni di criteri contenenti l'effetto manuale:

  • FedRAMP High
  • FedRAMP Medium
  • HIPAA
  • HITRUST
  • ISO 27001
  • Microsoft CIS 1.3.0
  • Microsoft CIS 1.4.0
  • NIST SP 800-171 Rev. 2
  • NIST SP 800-53 Rev. 4
  • NIST SP 800-53 Rev. 5
  • PCI DSS 3.2.1
  • PCI DSS 4.0
  • SOC TSP
  • SWIFT CSP CSCF v2022

L'esempio seguente è destinato alle sottoscrizioni di Azure e imposta lo stato di conformità iniziale su Unknown.

{
  "if": {
    "field":  "type",
    "equals": "Microsoft.Resources/subscriptions"
  },
  "then": {
    "effect": "manual",
    "details": {
      "defaultState": "Unknown"
    }
  }
}

La defaultState proprietà ha tre valori possibili:

  • Sconosciuto: stato predefinito iniziale delle risorse di destinazione.
  • Conforme: la risorsa è conforme in base agli standard dei criteri manuali
  • Non conforme: la risorsa non è conforme in base agli standard dei criteri manuali

Il motore di conformità Criteri di Azure valuta tutte le risorse applicabili allo stato predefinito specificato nella definizione (Unknown se non specificato). Uno Unknown stato di conformità indica che è necessario attestare manualmente lo stato di conformità della risorsa. Se lo stato dell'effetto non è specificato, per impostazione predefinita è Unknown. Lo Unknown stato di conformità indica che è necessario attestare manualmente lo stato di conformità.

Lo screenshot seguente mostra come viene visualizzata un'assegnazione manuale dei criteri con lo Unknown stato nel portale di Azure:

Tabella di conformità delle risorse nella portale di Azure che mostra un criterio manuale assegnato con un motivo di conformità

Quando viene assegnata una definizione di criteri con manual effetto, è possibile impostare gli stati di conformità delle risorse o degli ambiti di destinazione tramite attestazioni personalizzate. Le attestazioni consentono inoltre di fornire informazioni supplementari facoltative tramite il formato di metadati e collegamenti a prove che accompagnano lo stato di conformità scelto. La persona che assegna i criteri manuali può consigliare un percorso di archiviazione predefinito per l'evidenza specificando la evidenceStorages proprietà dei metadati dell'assegnazione dei criteri.

Modifica

La modifica viene usata per aggiungere, aggiornare o rimuovere proprietà o tag in una sottoscrizione o una risorsa durante la creazione o l'aggiornamento. Un esempio comune è l'aggiornamento di tag per le risorse come costCenter. È possibile correggere le risorse non conformi esistenti con un'attività di correzione. Una regola Modify singola può avere un numero qualsiasi di operazioni. Le assegnazioni di criteri con effetto impostate come Modifica richiedono un'identità gestita per la correzione.

Le operazioni seguenti sono supportate da Modify:

  • Aggiungere, sostituire o rimuovere tag di risorse. Per i tag, un criterio Modify deve essere mode impostato su Indicizzato a meno che la risorsa di destinazione non sia un gruppo di risorse.
  • Aggiungere o sostituire il valore del tipo di identità gestita (identity.type) di macchine virtuali e set di scalabilità di macchine virtuali.
  • Aggiungere o sostituire i valori di determinati alias.
    • UsoGet-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }in Azure PowerShell 4.6.0 o versione successiva per ottenere un elenco di alias che possono essere usati con Modify.

Importante

Se si gestiscono i tag, è consigliabile usare Modifica invece di Accodamento perché Modifica offre tipi di operazione aggiuntivi e la possibilità di correggere le risorse esistenti. È tuttavia consigliabile aggiungere se non è possibile creare un'identità gestita o Modify non supporta ancora l'alias per la proprietà della risorsa.

Valutazione di Modify

Modify viene valutato prima che la richiesta venga elaborata da un provider di risorse durante la creazione o l'aggiornamento di una risorsa. Le operazioni Modify vengono applicate al contenuto della richiesta quando viene soddisfatta la condizione if della regola dei criteri. Ogni operazione Modify può specificare una condizione che determina quando viene applicata. Le operazioni con valutazioni delle condizioni false vengono ignorate.

Quando si specifica un alias, vengono eseguiti i controlli aggiuntivi seguenti per assicurarsi che l'operazione Modifica non modifichi il contenuto della richiesta in modo da impedire al provider di risorse di rifiutarlo:

  • La proprietà a cui è mappato l'alias è contrassegnata come "Modificabile" nella versione dell'API della richiesta.
  • Il tipo di token nell'operazione Modifica corrisponde al tipo di token previsto per la proprietà nella versione dell'API della richiesta.

Se uno di questi controlli ha esito negativo, la valutazione dei criteri esegue il fallback al conflictEffect specificato.

Importante

È consigliabile modificare le definizioni che includono alias usano l'effetto dei conflitti di controllo per evitare errori nelle richieste che usano versioni API in cui la proprietà mappata non è modificabile. Se lo stesso alias si comporta in modo diverso tra le versioni dell'API, è possibile usare le operazioni di modifica condizionale per determinare l'operazione di modifica usata per ogni versione dell'API.

Quando una definizione dei criteri che usa l'effetto Modify viene eseguita come parte di un ciclo di valutazione, non apporta modifiche alle risorse già esistenti. Al contrario, contrassegna qualsiasi risorsa che soddisfi la condizione if come non conforme.

Proprietà Modify

La proprietà details dell'effetto Modify include tutte le sottoproprietà che definiscono le autorizzazioni necessarie per la correzione e le operazioni usate per aggiungere, aggiornare o rimuovere i valori dei tag.

  • roleDefinitionIds (obbligatorio)
    • Questa proprietà deve contenere una matrice di stringhe che corrispondono all'ID ruolo di controllo degli accessi in base al ruolo accessibile dalla sottoscrizione. Per altre informazioni, vedere Correzione: configurare la definizione dei criteri.
    • Il ruolo definito deve includere tutte le operazioni concesse al ruolo Contributor.
  • conflictEffect (facoltativo)
    • Determina quale definizione di criteri "vince" se più definizioni di criteri modificano la stessa proprietà o quando l'operazione Modify non funziona sull'alias specificato.
      • Per le risorse nuove o aggiornate, la definizione dei criteri con negazione ha la precedenza. Le definizioni dei criteri con controllo ignorano tutte le operazioni. Se più definizioni di criteri hanno negato, la richiesta viene negata come conflitto. Se tutte le definizioni dei criteri hanno controllo, none le operazioni delle definizioni dei criteri in conflitto vengono elaborate.
      • Per le risorse esistenti, se più definizioni di criteri hanno negato, lo stato di conformità è Conflitto. Se una o meno definizioni di criteri hanno negato, ogni assegnazione restituisce uno stato di conformità non conforme.
    • Valori disponibili: controllo, negazione, disabilitato.
    • Il valore predefinito è deny.
  • operazioni (obbligatorio)
    • Una matrice di tutte le operazioni di tag da completare sulle risorse corrispondenti.
    • Proprietà:
      • operazione (obbligatoria)
        • Definisce l'azione da intraprendere su una risorsa corrispondente. Le opzioni sono: addOrReplace, Add, Remove. Add si comporta in modo analogo all'effetto Append.
      • campo (obbligatorio)
        • Il tag per aggiungere, sostituire o rimuovere. I nomi di tag devono rispettare la stessa convenzione di denominazione per altri campi.
      • value (facoltativo)
        • Il valore su cui impostare i tag.
        • Questa proprietà è obbligatoria se operation è addOrReplace o Add.
      • condizione (facoltativo)
        • Stringa contenente un'espressione del linguaggio Criteri di Azure con funzioni Criteri che restituisce true o false.
        • Non supporta le funzioni criteri seguenti: field(), , resourceGroup()subscription().

Modificare le operazioni

Le matrice di proprietà operations consente di modificare diversi tag in modi diversi da una singola definizione di criteri. Ogni operazione è costituita da proprietà operation, field, e value. Operation determina l'attività di correzione per i tag, field determina quale tag viene modificato e value definisce la nuova impostazione per il tag. Nell'esempio seguente vengono apportate modifiche al tag seguente:

  • Imposta il tag environment su "Test", anche se esiste già con un valore diverso.
  • Rimuove il tag TempResource.
  • Imposta il tag Dept sul parametro dei criteri DeptName configurato nell'assegnazione dei criteri.
"details": {
    ...
    "operations": [
        {
            "operation": "addOrReplace",
            "field": "tags['environment']",
            "value": "Test"
        },
        {
            "operation": "Remove",
            "field": "tags['TempResource']",
        },
        {
            "operation": "addOrReplace",
            "field": "tags['Dept']",
            "value": "[parameters('DeptName')]"
        }
    ]
}

Nella proprietà operation sono disponibili le opzioni seguenti:

Operazione Descrizione
addOrReplace Aggiunge la proprietà o il tag definiti e il valore alla risorsa, anche se la proprietà o il tag esiste già con un valore diverso.
Add Aggiunge la proprietà o il tag definiti e il valore alla risorsa.
Rimuovi Rimuove la proprietà o il tag definiti dalla risorsa.

Esempi di Modify

Esempio 1: Aggiungere il tag environment e sostituire i tag environment esistenti con "Test":

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

Esempio 2: Rimuovere il tag env e aggiungere il tag environment o sostituire i tag environment esistenti con un valore con parametri:

"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')]"
            }
        ]
    }
}

Esempio 3: assicurarsi che un account di archiviazione non consenta l'accesso pubblico blob, l'operazione Modifica viene applicata solo quando si valutano le richieste con versione api maggiore o uguale a '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
            }
        ]
    }
}

Disposizione delle definizioni dei criteri su più livelli

Una risorsa può essere interessata da diverse assegnazioni. Queste assegnazioni possono essere nello stesso ambito o in ambiti diversi. È anche probabile che ognuna di queste assegnazioni abbia un effetto diverso definito. La condizione e l'effetto per ogni criterio vengono valutati in modo indipendente. Ad esempio:

  • Criterio 1
    • Limita la posizione delle risorse a "westus"
    • Assegnato alla sottoscrizione A
    • Effetto Deny
  • Criterio 2
    • Limita la posizione delle risorse a "eastus"
    • Assegnato al gruppo di risorse B nella sottoscrizione A
    • Effetto Audit

Questa configurazione produrrebbe il risultato seguente:

  • Qualsiasi risorsa già presente nel gruppo di risorse B in "eastus" è conforme al criterio 2 e non conforme al criterio 1
  • Qualsiasi risorsa già presente nel gruppo di risorse B non in "eastus" è conforme al criterio 2 e non conforme al criterio 1 se non in "westus"
  • Qualsiasi nuova risorsa nella sottoscrizione A non in "westus" viene rifiutata dal criterio 1
  • Qualsiasi nuova risorsa nella sottoscrizione A e nel gruppo di risorse B in "westus" è creata e non conforme al criterio 2

Se entrambi i criteri 1 e 2 avessero l'effetto Deny, la situazione diventerebbe la seguente:

  • Qualsiasi risorsa già presente nel gruppo di risorse B non in "eastus" non è conforme al criterio 2
  • Qualsiasi risorsa già presente nel gruppo di risorse B non in "westus" non è conforme al criterio 1
  • Qualsiasi nuova risorsa nella sottoscrizione A non in "westus" viene rifiutata dal criterio 1
  • Qualsiasi nuova risorsa nel gruppo di risorse B della sottoscrizione A viene negata

Ogni assegnazione viene valutata singolarmente. Di conseguenza, non c'è alcuna possibilità di inserire per sbaglio una risorsa a causa delle differenze nell'ambito. Il risultato finale della disposizione delle definizioni dei criteri su più livelli è considerato cumulativo più restrittivo. Ad esempio, se entrambi i criteri 1 e 2 avessero un effetto Deny, una risorsa verrebbe bloccata dalle definizioni dei criteri sovrapposte e in conflitto. Se è ancora necessario che la risorsa venga creata nell'ambito di destinazione, rivedere le esclusioni per ogni assegnazione per verificare che le assegnazioni dei criteri corretti interessino gli ambiti corretti.

Passaggi successivi