Estrutura de definição da Política do AzureAzure Policy definition structure

Definições de política de recurso são usadas pelo Azure Policy para estabelecer convenções para recursos.Resource policy definitions are used by Azure Policy to establish conventions for resources. Cada definição descreve a conformidade do recurso e o efeito que ocorre quando um recurso não está em conformidade.Each definition describes resource compliance and what effect to take when a resource is non-compliant. Definindo as convenções, você pode controlar os custos e muito mais fácil gerenciar seus recursos.By defining conventions, you can control costs and more easily manage your resources. Por exemplo, você pode especificar que somente determinados tipos de máquinas virtuais são permitidos.For example, you can specify that only certain types of virtual machines are allowed. Ou você pode exigir que todos os recursos tenham uma marca específica.Or, you can require that all resources have a particular tag. As políticas são herdadas por todos os recursos filho.Policies are inherited by all child resources. Assim, se uma política for aplicada a um grupo de recursos, ela será aplicável a todos os recursos desse grupo de recursos.If a policy is applied to a resource group, it's applicable to all the resources in that resource group.

O esquema de definição de política é encontrado aqui: https://schema.management.azure.com/schemas/2019-06-01/policyDefinition.jsonThe policy definition schema is found here: https://schema.management.azure.com/schemas/2019-06-01/policyDefinition.json

Você usa JSON para criar uma definição de política.You use JSON to create a policy definition. A definição de política contém elementos para:The policy definition contains elements for:

  • modomode
  • parametersparameters
  • nome de exibiçãodisplay name
  • descriçãodescription
  • regra de políticapolicy rule
    • avaliação de lógicalogical evaluation
    • efeitoeffect

Por exemplo, o JSON a seguir mostra uma política que limita os locais em que os recursos são implantados:For example, the following JSON shows a policy that limits where resources are deployed:

{
    "properties": {
        "mode": "all",
        "parameters": {
            "allowedLocations": {
                "type": "array",
                "metadata": {
                    "description": "The list of locations that can be specified when deploying resources",
                    "strongType": "location",
                    "displayName": "Allowed locations"
                },
                "defaultValue": [ "westus2" ]
            }
        },
        "displayName": "Allowed locations",
        "description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
        "policyRule": {
            "if": {
                "not": {
                    "field": "location",
                    "in": "[parameters('allowedLocations')]"
                }
            },
            "then": {
                "effect": "deny"
            }
        }
    }
}

Todos os exemplos de Azure Policy estão em exemplos de Azure Policy.All Azure Policy samples are at Azure Policy samples.

ModoMode

O modo é configurado dependendo de se a política tem como alvo uma propriedade Azure Resource Manager ou uma propriedade de provedor de recursos.Mode is configured depending on if the policy is targeting an Azure Resource Manager property or a Resource Provider property.

Modos do Resource ManagerResource Manager modes

O modo determina quais tipos de recursos serão avaliados para uma política.The mode determines which resource types will be evaluated for a policy. Os modos suportados são:The supported modes are:

  • all: avaliar grupos de recursos e todos os tipos de recursosall: evaluate resource groups and all resource types
  • indexed: avaliar apenas os tipos de recursos que oferecem suporte a marcas e localindexed: only evaluate resource types that support tags and location

É recomendável definir o modo como all na maioria dos casos.We recommend that you set mode to all in most cases. Todas as definições de políticas criadas através do portal usam o modo all.All policy definitions created through the portal use the all mode. Se você usar a CLI do Azure ou PowerShell, será necessário especificar o modo parâmetro manualmente.If you use PowerShell or Azure CLI, you can specify the mode parameter manually. Se a definição de política não incluir um valor modo, ela usará como padrão all no Azure PowerShell e null na CLI do Azure.If the policy definition doesn't include a mode value, it defaults to all in Azure PowerShell and to null in Azure CLI. Um modo null é o mesmo que usar indexed para dar suporte à compatibilidade com versões anteriores.A null mode is the same as using indexed to support backwards compatibility.

indexed deve ser usado ao criar políticas que vão impor marcas ou locais.indexed should be used when creating policies that enforce tags or locations. Embora não seja obrigatório, impedirá que recursos que não oferecem suporte a marcas nem locais apareçam como não compatíveis nos resultados de conformidade.While not required, it prevents resources that don't support tags and locations from showing up as non-compliant in the compliance results. A exceção são grupos de recursos.The exception is resource groups. As políticas que impõem local ou marcas em um grupo de recursos devem definir mode como all e direcionar especificamente o tipo Microsoft.Resources/subscriptions/resourceGroups.Policies that enforce location or tags on a resource group should set mode to all and specifically target the Microsoft.Resources/subscriptions/resourceGroups type. Para obter um exemplo, consulte Impor marcas do grupo de recursos.For an example, see Enforce resource group tags. Para obter uma lista de recursos que dão suporte a marcas, consulte suporte a marcas para recursos do Azure.For a list of resources that support tags, see Tag support for Azure resources.

Modos de provedor de recursosResource Provider modes

O único modo de provedor de recursos com suporte no momento é Microsoft.ContainerService.Data para gerenciar regras do controlador de admissão no serviço kubernetes do Azure.The only Resource Provider mode supported currently is Microsoft.ContainerService.Data for managing admission controller rules on Azure Kubernetes Service.

Observação

Azure Policy para kubernetes está em visualização pública e só dá suporte a definições de políticas internas.Azure Policy for Kubernetes is in Public Preview and only supports built-in policy definitions.

ParâmetrosParameters

Parâmetros ajudam a simplificar o gerenciamento de política, reduzindo o número de definições de política.Parameters help simplify your policy management by reducing the number of policy definitions. Pense em parâmetros como os campos em um formulário – name, address, city, state.Think of parameters like the fields on a form – name, address, city, state. Esses parâmetros sempre permanecem iguais, porém, seus valores mudam com base no preenchimento individual do formulário.These parameters always stay the same, however their values change based on the individual filling out the form. Os parâmetros funcionam da mesma maneira que ao criar políticas.Parameters work the same way when building policies. Ao incluir parâmetros em uma definição de política, você pode reutilizar essa política para diferentes cenários usando valores diferentes.By including parameters in a policy definition, you can reuse that policy for different scenarios by using different values.

Observação

Os parâmetros podem ser adicionados a uma definição existente e atribuída.Parameters may be added to an existing and assigned definition. O novo parâmetro deve incluir a propriedade defaultValue.The new parameter must include the defaultValue property. Isso impede que atribuições existentes da política ou da iniciativa sejam tornadas inválidas indiretamente.This prevents existing assignments of the policy or initiative from indirectly being made invalid.

Propriedades do parâmetroParameter properties

Um parâmetro tem as seguintes propriedades que são usadas na definição de política:A parameter has the following properties that are used in the policy definition:

  • nome: o nome do parâmetro.name: The name of your parameter. Usado pela função de implantação parameters dentro da regra de política.Used by the parameters deployment function within the policy rule. Para saber mais, confira Usar o valor de parâmetro.For more information, see using a parameter value.
  • type: Determina se o parâmetro é uma cadeia de caracteres, matriz, objeto, booliano, inteiro, floatou DateTime.type: Determines if the parameter is a string, array, object, boolean, integer, float, or datetime.
  • metadata: define as subpropriedades usadas principalmente pelo portal do Azure para exibição de informações simples:metadata: Defines subproperties primarily used by the Azure portal to display user-friendly information:
    • description: a explicação de uso do parâmetro.description: The explanation of what the parameter is used for. Pode ser usado para fornecer exemplos de valores aceitáveis.Can be used to provide examples of acceptable values.
    • displayName: O nome amigável exibido no portal para o parâmetro.displayName: The friendly name shown in the portal for the parameter.
    • strongType: (opcional) usado ao atribuir a definição de política por meio do portal.strongType: (Optional) Used when assigning the policy definition through the portal. Fornece uma lista de reconhecimento de contexto.Provides a context aware list. Para obter mais informações, confira strongType.For more information, see strongType.
    • assignPermissions: Adicional Defina como true para que Portal do Azure crie atribuições de função durante a atribuição de política.assignPermissions: (Optional) Set as true to have Azure portal create role assignments during policy assignment. Essa propriedade é útil caso você queira atribuir permissões fora do escopo de atribuição.This property is useful in case you wish to assign permissions outside the assignment scope. Há uma atribuição de função por definição de função na política (ou por definição de função em todas as políticas na iniciativa).There is one role assignment per role definition in the policy (or per role definition in all of the policies in the initiative). O valor do parâmetro deve ser um recurso ou escopo válido.The parameter value must be a valid resource or scope.
  • defaultValue: (opcional) define o valor do parâmetro em uma atribuição se não houver valor fornecido.defaultValue: (Optional) Sets the value of the parameter in an assignment if no value is given. Necessário ao atualizar uma definição de política existente que é atribuída.Required when updating an existing policy definition that is assigned.
  • allowedValues: Adicional Fornece uma matriz de valores que o parâmetro aceita durante a atribuição.allowedValues: (Optional) Provides an array of values that the parameter accepts during assignment.

Por exemplo, você pode definir uma definição de política para limitar os locais em que os recursos podem ser implantados.As an example, you could define a policy definition to limit the locations where resources can be deployed. Um parâmetro para essa definição de política pode ser allowedLocations.A parameter for that policy definition could be allowedLocations. Esse parâmetro deve ser usado por cada atribuição da definição de política para limitar os valores aceitos.This parameter would be used by each assignment of the policy definition to limit the accepted values. O uso de strongType fornece uma experiência aprimorada ao concluir a atribuição por meio do portal:The use of strongType provides an enhanced experience when completing the assignment through the portal:

"parameters": {
    "allowedLocations": {
        "type": "array",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": [ "westus2" ],
        "allowedValues": [
            "eastus2",
            "westus2",
            "westus"
        ]
    }
}

Usando um valor de parâmetroUsing a parameter value

Na regra de política, você faz referência a parâmetros com a seguinte sintaxe de função de valor de implantação parameters:In the policy rule, you reference parameters with the following parameters deployment value function syntax:

{
    "field": "location",
    "in": "[parameters('allowedLocations')]"
}

Este exemplo faz referência ao parâmetro allowedLocations que foi demonstrado nas propriedades do parâmetro.This sample references the allowedLocations parameter that was demonstrated in parameter properties.

strongTypestrongType

Na propriedade metadata, você pode usar strongType para fornecer uma lista de opções de seleção múltipla no portal do Azure.Within the metadata property, you can use strongType to provide a multi-select list of options within the Azure portal. Os valores atualmente permitidos para strongType incluem:Allowed values for strongType currently include:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups
  • omsWorkspace
  • Microsoft.EventHub/Namespaces/EventHubs
  • Microsoft.EventHub/Namespaces/EventHubs/AuthorizationRules
  • Microsoft.EventHub/Namespaces/AuthorizationRules
  • Microsoft.RecoveryServices/vaults
  • Microsoft.RecoveryServices/vaults/backupPolicies

Local da definiçãoDefinition location

Durante a criação de uma iniciativa ou política, é necessário especificar o local da definição.While creating an initiative or policy, it's necessary to specify the definition location. O local da definição deve ser um grupo de gerenciamento ou uma assinatura.The definition location must be a management group or a subscription. Esse local determina o escopo para o qual pode ser atribuída a iniciativa ou política.This location determines the scope to which the initiative or policy can be assigned. Os recursos devem ser membros diretos ou filhos da hierarquia do local da definição para direcionar para a atribuição.Resources must be direct members of or children within the hierarchy of the definition location to target for assignment.

Se o local da definição for:If the definition location is a:

  • Assinatura: somente os recursos dentro dessa assinatura podem ser atribuídos à política.Subscription - Only resources within that subscription can be assigned the policy.
  • Grupo de gerenciamento: somente os recursos dentro de grupos de gerenciamento secundários e assinaturas secundárias podem ser atribuídos à política.Management group - Only resources within child management groups and child subscriptions can be assigned the policy. Se você planeja aplicar esta definição de política a diversas assinaturas, o local deve ser um grupo de gerenciamento que contém as assinaturas.If you plan to apply the policy definition to several subscriptions, the location must be a management group that contains those subscriptions.

Nome de exibição e descriçãoDisplay name and description

Use displayName e description para identificar a definição de política e fornecer contexto de quando ela é usada.You use displayName and description to identify the policy definition and provide context for when it's used. displayName tem um comprimento máximo de 128 caracteres e description tem um comprimento máximo de 512 caracteres.displayName has a maximum length of 128 characters and description a maximum length of 512 characters.

Regra de políticaPolicy rule

A regra de política consiste em se e , em seguida, blocos.The policy rule consists of If and Then blocks. No se bloco, você define uma ou mais condições que especificam quando a política é aplicada.In the If block, you define one or more conditions that specify when the policy is enforced. Você pode aplicar os operadores lógicos para essas condições para definir exatamente o cenário para uma política.You can apply logical operators to these conditions to precisely define the scenario for a policy.

No , em seguida, bloco, você define o efeito que acontecerá quando o se condições sejam atendidas.In the Then block, you define the effect that happens when the If conditions are fulfilled.

{
    "if": {
        <condition> | <logical operator>
    },
    "then": {
        "effect": "deny | audit | append | auditIfNotExists | deployIfNotExists | disabled"
    }
}

Operadores lógicosLogical operators

Os operadores lógicos compatíveis são:Supported logical operators are:

  • "not": {condition or operator}
  • "allOf": [{condition or operator},{condition or operator}]
  • "anyOf": [{condition or operator},{condition or operator}]

O não sintaxe inverte o resultado da condição.The not syntax inverts the result of the condition. A sintaxe de allOf (semelhante à operação E lógica) requer que todas as condições sejam verdadeiras.The allOf syntax (similar to the logical And operation) requires all conditions to be true. A sintaxe de anyOf (semelhante à operação Ou lógica) requer que uma ou mais condições sejam verdadeiras.The anyOf syntax (similar to the logical Or operation) requires one or more conditions to be true.

Você pode aninhar operadores lógicos.You can nest logical operators. A exemplo a seguir mostra uma operação not operação é aninhada dentro de uma operação allOf.The following example shows a not operation that is nested within an allOf operation.

"if": {
    "allOf": [{
            "not": {
                "field": "tags",
                "containsKey": "application"
            }
        },
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        }
    ]
},

CondiçõesConditions

Uma condição avalia se um campo ou um acessador de valor atende a determinados critérios.A condition evaluates whether a field or the value accessor meets certain criteria. As condições com suporte são:The supported conditions are:

  • "equals": "value"
  • "notEquals": "value"
  • "like": "value"
  • "notLike": "value"
  • "match": "value"
  • "matchInsensitively": "value"
  • "notMatch": "value"
  • "notMatchInsensitively": "value"
  • "contains": "value"
  • "notContains": "value"
  • "in": ["value1","value2"]
  • "notIn": ["value1","value2"]
  • "containsKey": "keyName"
  • "notContainsKey": "keyName"
  • "less": "value"
  • "lessOrEquals": "value"
  • "greater": "value"
  • "greaterOrEquals": "value"
  • "exists": "bool"

Ao usar as condições like e notLike, você fornece um curinga (*) no valor.When using the like and notLike conditions, you provide a wildcard * in the value. O valor não deve ter mais de um curinga *.The value shouldn't have more than one wildcard *.

Ao usar as condições Match e não match , forneça # para corresponder a um dígito, ? para uma letra, . para corresponder a qualquer caractere e qualquer outro caractere para corresponder a esse caractere real.When using the match and notMatch conditions, provide # to match a digit, ? for a letter, . to match any character, and any other character to match that actual character. As condições corresponder e notMatch diferenciam maiúsculas de minúsculas.match and notMatch are case-sensitive. Estão disponíveis alternativas que diferenciam maiúsculas de minúsculas em matchInsensitively e notMatchInsensitively.Case-insensitive alternatives are available in matchInsensitively and notMatchInsensitively. Para obter exemplos, veja Permitir vários padrões de nome.For examples, see Allow several name patterns.

CamposFields

As condições são formadas usando campos.Conditions are formed by using fields. Um campo combina às propriedades no conteúdo da solicitação de recurso e descreve o estado do recurso.A field matches properties in the resource request payload and describes the state of the resource.

Há suporte para os seguintes campos:The following fields are supported:

  • name
  • fullName
    • Retorna o nome completo do recurso.Returns the full name of the resource. O nome completo de um recurso é o nome do recurso precedido dos nomes dos recursos pai (por exemplo, "myServer/myDatabase").The full name of a resource is the resource name prepended by any parent resource names (for example "myServer/myDatabase").
  • kind
  • type
  • location
  • identity.type
  • tags
  • tags['<tagName>']
    • Essa sintaxe de colchete dá suporte a nomes de marca que tem pontuação, como hífen, ponto ou espaço.This bracket syntax supports tag names that have punctuation such as a hyphen, period, or space.
    • Em que <tagName> é o nome da marca para a qual validar a condição.Where <tagName> is the name of the tag to validate the condition for.
    • Exemplos: tags['Acct.CostCenter'] em que Acct.CostCenter é o nome da marca.Examples: tags['Acct.CostCenter'] where Acct.CostCenter is the name of the tag.
  • tags['''<tagName>''']
    • Essa sintaxe de colchete dá suporte a nomes de marca contendo apóstrofos, evitando os apóstrofos duplos.This bracket syntax supports tag names that have apostrophes in it by escaping with double apostrophes.
    • Em que '<tagName>' é o nome da marca para a qual validar a condição.Where '<tagName>' is the name of the tag to validate the condition for.
    • Exemplo: tags['''My.Apostrophe.Tag'''] em que '<tagName>' é o nome da marca.Example: tags['''My.Apostrophe.Tag'''] where '<tagName>' is the name of the tag.
  • aliases de propriedade - para obter uma lista, confira Aliases.property aliases - for a list, see Aliases.

Observação

tags.<tagName>, tags[tagName], e tags[tag.with.dots] ainda são maneiras aceitáveis de declarar um campo de marcas.tags.<tagName>, tags[tagName], and tags[tag.with.dots] are still acceptable ways of declaring a tags field. No entanto, as expressões preferenciais são aquelas listadas acima.However, the preferred expressions are those listed above.

Usar marcas com parâmetrosUse tags with parameters

Um valor de parâmetro pode ser passado para um campo de marca.A parameter value can be passed to a tag field. Passando um parâmetro para um campo de marca aumenta a flexibilidade da definição de política durante a atribuição de política.Passing a parameter to a tag field increases the flexibility of the policy definition during policy assignment.

No exemplo a seguir, concat é usado para criar uma pesquisa de campo de marcas para a marca que nomeou o valor do parâmetro tagName.In the following example, concat is used to create a tags field lookup for the tag named the value of the tagName parameter. Se essa marca não existir, o efeito de acrescentar é usado para adicionar a marca usando o valor da mesma marca nomeada definida no grupo de recursos pai dos recursos auditados usando a função de pesquisa resourcegroup().If that tag doesn't exist, the append effect is used to add the tag using the value of the same named tag set on the audited resources parent resource group by using the resourcegroup() lookup function.

{
    "if": {
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "exists": "false"
    },
    "then": {
        "effect": "append",
        "details": [{
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "value": "[resourcegroup().tags[parameters('tagName')]]"
        }]
    }
}

ValorValue

As condições também podem ser formadas usando o valor.Conditions can also be formed using value. O valor verifica as condições em relação aos parâmetros, funções de modelo com suporte ou literais.value checks conditions against parameters, supported template functions, or literals. O valor é emparelhado a uma condição com suporte.value is paired with any supported condition.

Aviso

Se o resultado de uma função de modelo for um erro, a avaliação da política falhará.If the result of a template function is an error, policy evaluation fails. Uma avaliação com falha é uma negaçãoimplícita.A failed evaluation is an implicit deny. Para obter mais informações, consulte evitando falhas de modelo.For more information, see avoiding template failures.

Exemplos de valorValue examples

Este exemplo de regra de política usa valor para comparar o resultado da função resourceGroup() e a propriedade nome retornada para uma condição like de *netrg.This policy rule example uses value to compare the result of the resourceGroup() function and the returned name property to a like condition of *netrg. A regra nega qualquer recurso que não for do tipo Microsoft.Network/* em qualquer grupo de recursos cujo nome termine em *netrg.The rule denies any resource not of the Microsoft.Network/* type in any resource group whose name ends in *netrg.

{
    "if": {
        "allOf": [{
                "value": "[resourceGroup().name]",
                "like": "*netrg"
            },
            {
                "field": "type",
                "notLike": "Microsoft.Network/*"
            }
        ]
    },
    "then": {
        "effect": "deny"
    }
}

Este exemplo de regra de política usa valor para verificar se o resultado de várias funções aninhadas é igual a true.This policy rule example uses value to check if the result of multiple nested functions equals true. A regra nega qualquer recurso que não tenha pelo menos três marcas.The rule denies any resource that doesn't have at least three tags.

{
    "mode": "indexed",
    "policyRule": {
        "if": {
            "value": "[less(length(field('tags')), 3)]",
            "equals": true
        },
        "then": {
            "effect": "deny"
        }
    }
}

Evitando falhas de modeloAvoiding template failures

O uso de funções de modelo em valor permite muitas funções aninhadas complexas.The use of template functions in value allows for many complex nested functions. Se o resultado de uma função de modelo for um erro, a avaliação da política falhará.If the result of a template function is an error, policy evaluation fails. Uma avaliação com falha é uma negaçãoimplícita.A failed evaluation is an implicit deny. Um exemplo de um valor que falha em determinados cenários:An example of a value that fails in certain scenarios:

{
    "policyRule": {
        "if": {
            "value": "[substring(field('name'), 0, 3)]",
            "equals": "abc"
        },
        "then": {
            "effect": "audit"
        }
    }
}

A regra de política de exemplo acima usa substring () para comparar os três primeiros caracteres de nome para ABC.The example policy rule above uses substring() to compare the first three characters of name to abc. Se Name for menor que três caracteres, a função substring() resultará em um erro.If name is shorter than three characters, the substring() function results in an error. Esse erro faz com que a política se torne um efeito de negação .This error causes the policy to become a deny effect.

Em vez disso, use a função If () para verificar se os três primeiros caracteres de nome são iguais a ABC sem permitir que um nome com menos de três caracteres cause um erro:Instead, use the if() function to check if the first three characters of name equal abc without allowing a name shorter than three characters to cause an error:

{
    "policyRule": {
        "if": {
            "value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
            "equals": "abc"
        },
        "then": {
            "effect": "audit"
        }
    }
}

Com a regra de política revisada, if() verifica o comprimento do nome antes de tentar obter um substring() em um valor com menos de três caracteres.With the revised policy rule, if() checks the length of name before trying to get a substring() on a value with fewer than three characters. Se o nome for muito curto, o valor "não iniciando com ABC" será retornado em vez disso e comparado com ABC.If name is too short, the value "not starting with abc" is returned instead and compared to abc. Um recurso com um nome curto que não começa com ABC ainda falha na regra de política, mas não causa mais um erro durante a avaliação.A resource with a short name that doesn't begin with abc still fails the policy rule, but no longer causes an error during evaluation.

EfeitoEffect

O Azure Policy dá suporte aos seguintes tipos de efeito:Azure Policy supports the following types of effect:

  • Negar: gera um evento no log de atividades e falha na solicitaçãoDeny: generates an event in the activity log and fails the request
  • Auditoria: gera um evento de aviso no log de atividades, mas não falha na solicitaçãoAudit: generates a warning event in activity log but doesn't fail the request
  • Acrescentar: adiciona o conjunto de campos definido à solicitaçãoAppend: adds the defined set of fields to the request
  • AuditIfNotExists: habilitará a auditoria se um recurso não existirAuditIfNotExists: enables auditing if a resource doesn't exist
  • DeployIfNotExists: implanta um recurso caso ele ainda não existaDeployIfNotExists: deploys a resource if it doesn't already exist
  • Desabilitado: não avalia os recursos de conformidade para a regra de políticaDisabled: doesn't evaluate resources for compliance to the policy rule
  • EnforceRegoPolicy: configura o controlador de admissão do agente de política aberto no serviço kubernetes do Azure (versão prévia)EnforceRegoPolicy: configures the Open Policy Agent admissions controller in Azure Kubernetes Service (preview)
  • Modificar: adiciona, atualiza ou remove as marcas definidas de um recursoModify: adds, updates, or removes the defined tags from a resource

Para acrescentar, você precisa fornecer os detalhes abaixo:For append, you must provide the following details:

"effect": "append",
"details": [{
    "field": "field name",
    "value": "value of the field"
}]

O valor pode ser uma cadeia de caracteres ou um objeto no formato JSON.The value can be either a string or a JSON format object.

AuditIfNotExists e DeployIfNotExists avaliam a existência de um recurso relacionado e aplicam uma regra.AuditIfNotExists and DeployIfNotExists evaluate the existence of a related resource and apply a rule. Se o recurso não corresponder à regra, o efeito será implementado.If the resource doesn't match the rule, the effect is implemented. Por exemplo, você pode exigir que um observador de rede seja implantado para todas as redes virtuais.For example, you can require that a network watcher is deployed for all virtual networks. Para obter mais informações, veja o exemplo Auditar se a extensão não existir.For more information, see the Audit if extension doesn't exist example.

O efeito DeployIfNotExists requer a propriedade roleDefinitionId na parte de detalhes da regra de política.The DeployIfNotExists effect requires the roleDefinitionId property in the details portion of the policy rule. Para saber mais, confira Correção – configurar a definição de política.For more information, see Remediation - Configure policy definition.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscription/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

Da mesma forma, Modify requer a propriedade roleDefinitionId na parte de detalhes da regra de política para a tarefa de correção.Similarly, Modify requires roleDefinitionId property in the details portion of the policy rule for the remediation task. Modify também requer uma matriz de operações para definir as ações a serem executadas nas marcas de recursos.Modify also requires an operations array to define what actions to take on the resources tags.

Para obter detalhes completos sobre cada efeito, ordem de avaliação, propriedades e exemplos, consulte noções básicas sobre efeitos de Azure Policy.For complete details on each effect, order of evaluation, properties, and examples, see Understanding Azure Policy Effects.

Funções de políticaPolicy functions

Todas as funções de modelo do Resource Manager estão disponíveis para uso em uma regra de política, exceto as funções e funções definidas pelo usuário a seguir:All Resource Manager template functions are available to use within a policy rule, except the following functions and user-defined functions:

  • copyIndex()copyIndex()
  • deployment()deployment()
  • lista*list*
  • newGuid ()newGuid()
  • pickZones()pickZones()
  • providers()providers()
  • reference()reference()
  • resourceId()resourceId()
  • variables()variables()

As funções a seguir estão disponíveis para uso em uma regra de política, mas diferem do uso em um modelo de Azure Resource Manager:The following functions are available to use in a policy rule, but differ from use in an Azure Resource Manager template:

  • AddDays (dateTime, numberOfDaysToAdd)addDays(dateTime, numberOfDaysToAdd)
    • DateTime: [Required] String-String no formato de data/hora Universal ISO 8601 ' yyyy-mm-ddThh: mm: SS. fffffffZ 'dateTime: [Required] string - String in the Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'
    • numberOfDaysToAdd: [obrigatório] número inteiro de dias para adicionarnumberOfDaysToAdd: [Required] integer - Number of days to add
  • utcNow () – ao contrário de um modelo do Resource Manager, ele pode ser usado fora de defaultValue.utcNow() - Unlike a Resource Manager template, this can be used outside defaultValue.
    • Retorna uma cadeia de caracteres que é definida como a data e a hora atuais no formato universal ISO 8601 DateTime ' YYYY-MM-ddTHH: mm: SS. fffffffZ 'Returns a string that is set to the current date and time in Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'

Além disso, a função field está disponível para as regras de política.Additionally, the field function is available to policy rules. field é principalmente para uso com AuditIfNotExists e DeployIfNotExists para referenciar campos no recurso que estão sendo avaliados.field is primarily used with AuditIfNotExists and DeployIfNotExists to reference fields on the resource that are being evaluated. Um exemplo desse uso pode ser visto no exemplo DeployIfNotExists.An example of this use can be seen in the DeployIfNotExists example.

Exemplo de função de políticaPolicy function example

Este exemplo de regra de política usa a função de recurso resourceGroup para obter a propriedade name, combinada com a matriz concat e o objeto de função para criar uma condição like que impõe o nome do recurso para iniciar com o nome do grupo de recursos.This policy rule example uses the resourceGroup resource function to get the name property, combined with the concat array and object function to build a like condition that enforces the resource name to start with the resource group name.

{
    "if": {
        "not": {
            "field": "name",
            "like": "[concat(resourceGroup().name,'*')]"
        }
    },
    "then": {
        "effect": "deny"
    }
}

AliasesAliases

Você pode usar aliases de propriedade para acessar propriedades específicas para um tipo de recurso.You use property aliases to access specific properties for a resource type. Os aliases permitem restringir quais valores ou condições são permitidas para uma propriedade em um recurso.Aliases enable you to restrict what values or conditions are allowed for a property on a resource. Cada alias é mapeado para caminhos em diferentes versões de API para um tipo de recurso específico.Each alias maps to paths in different API versions for a given resource type. Durante a avaliação de política, o mecanismo de políticas obtém o caminho de propriedade para essa versão de API.During policy evaluation, the policy engine gets the property path for that API version.

A lista de aliases sempre está aumentando.The list of aliases is always growing. Para descobrir quais aliases atualmente são compatíveis com o Azure Policy, use um dos seguintes métodos:To find what aliases are currently supported by Azure Policy, use one of the following methods:

  • Azure PowerShellAzure PowerShell

    # Login first with Connect-AzAccount if not using Cloud Shell
    
    # Use Get-AzPolicyAlias to list available providers
    Get-AzPolicyAlias -ListAvailable
    
    # Use Get-AzPolicyAlias to list aliases for a Namespace (such as Azure Compute -- Microsoft.Compute)
    (Get-AzPolicyAlias -NamespaceMatch 'compute').Aliases
    
  • CLI do AzureAzure CLI

    # Login first with az login if not using Cloud Shell
    
    # List namespaces
    az provider list --query [*].namespace
    
    # Get Azure Policy aliases for a specific Namespace (such as Azure Compute -- Microsoft.Compute)
    az provider show --namespace Microsoft.Compute --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"
    
  • API REST / ARMClientREST API / ARMClient

    GET https://management.azure.com/providers/?api-version=2017-08-01&$expand=resourceTypes/aliases
    

Noções básicas sobre o alias [*]Understanding the [*] alias

Vários aliases disponíveis têm uma versão que é exibida como um nome "normal" e outra que tem [*] anexado a ela.Several of the aliases that are available have a version that appears as a 'normal' name and another that has [*] attached to it. Por exemplo:For example:

  • Microsoft.Storage/storageAccounts/networkAcls.ipRules
  • Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]

O alias ' normal ' representa o campo como um único valor.The 'normal' alias represents the field as a single value. Esse campo é para cenários de comparação de correspondência exata quando o conjunto inteiro de valores deve ser exatamente o mesmo definido, nem mais nem menos.This field is for exact match comparison scenarios when the entire set of values must be exactly as defined, no more and no less.

O alias [*] torna possível comparar com o valor de cada elemento na matriz e propriedades específicas de cada elemento.The [*] alias makes it possible to compare against the value of each element in the array and specific properties of each element. Essa abordagem possibilita comparar as propriedades do elemento para ' If None of ', ' if any of ', ou ' If All of '.This approach makes it possible to compare element properties for 'if none of', 'if any of', or 'if all of' scenarios. Usando ipRules [*] , um exemplo seria validar se cada ação é Deny, mas não se preocupa com quantas regras existem ou qual é o valor de IP.Using ipRules[*], an example would be validating that every action is Deny, but not worrying about how many rules exist or what the IP value is. Esta regra de exemplo verifica se há correspondências de ipRules [*]. valor para 10.0.4.1 e aplica o effecttype somente se ele não encontrar pelo menos uma correspondência:This sample rule checks for any matches of ipRules[*].value to 10.0.4.1 and applies the effectType only if it doesn't find at least one match:

"policyRule": {
    "if": {
        "allOf": [
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
                "exists": "true"
            },
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value",
                "notEquals": "10.0.4.1"
            }
        ]
    },
    "then": {
        "effect": "[parameters('effectType')]"
    }
}

Para obter mais informações, consulte avaliando o alias [*].For more information, see evaluating the [*] alias.

IniciativasInitiatives

Iniciativas permitem que você agrupe várias definições de políticas relacionadas para simplificar atribuições e gerenciamento, pois você trabalha com um grupo como um único item.Initiatives enable you to group several related policy definitions to simplify assignments and management because you work with a group as a single item. Por exemplo, você pode agrupar as definições de política de marcação relacionadas em uma única iniciativa.For example, you can group related tagging policy definitions into a single initiative. Em vez de atribuir cada política individualmente, você aplica a iniciativa.Rather than assigning each policy individually, you apply the initiative.

O exemplo a seguir ilustra como criar uma iniciativa para lidar com duas marcas: costCenter e productName.The following example illustrates how to create an initiative for handling two tags: costCenter and productName. Ele usa duas políticas internas para aplicar o valor da marca padrão.It uses two built-in policies to apply the default tag value.

{
    "properties": {
        "displayName": "Billing Tags Policy",
        "policyType": "Custom",
        "description": "Specify cost Center tag and product name tag",
        "parameters": {
            "costCenterValue": {
                "type": "String",
                "metadata": {
                    "description": "required value for Cost Center tag"
                }
            },
            "productNameValue": {
                "type": "String",
                "metadata": {
                    "description": "required value for product Name tag"
                }
            }
        },
        "policyDefinitions": [{
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            }
        ]
    },
    "id": "/subscriptions/<subscription-id>/providers/Microsoft.Authorization/policySetDefinitions/billingTagsPolicy",
    "type": "Microsoft.Authorization/policySetDefinitions",
    "name": "billingTagsPolicy"
}

Próximas etapasNext steps