Compartilhar via


Efeito modify das definições do Azure Policy

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

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

Uma única regra modify pode ter qualquer quantidade de operações. As operações com suporte são:

  • Adicionar, substituir ou remover marcas de recursos. Somente marcas podem ser removidas. Para marcas, uma política Modificar deverá ter o modo definido como indexed, exceto se o recurso de destino for um grupo de recursos.
  • Adicionar ou substituir o valor do tipo de identidade gerenciada (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 Dimensionamento de Máquinas Virtuais.
  • Adicionar ou substituir 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 modify.

Importante

Caso você esteja gerenciando marcas, recomendamos o uso de Modify em vez de Append, pois Modify fornece tipos de operação adicionais e a capacidade de corrigir os recursos existentes. No entanto, Append é recomendado se você não consegue criar uma identidade gerenciada ou Modify ainda não dá suporte ao alias na propriedade de recurso.

Avaliação de Modify

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

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

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

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

Importante

Recomendamos que as definições Modify que incluem aliases usem o efeito conflict de audit para evitar solicitações com falha usando versões de API em que a propriedade mapeada não é 'Modificável'. Se o mesmo alias se comporta de maneira diferente entre as versões de API, as operações de modify condicionais podem ser usadas para determinar a operação modify usada para cada versão de 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 efeito modify é executada como parte de um ciclo de avaliação, ela não faz alterações em recursos já existentes. Em vez disso, ele marca qualquer recurso que atenda à condição if como não compatível, para que eles possam ser corrigidos por meio de uma tarefa de correção.
  • Não aplicável: quando a condição de uma operação na matriz operations é 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 do conflito estiver definido como negar, a solicitação será bloqueada. Se o efeito de conflito estiver definido como auditoria, a solicitação será permitida, mas a operação modify será ignorada.
  • Propriedade não presente: se uma propriedade não estiver presente no conteúdo 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", nesse caso deleteRetentionPolicy, não estiver presente na solicitação, a modificação será ignorada porque essa propriedade será omitida intencionalmente. Para obter 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 campo identity.type em um recurso diferente de uma Máquina Virtual ou Um Conjunto de Dimensionamento de Máquinas Virtuais, a avaliação da política é ignorada completamente para que a modificação não seja executada. Nesse caso, o recurso é considerado não aplicável à política.

Exemplo de propriedade não presente

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

Imagine que você aplique uma política que modifique marcas em uma VM (máquina virtual). Sempre que a VM é atualizada, como durante o redimensionamento ou alterações em disco, as marcas são atualizadas de acordo com o conteúdo da VM. Isso ocorre porque as marcas 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á do conteúdo do recurso. Se você tentar modificar as propriedades que não estão incluídas no conteúdo da atualização, a modificação não ocorrerá. Por exemplo, isso pode acontecer ao corrigir a propriedade assessmentMode de uma VM (alias Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). A propriedade é "aninhada", portanto, se suas propriedades pai não forem incluídas na solicitação, essa omissão será considerada intencional e a modificação será ignorada. Para que a modificação ocorra, o conteúdo do recurso deve conter esse contexto.

Propriedades de Modify

A propriedade details do efeito modify tem todas as subpropriedades que definem as permissões necessárias para a correção e operations usadas para adicionar, atualizar ou remover valores de marca.

  • roleDefinitionIds (obrigatório)
    • Essa propriedade deve incluir uma matriz de cadeias de caracteres que correspondem à ID de controle de acesso baseado em função que pode ser acessada pela assinatura. Para saber mais, confira correção – configurar a definição de política.
    • A função definida deve incluir todas as operações concedidas à função de Colaborador.
  • conflictEffect (opcional)
    • Determina qual definição de política “vence” se mais de uma definição de política modifica a mesma propriedade ou quando a operação modify não funciona no alias especificado.
      • Em recursos novos ou atualizados, a definição de política com deny tem precedência. As definições de política com audit ignoram todas 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 audit, nenhuma das operations das definições de política conflitantes será processada.
      • Em recursos existentes, se mais de uma definição de política tiver o efeito Negar, o status de conformidade será Conflito. Se uma ou menos definições de política tiverem o efeito Negar, cada atribuição retornará o status de conformidade Fora de conformidade.
    • Valores disponíveis: audit, deny e disabled.
    • O valor padrão é deny.
  • operations (obrigatório)
    • Uma matriz de todas as operações de marca a serem concluídas em recursos correspondentes.
    • Propriedades:
      • operation (obrigatório)
        • Define a ação a ser tomada em um recurso correspondente. As opções são addOrReplace, Add e Remove.
        • Add se comporta de forma semelhante ao efeito acrescentar.
        • Remove só é compatível com marcas de recurso.
      • field (obrigatório)
        • A marca para adicionar, substituir ou remover. Os nomes de marca devem aderir à mesma convenção de nomenclatura dos outros campos.
      • value (opcional)
        • O valor a ser definido para a marca.
        • Essa propriedade será necessária se operation for addOrReplace ou Add.
      • condition (opcional)
        • Uma cadeia de caracteres que contém uma expressão de linguagem do Azure Policy com funções de Política que são avaliadas como true ou false.
        • Não dá suporte às seguintes funções de Política: field(), resourceGroup() e subscription().

Operações de Modify

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

  • Define a marca environment como "Test", mesmo que ela já exista com um valor diferente.
  • Remove a marca TempResource.
  • Define a marca Dept 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 propriedade operation oferece as seguintes opções:

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

Exemplos de Modify

Exemplo 1: Adicione a marca environment e substitua as marcas environment atuais 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 marca env e adicione a marca environment ou substitua as marcas existentes de environment por um valor com parâmetros:

"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: Garanta que uma conta de armazenamento não permita o acesso público de blob e a operação modify só seja aplicada ao avaliar solicitações com a versão de 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óximas etapas