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 tags, uma política Modificar deve ter o modo definido como a indexed 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 para máquinas virtuais ou Conjuntos de Escala de identity.type Máquina Virtual.
  • 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, Append é recomendado se você não conseguir criar uma identidade gerenciada ou Modify ainda não oferecer suporte ao alias para a propriedade de recurso.

Modificar avaliação

Modificar avalia antes que a solicitação seja processada por um Provedor 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 corresponde ao modify 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 Modificar definições que incluem aliases use o efeito de conflito de auditoria 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 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 você aplica uma política que modifica marcas em uma 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 suas propriedades pai não forem incluídas na solicitação, essa omissão é assumida como 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 tem todas as subpropriedades que definem as permissões necessárias para correção e as operations usadas para adicionar, atualizar ou remover valores de modify tag.

  • roleDefinitionIds (obrigatório)
    • Essa propriedade deve incluir uma matriz de cadeias de caracteres que correspondam ao ID da função de controle de acesso baseado em função acessível pela assinatura. Para obter mais informações, consulte remediation - configure the policy definition.
    • A função definida deve incluir todas as operações concedidas à função de Colaborador .
  • 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)
        • Define a ação a ser executada em um recurso correspondente. As opções são: addOrReplace, Adde Remove.
        • Add comporta-se de forma semelhante ao efeito de apêndice .
        • 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 para definir a tag.
        • Esta propriedade é necessária se operation for addOrReplace ou Add.
      • condition (facultativo)
        • Uma cadeia de caracteres que contém uma expressão de linguagem da Política do Azure com funções de Política que é avaliada 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 marca:

  • Define a environment tag como "Test" mesmo que ela já exista com um valor diferente.
  • Remove 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:

Operation Description
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 e substitua as environment tags existentes environment 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 env tag e adicione a tag ou substitua environment as tags existentes 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