Partilhar via


As definições de Política do Azure modificam o efeito

O modify efeito é usado para adicionar, atualizar ou remover propriedades ou tags em uma assinatura ou recurso durante a criação ou atualização. Os recursos não compatíveis existentes também podem ser remediados com uma tarefa de correção. As atribuições de política com efeito definido como Modificar exigem uma identidade gerenciada para fazer a correção. Um exemplo comum de uso do modify efeito é a atualização de tags em recursos como 'costCenter'.

Existem algumas nuances no comportamento de modificação para propriedades de recurso. Saiba mais sobre cenários em que a modificação é ignorada.

Uma única modify regra pode ter qualquer número de operações. As operações apoiadas são:

  • Adicione, substitua ou remova tags de recursos. Apenas as tags podem ser removidas. Para as tags, uma política Modificar deve ter o modo definido como indexed a menos que o recurso de destino seja um grupo de recursos.
  • Adicione ou substitua o valor do tipo de identidade gerenciado (identity.type) de máquinas virtuais e Conjuntos de Dimensionamento de Máquinas Virtuais. Você só pode modificar o identity.type para máquinas virtuais ou Conjuntos de Escala de Máquinas Virtuais.
  • Adicione ou substitua os valores de determinados aliases.
    • Use Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } no Azure PowerShell 4.6.0 ou superior para obter uma lista de aliases que podem ser usados com modifyo .

Importante

Se você estiver gerenciando tags, é recomendável usar Modificar em vez de Acrescentar, pois Modificar fornece mais tipos de operação e a capacidade de corrigir recursos existentes. No entanto, recomenda-se utilizar Append se não for capaz de criar uma identidade gerida ou se Modify ainda não suportar o alias para a propriedade do recurso.

Modificar avaliação

Modifica avalia antes que a solicitação seja processada por um prestador de recursos durante a criação ou atualização de um recurso. As modify operações são aplicadas ao conteúdo da solicitação quando a if condição da regra de política é atendida. Cada modify operação pode especificar uma condição que determina quando ela é aplicada.

Quando um alias é especificado, mais verificações são realizadas para garantir que a modify operação não altere o conteúdo da solicitação de uma forma que faça com que o provedor de recursos a rejeite:

  • A propriedade para a qual o alias mapeia é marcada como Modificável na versão da API da solicitação.
  • O tipo de token na operação modify corresponde ao tipo de token esperado para a propriedade na versão da API da solicitação.

Se qualquer uma dessas verificações falhar, a avaliação da política retornará ao especificado conflictEffect.

Importante

É recomendável que as definições que incluem aliases para modificação usem o efeito de conflito de auditoria para evitar falhas em solicitações ao usar versões de API onde a propriedade mapeada não é 'Modificável'. Se o mesmo alias se comportar de forma diferente entre as versões da API, as operações de modificação condicional poderão ser usadas para determinar a operação usada para cada versão da modify API.

Modificação ignorada

Há alguns casos em que as operações de modificação são ignoradas durante a avaliação:

  • Recursos existentes: quando uma definição de política usando o modify efeito é executada como parte de um ciclo de avaliação, ela não faz alterações nos recursos que já existem. Em vez disso, ele marca qualquer recurso que atenda à if condição como não compatível, para que possa ser corrigido por meio de uma tarefa de correção.
  • Não aplicável: Quando a condição de uma operação no operations array é avaliada como false, essa operação específica é ignorada.
  • Propriedade não modificável: se um alias especificado para uma operação não for modificável na versão da API da solicitação, a avaliação usará o efeito de conflito. Se o efeito de conflito estiver definido como negar, a solicitação será bloqueada. Se o efeito de conflito estiver definido para auditoria, a solicitação será permitida, mas a modify operação será ignorada.
  • Propriedade não presente: Se uma propriedade não estiver presente na carga útil do recurso da solicitação, a modificação poderá ser ignorada. Em alguns casos, as propriedades modificáveis são aninhadas em outras propriedades e têm um alias como Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled. Se a propriedade "pai", neste caso deleteRetentionPolicy, não estiver presente na solicitação, a modificação será ignorada porque essa propriedade é presumida como omitida intencionalmente. Para um exemplo prático, vá para a seção Exemplo de propriedade não presente.
  • Operação de identidade não VM ou VMSS: quando uma operação de modificação tenta adicionar ou substituir o identity.type campo em um recurso diferente de uma Máquina Virtual ou Conjunto de Escala de Máquina Virtual, a avaliação da política é ignorada completamente para que a modificação não seja executada. Neste caso, o recurso é considerado não aplicável à apólice.

Exemplo de imóvel não presente

A modificação das propriedades do recurso depende da solicitação da API e da carga útil atualizada do recurso. A carga útil pode depender do cliente usado, como o portal do Azure, e de outros fatores, como o provedor de recursos.

Imagine que aplicas uma política que modifica tags numa máquina virtual (VM). Sempre que a VM é atualizada, como durante o redimensionamento ou alterações de disco, as tags são atualizadas de acordo, independentemente do conteúdo da carga útil da VM. Isso ocorre porque as tags são independentes das propriedades da VM.

No entanto, se você aplicar uma política que modifica propriedades em uma VM, a modificação dependerá da carga útil do recurso. Se você tentar modificar propriedades que não estão incluídas na carga útil de atualização, a modificação não ocorrerá. Por exemplo, isso pode acontecer ao aplicar patches na assessmentMode propriedade de uma VM (alias Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). A propriedade está "aninhada", portanto, se as suas propriedades mãe não forem incluídas na solicitação, essa omissão é considerada intencional e a modificação é ignorada. Para que a modificação ocorra, a carga útil do recurso deve conter esse contexto.

Modificar propriedades

A details propriedade do efeito possui todas as subpropriedades que definem as permissões necessárias para remediação e as modify utilizadas para adicionar, atualizar ou remover valores de tag operations.

  • roleDefinitionIds (obrigatório)
  • conflictEffect (facultativo)
    • Determina qual definição de política "ganha" se mais de uma definição de política modificar a mesma propriedade ou quando a modify operação não funcionar no alias especificado.
      • Para recursos novos ou atualizados, a definição de política com negação tem precedência. As definições de política com auditoria ignoram tudo operations. Se mais de uma definição de política tiver o efeito negar, a solicitação será negada como um conflito. Se todas as definições de política tiverem auditoria, nenhuma das operations definições de política conflitantes será processada.
      • Para recursos existentes, se mais de uma definição de política tiver o efeito negar, o status de conformidade será Conflito. Se uma ou mais definições de política tiverem o efeito negar, cada atribuição retornará um status de conformidade de Não compatível.
    • Valores disponíveis: auditar, negar, desativar.
    • O valor padrão é negar.
  • operations (obrigatório)
    • Uma matriz de todas as operações de tag a serem concluídas em recursos correspondentes.
    • Propriedades:
      • operation (obrigatório)
        • Defina a ação a ser executada num recurso correspondente. As opções são: addOrReplace, Adde Remove.
        • Add comporta-se de forma semelhante ao efeito de adicionar.
        • Remove é suportado apenas para tags de recursos.
      • field (obrigatório)
        • A tag a ser adicionada, substituída ou removida. Os nomes das tags devem seguir a mesma convenção de nomenclatura para outros campos.
      • value (facultativo)
        • O valor a atribuir à tag.
        • Esta propriedade é obrigatória se operation for addOrReplace ou então Add.
      • condition (facultativo)
        • Uma cadeia de caracteres que contém uma expressão na linguagem de política do Azure com funções de política que são avaliadas como verdadeiro ou falso.
        • Não suporta as seguintes funções de política: field(), resourceGroup(), subscription().

Modificar operações

A operations matriz de propriedades torna possível alterar várias tags de maneiras diferentes a partir de uma única definição de política. Cada operação é composta por operation, fielde value propriedades. O operation determina o que a tarefa de correção faz com as tags, field determina qual tag é alterada e value define a nova configuração para essa tag. O exemplo a seguir faz as seguintes alterações de etiquetas:

  • Define a environment tag como "Test" mesmo que ela já exista com um valor diferente.
  • Remova a tag TempResource.
  • Define a Dept tag como o parâmetro de política DeptName configurado na atribuição de política.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

A operation propriedade tem as seguintes opções:

Operação Descrição
addOrReplace Adiciona a propriedade definida ou tag e valor ao recurso, mesmo que a propriedade ou tag já exista com um valor diferente.
add Adiciona a propriedade definida ou marca e valor ao recurso.
remove Remove a tag definida do recurso. Suporte apenas para tags.

Modificar exemplos

Exemplo 1: Adicione a tag environment e substitua as tags environment existentes por "Test":

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

Exemplo 2: Remova a tag env e adicione a tag environment ou substitua as tags environment por um valor parametrizado.

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

Exemplo 3: Certifique-se de que uma conta de armazenamento não permita acesso público de blob, a modify operação é aplicada somente ao avaliar solicitações com a versão da API maior ou igual 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
      }
    ]
  }
}

Próximos passos