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 oidentity.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 commodify
.
- Use
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çãoif
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 casodeleteRetentionPolicy
, 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 dasoperations
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.
- 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
- Valores disponíveis: audit, deny e disabled.
- O valor padrão é deny.
- 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
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
eRemove
. Add
se comporta de forma semelhante ao efeito acrescentar.Remove
só é compatível com marcas de recurso.
- Define a ação a ser tomada em um recurso correspondente. As opções são
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()
esubscription()
.
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
- Examine os exemplos em amostras do Azure Policy.
- Revise a estrutura de definição do Azure Policy.
- Entenda como criar políticas de forma programática.
- Saiba como obter dados de conformidade.
- Saiba como corrigir recursos fora de conformidade.
- Revisar os Grupos de gerenciamento do Azure.