Estrutura de atribuição do Azure Policy

As atribuições de políticas são usadas pelo Azure Policy para definir quais recursos são atribuídos a quais políticas ou iniciativas. A atribuição de políticas pode determinar os valores dos parâmetros para esse grupo de recursos no momento da atribuição, possibilitando reutilizar as definições de política que abordam as mesmas propriedades de recurso com diferentes necessidades de conformidade.

Observação

Para obter mais informações sobre o escopo do Azure Policy, confira Entender o escopo no Azure Policy.

Você usa JSON (JavaScript Object Notation) para criar uma atribuição de política. A atribuição de políticas contém elementos para:

Por exemplo, o JSON a seguir mostra uma atribuição de políticas no modo DoNotEnforce com parâmetros dinâmicos:

{
    "properties": {
        "displayName": "Enforce resource naming rules",
        "description": "Force resource names to begin with DeptA and end with -LC",
        "metadata": {
            "assignedBy": "Cloud Center of Excellence"
        },
        "enforcementMode": "DoNotEnforce",
        "notScopes": [],
        "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
        "nonComplianceMessages": [
            {
                "message": "Resource names must start with 'DeptA' and end with '-LC'."
            }
        ],
        "parameters": {
            "prefix": {
                "value": "DeptA"
            },
            "suffix": {
                "value": "-LC"
            }
        },
        "identity": {
            "type": "SystemAssigned"
        },
        "resourceSelectors": [],
        "overrides": []
    }
}

Todas as amostras do Azure Policy estão em Amostras do Azure Policy.

Nome de exibição e descrição

Use displayName e description para identificar a atribuição de políticas e fornecer contexto para seu uso com o conjunto de recursos específico. displayName tem um comprimento máximo de 128 caracteres e description tem um comprimento máximo de 512 caracteres.

Metadados

A propriedade metadata opcional armazena informações sobre a atribuição da política. Os clientes podem definir quaisquer propriedades e valores úteis para sua organização no metadata. No entanto, há algumas propriedades comuns usadas pelo Azure Policy. Cada propriedade metadata tem um limite de 1.024 caracteres.

Propriedades de metadados comuns

  • assignedBy (cadeia de caracteres): o nome amigável da entidade de segurança que criou a atribuição.

  • createdBy (cadeia de caracteres): o GUID da entidade de segurança que criou a atribuição.

  • createdOn (cadeia de caracteres): o formato de data/hora ISO 8601 universal da hora de criação da atribuição.

  • parameterScopes (objeto): uma coleção de pares chave-valor em que a chave corresponde a um nome de parâmetro strongType configurado e o valor define o escopo do recurso usado no Portal para fornecer a lista de recursos disponíveis por meio do strongType correspondente. O Portal definirá esse valor se o escopo for diferente do escopo de atribuição. Se definido, uma edição da atribuição de política no Portal definirá automaticamente o escopo do parâmetro para esse valor. No entanto, o escopo não está bloqueado para o valor e pode ser alterado para outro escopo.

    O exemplo a seguir de parameterScopes é para um parâmetro strongType chamado backupPolicyId que define um escopo para a seleção de recursos quando a atribuição é editada no Portal.

    "metadata": {
        "parameterScopes": {
            "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}"
        }
    }
    
  • updatedBy (cadeia de caracteres): o nome amigável da entidade de segurança que atualizou a atribuição, se houver.

  • updatedOn (cadeia de caracteres): o formato de data/hora ISO 8601 universal da hora da atualização da atribuição, se houver.

  • evidenceStorages (objeto): a conta de armazenamento padrão recomendada que deve ser usada para comprovar os atestados para as atribuições de política com um efeito de manual. A propriedade displayName é o nome da conta de armazenamento. A propriedade evidenceStorageAccountID é a ID do recurso da conta de armazenamento. A propriedade evidenceBlobContainer é o nome do contêiner de blob no qual você planeja armazenar a evidência.

    {
      "properties": {
        "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}",
        "metadata": {
          "evidenceStorages": [
            {
              "displayName": "Default evidence storage",
              "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}",
              "evidenceBlobContainer": "evidence-container"
            }
          ]
        }
      }
    }
    

Seletores de recurso

A propriedade opcional resourceSelectors facilita a SDP (prática de implantação segura), permitindo que você implemente gradativamente as atribuições de política de acordo com fatores como localização de recursos, tipo de recurso ou se um recurso tem um local. Quando os seletores de recursos forem usados, o Azure Policy avaliará apenas os recursos aplicáveis às especificações feitas nos seletores de recursos. Os seletores de recursos também podem ser usados para restringir o escopo das isenções da mesma maneira.

No cenário de exemplo a seguir, a nova atribuição de política é avaliada somente se o local do recurso for Leste dos EUA ou Oeste dos EUA.

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

Quando estiver pronto para expandir o escopo de avaliação para a política, basta modificar a atribuição. O exemplo a seguir mostra nossa atribuição de política com mais duas regiões do Azure adicionadas ao seletor SDPRegions. Observe que, neste exemplo, SDP significa Prática de Implantação Segura:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus", "centralus", "southcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

Os seletores de recursos têm as seguintes propriedades:

  • name: o nome do seletor de recursos.

  • selectors: (opcional) a propriedade usada para determinar qual subconjunto de recursos aplicável à atribuição de política deve ser avaliado quanto à conformidade.

    • kind: a propriedade de um seletor que descreve qual característica restringe o conjunto de recursos avaliados. Cada tipo só pode ser usado uma vez em um único seletor de recursos. Valores permitidos são:

      • resourceLocation: essa propriedade é usada para selecionar os recursos de acordo com o tipo. Não pode ser usado no mesmo seletor de recursos que resourceWithoutLocation.

      • resourceType: essa propriedade é usada para selecionar os recursos de acordo com o tipo.

      • resourceWithoutLocation: esta propriedade é usada para selecionar os recursos no nível da assinatura que não têm um local. No momento, há suporte somente para subscriptionLevelResources. Não pode ser usado no mesmo seletor de recursos que resourceLocation.

    • in: a lista de valores permitidos para o kind especificado. Não pode ser usado com notIn. Pode conter até 50 valores.

    • notIn: a lista de valores não permitidos para o kind especificado. Não pode ser usado com in. Pode conter até 50 valores.

Um seletor de recursos pode conter vários seletores. Para ser aplicável a um seletor de recursos, um recurso deve atender aos requisitos especificados por todos os seletores. Além disso, até dez seletores de recursos podem ser especificados em uma única atribuição. Os recursos no escopo são avaliados quando atendem a qualquer um desses seletores de recursos.

Substituições

A propriedade opcional overrides permite que você altere o efeito de uma definição de política, sem modificar a definição de política subjacente nem usar um efeito parametrizado na definição de política.

O caso de uso mais comum para substituições se refere a iniciativas de política com um grande número de definições de política associadas. Nessa situação, o gerenciamento de vários efeitos de política pode consumir um esforço administrativo considerável, especialmente quando o efeito precisa ser atualizado periodicamente. As substituições podem ser usadas para atualizar simultaneamente os efeitos de várias definições de política em uma iniciativa.

Vamos dar uma olhada em um exemplo. Imagine que você tem uma iniciativa de política chamada CostManagement, que inclui uma definição de política personalizada com policyDefinitionReferenceIdcorpVMSizePolicy e um único efeito de audit. Suponha que você queira atribuir a iniciativa CostManagement, mas ainda não quer ver a conformidade relatada para essa política. O efeito de "auditoria" dessa política pode ser substituído por "desabilitado" por meio de uma substituição na atribuição de iniciativa, conforme mostrado na amostra a seguir:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
        "overrides": [
            {
                "kind": "policyEffect",
                "value": "disabled",
                "selectors": [
                    {
                        "kind": "policyDefinitionReferenceId",
                        "in": [ "corpVMSizePolicy" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "CostManagement"
}

Substituições têm as seguintes propriedades:

  • kind: a propriedade que a atribuição substituirá. O tipo com suporte é policyEffect.

  • value: o novo valor que substitui o valor existente. Os valores compatíveis são efeitos.

  • selectors: (opcional) a propriedade usada para determinar qual escopo da atribuição de política deve assumir na substituição.

    • kind: a propriedade de um seletor que descreve qual característica restringirá o escopo da substituição. O valor permitido para kind: policyEffect é:

      • policyDefinitionReferenceId: especifica quais definições de política dentro de uma atribuição de iniciativa devem assumir a substituição do efeito.
    • in: a lista de valores permitidos para o kind especificado. Não pode ser usado com notIn. Pode conter até 50 valores.

    • notIn: a lista de valores não permitidos para o kind especificado. Não pode ser usado com in. Pode conter até 50 valores.

Observe que uma substituição pode ser usada para substituir o efeito de muitas políticas, especificando vários valores na matriz policyDefinitionReferenceId. Uma única substituição pode ser usada para até 50 policyDefinitionReferenceIds e uma única atribuição de política pode conter até 10 substituições, avaliadas na ordem em que são especificadas. Antes da criação da atribuição, o efeito escolhido na substituição é validado em relação à regra de política e à lista de valores permitidos de parâmetro (nos casos em que o efeito é parametrizado).

Modo de imposição

A propriedade impolicymode fornece aos clientes a capacidade de testar o resultado de uma política em recursos existentes sem iniciar o efeito da política ou disparar entradas no Log de atividades do Azure.

Esse cenário é conhecido como “What If” e alinha-se às práticas de implantação seguras. O enforcementMode é diferente do efeito Desabilitado, pois esse efeito impede que a avaliação de recursos aconteça.

Esta propriedade possui os seguintes valores:

Mode Valor JSON Tipo Corrigir manualmente Entrada do log de atividades Descrição
habilitado Padrão string Sim Sim O efeito de política é imposto durante a criação ou atualização do recurso.
Desabilitado DoNotEnforce string Sim Não O efeito de política não é imposto durante a criação ou atualização do recurso.

Se enforcementMode não for especificado em uma definição de política ou iniciativa, o valor Padrão será usado. As tarefas de correção podem ser iniciadas para políticas deployIfNotExists, mesmo quando enforcementMode está definido como DoNotEnforce.

Escopos excluídos

O escopo da atribuição inclui todos os contêineres de recursos filho e recursos filho. Se um contêiner de recursos filho ou um recurso filho não tiver a definição aplicada, cada um poderá ser excluído da avaliação definindo notScopes. Essa propriedade é uma matriz para habilitar a exclusão de um ou mais contêineres de recursos ou recursos da avaliação. O notScopes pode ser adicionado ou atualizado após a criação da atribuição inicial.

Observação

Um recurso excluído é diferente de um recurso isento. Para obter mais informações, veja Noções básicas do escopo no Azure Policy.

ID de definição de política

Esse campo deve ser o nome do caminho completo de uma definição de política ou uma definição de iniciativa. policyDefinitionId é uma cadeia de caracteres e não uma matriz. O conteúdo mais recente da definição ou iniciativa de política atribuída é recuperado sempre que a atribuição de política for avaliada. Recomenda-se que, em vez disso, várias políticas sejam atribuídas juntas, para usar uma iniciativa.

Mensagens de não conformidade

Para definir uma mensagem personalizada que descreve por que um recurso não está em conformidade com a definição de política ou iniciativa, defina nonComplianceMessages na definição de atribuição. O nó é uma matriz de entradas de message. Essa mensagem personalizada é um acréscimo à mensagem de erro padrão para não conformidade e é opcional.

Importante

As mensagens personalizadas de não conformidade são suportadas apenas em definições ou iniciativas com definições de modos do Resource Manager.

"nonComplianceMessages": [
    {
        "message": "Default message"
    }
]

Se a atribuição for para uma iniciativa, diferentes mensagens poderão ser configuradas para cada definição de política na iniciativa. As mensagens usam o valor policyDefinitionReferenceId configurado na definição da iniciativa. Para obter detalhes, veja as propriedades de definições de política.

"nonComplianceMessages": [
    {
        "message": "Default message"
    },
    {
        "message": "Message for just this policy definition by reference ID",
        "policyDefinitionReferenceId": "10420126870854049575"
    }
]

Parâmetros

Esse segmento da atribuição de políticas fornece os valores para os parâmetros definidos na definição de política ou definição de iniciativa. Esse design possibilita reutilizar uma definição de política ou iniciativa com recursos diferentes, mas verifica diferentes valores comerciais ou resultados.

"parameters": {
    "prefix": {
        "value": "DeptA"
    },
    "suffix": {
        "value": "-LC"
    }
}

Neste exemplo, os parâmetros definidos anteriormente na definição de política são prefix e suffix. Essa atribuição de políticas específica define prefix como DeptA e suffixpara -LC. A mesma definição de política é reutilizável com um conjunto diferente de parâmetros para um departamento diferente, reduzindo a duplicação e a complexidade das definições de política, oferecendo flexibilidade.

Identidade

Para atribuições de política com efeito definido como deployIfNotExist ou alterar, é necessário ter uma propriedade de identidade para fazer a correção em recursos não compatíveis. Ao usar a identidade, o usuário também deve especificar um local para a atribuição.

Observação

Uma só atribuição de política pode ser associada a apenas uma identidade gerenciada atribuída pelo sistema ou pelo usuário. No entanto, essa identidade pode ser atribuída a mais de uma função, se necessário.

# System-assigned identity
 "identity": {
    "type": "SystemAssigned"
  }
# User-assigned identity
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/SubscriptionID/resourceGroups/testResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
    }
  },

Próximas etapas