Estrutura de atribuição do Azure Policy

As atribuições de políticas definem quais recursos são avaliados por uma definição de política ou iniciativa. Além disso, a atribuição de política pode determinar os valores de parâmetros para esse grupo de recursos no momento da atribuição, possibilitando a reutilização de definições de política que abordam as mesmas propriedades de recurso com diferentes necessidades de conformidade.

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 solicitação de atribuição de política de exemplo no modo DoNotEnforce com parâmetros:

{
  "properties": {
    "displayName": "Enforce resource naming rules",
    "description": "Force resource names to begin with DeptA and end with -LC",
    "definitionVersion": "1.*.*",
    "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": []
  }
}

Escopo

O escopo usado para o momento de criação do recurso de atribuição é o principal fator de aplicabilidade de recursos. Para mais informações sobre o escopo de atribuição, confira Entender o escopo na Azure Policy.

ID e versão de definição de política (versão prévia)

Esse campo deve ser o nome do caminho completo de uma definição de política ou uma definição de iniciativa. O 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. A recomendação é que, se várias políticas forem frequentemente atribuídas juntas, use uma iniciativa em vez disso.

Para definições e iniciativas integradas, você pode usar o definitionVersion específico para avaliar. Por padrão, a versão é definida como a versão principal mais recente, com ingestão automática de alterações menores e patches.

  • Para ingerir automaticamente as alterações secundárias da definição, o número da versão deve ser #.*.*. O curinga representa a ingestão automática de atualizações.
  • Para fixar em um caminho de versão secundária, o formato de versão deve ser #.#.*.
  • Todas as alterações de patch devem ser ingeridas automaticamente para fins de segurança. As alterações de patch são limitadas a alterações de texto e cenários de emergência.

Nome de exibição e descrição

Você usa displayName e description para identificar a atribuição de política e fornecer contexto para seu uso com o conjunto específico de recursos. displayName tem um comprimento máximo de 128 caracteres e description 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.
  • 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.

Propriedades de metadados específicas do cenário

  • 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 nomeado 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}"
        }
    }
    
  • 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 são usados, a Azure Policy só avalia os recursos que são 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 você estiver pronto para expandir o escopo de avaliação para a política, basta atualizar 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 selectors. Para ser aplicável a um seletor de recursos, um recurso deve atender aos requisitos especificados por todos os seletores. Além disso, até 10 resourceSelectors 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 overrides opcional permite que você altere o efeito de uma definição de política sem alterar a definição de política subjacente ou usar um efeito com parâmetros na definição de política.

Um caso de uso comum para substituições em efeito 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 apenas um 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 desta política audit pode ser substituído por disabled através de uma substituição na atribuição da iniciativa, como mostrado no exemplo 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"
}

Outro caso de uso comum para substituições é a distribuição de uma nova versão de uma definição. Para obter as etapas recomendadas para atualizar com segurança uma versão de atribuição, consulte Implantação segura de política.

Substituições têm as seguintes propriedades:

  • kind: A propriedade que a atribuição substitui. Os tipos com suporte são policyEffect e policyVersion.

  • value: o novo valor que substitui o valor existente. Para kind: policyEffect, os valores com suporte são efeitos. Para kind: policyVersion, o número de versão com suporte deve ser maior ou igual ao definitionVersion especificado na atribuição.

  • 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 restringe o escopo da substituição. Valores permitidos para kind: policyEffect:

      • policyDefinitionReferenceId: Essa propriedade especifica quais definições de política dentro de uma atribuição de iniciativa devem assumir a substituição do efeito.

      • 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.

      Valor permitido para kind: policyVersion:

      • 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.
    • 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.

Uma única substituição pode ser usada para substituir o efeito de várias políticas, especificando vários valores na matriz policyDefinitionReferenceId. Uma única substituição pode ser usada para até 50 policyDefinitionReferenceId, e uma única atribuição de política pode conter até 10 substituições, avaliadas na ordem em que foram 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 enforcementMode oferece 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 Atividade do Azure.

Este cenário é comumente chamado de What If e está alinhado às práticas de implantação segura. 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 estiver 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 recurso filho ou um recurso filho não precisar ter a definição aplicada, cada um deles poderá ser excluído da avaliação por meio da configuração notScopes. Essa propriedade é uma matriz para habilitar a exclusão de um ou mais contêineres de recursos ou recursos da avaliaçã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.

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 mais informações, confira propriedades das 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 deployIfNotExists ou modify, é necessário ter uma propriedade de identidade para fazer a correção em recursos sem conformidade. Quando uma atribuição usa uma identidade, o usuário também deve especificar uma localização 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/{rgName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
  }
},

Próximas etapas