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 deidentity.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 commodify
o .
- Use
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 casodeleteRetentionPolicy
, 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 dasoperations
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.
- 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
- Valores disponíveis: auditar, negar, desativar.
- O valor padrão é negar.
- Determina qual definição de política "ganha" se mais de uma definição de política modificar a mesma propriedade ou quando a
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
,Add
eRemove
. Add
comporta-se de forma semelhante ao efeito de apêndice .Remove
é suportado apenas para tags de recursos.
- Define a ação a ser executada em um recurso correspondente. As opções são:
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
, field
e 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
- Analise exemplos em Exemplos de Política do Azure.
- Reveja 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 não compatíveis.
- Revise os grupos de gerenciamento do Azure.