Partilhar via


Estrutura de atribuição do Azure Policy

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

Você usa JavaScript Object Notation (JSON) para criar uma atribuição de política. A atribuição de política 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": []
  }
}

Âmbito

O escopo usado para o tempo de criação do recurso de atribuição é o principal driver da aplicabilidade do recurso. Para obter mais informações sobre o escopo da atribuição, consulte Entender o escopo na Política do Azure.

ID e versão da definição da política (visualização)

Este campo deve ser o nome completo do caminho de uma definição de política ou de 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 é 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 internas, você pode usar as definitionVersion quais avaliar especificamente. Por padrão, a versão é definida para a versão principal mais recente e autoinge alterações secundárias e de patch.

  • Para automatizar quaisquer pequenas alterações da definição, o número da versão seria #.*.*. O curinga representa a ingestão automática de atualizações.
  • Para fixar em um caminho de versão secundária, o formato da versão seria #.#.*.
  • Todas as alterações de patch devem ser autoinjested para fins de segurança. As alterações de patch são limitadas a alterações de texto e cenários de quebra de vidro.

Nome a apresentar e descrição

Você usa displayName e description identifica a atribuição de política e fornece 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 opcional metadata armazena informações sobre a atribuição de política. Os clientes podem definir quaisquer propriedades e valores úteis para sua organização no metadata. No entanto, existem algumas propriedades comuns usadas pela Política do Azure. Cada metadata propriedade tem um limite de 1.024 caracteres.

Propriedades comuns de metadados

  • assignedBy (string): O nome amigável da entidade de segurança que criou a atribuição.
  • createdBy (string): O GUID da entidade de segurança que criou a atribuição.
  • createdOn (string): O formato Universal ISO 8601 DateTime da hora de criação da atribuição.
  • updatedBy (string): o nome amigável da entidade de segurança que atualizou a atribuição, se houver.
  • updatedOn (string): O formato Universal ISO 8601 DateTime da hora de atualização da atribuição, se houver.

Propriedades de metadados específicas do cenário

  • parameterScopes (object): 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 de recursos usado no Portal para fornecer a lista de recursos disponíveis combinando strongType. Portal define esse valor se o escopo for diferente do escopo da atribuição. Se definido, uma edição da atribuição de política no Portal define 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 é para um parâmetro strongType chamado backupPolicyId que define um escopo para seleção de parameterScopes 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 manter evidências para atestados para atribuições de política com efeito manual . A displayName propriedade é o nome da conta de armazenamento. A evidenceStorageAccountID propriedade é o ID do recurso da conta de armazenamento. A evidenceBlobContainer propriedade é o nome do contêiner de blob no qual você planeja armazenar as evidências.

    {
      "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 recursos

A propriedade opcional resourceSelectors facilita as práticas de implantação segura (SDP), permitindo que você implante gradualmente atribuições de política com base em fatores como local do recurso, tipo de recurso ou se um recurso tem um local. Quando os seletores de recursos são usados, a Política do Azure avalia apenas os recursos que são aplicáveis às especificações feitas nos seletores de recursos. Os seletores de recursos também podem ser utilizados para restringir o âmbito das isenções da mesma forma.

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 da sua 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. Os valores permitidos são:

      • resourceLocation: Esta propriedade é usada para selecionar recursos com base em seu tipo. Não pode ser usado no mesmo seletor de recursos que resourceWithoutLocationo .

      • resourceType: Esta propriedade é usada para selecionar recursos com base em seu tipo.

      • resourceWithoutLocation: Esta propriedade é usada para selecionar recursos no nível da assinatura que não têm um local. Atualmente só suporta subscriptionLevelResources. Não pode ser usado no mesmo seletor de recursos que resourceLocationo .

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

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

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

Substituições

A propriedade opcional overrides permite alterar o efeito de uma definição de política sem alterar a definição de política subjacente ou usar um efeito parametrizado na definição de política.

Um caso de uso comum para substituições de efeito são iniciativas políticas com um grande número de definições de políticas associadas. Nessa situação, o gerenciamento de múltiplos efeitos de política pode consumir um esforço administrativo significativo, especialmente quando o efeito precisa ser atualizado de tempos em tempos. As substituições podem ser usadas para atualizar simultaneamente os efeitos de várias definições de política dentro de uma iniciativa.

Vamos ver um exemplo. Imagine que você tem uma iniciativa de política chamada CostManagement que inclui uma definição de política personalizada com policyDefinitionReferenceId corpVMSizePolicy e um único efeito de audit. Suponha que você queira atribuir a iniciativa CostManagement, mas ainda não queira ver a conformidade relatada para essa política. O efeito desta audit política pode ser substituído por disabled uma substituição na atribuição da iniciativa, conforme 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 implementação de uma nova versão de uma definição. Para obter as etapas recomendadas sobre como atualizar com segurança uma versão de atribuição, consulte Implantação segura de políticas.

As substituições têm as seguintes propriedades:

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

  • value: O novo valor que substitui o valor existente. Para kind: policyEffect, os valores suportados são efeitos. Para kind: policyVersion, o número de versão suportado 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 a 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: Esta propriedade especifica quais definições de política dentro de uma atribuição de iniciativa devem assumir a substituição de efeito.

      • resourceLocation: Esta propriedade é usada para selecionar recursos com base em seu tipo. Não pode ser usado no mesmo seletor de recursos que resourceWithoutLocationo .

      Valor permitido para kind: policyVersion:

      • resourceLocation: Esta propriedade é usada para selecionar recursos com base em seu tipo. Não pode ser usado no mesmo seletor de recursos que resourceWithoutLocationo .
    • in: A lista de valores permitidos para o .kind Não pode ser usado com notIn. Pode conter até 50 valores.

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

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

Modo de imposição

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

Esse cenário é comumente chamado de What If e se alinha às práticas de implantação seguras. enforcementMode é diferente do efeito Desativado, uma vez que esse efeito impede a execução da avaliação dos recursos.

Esta propriedade tem os seguintes valores:

Modo Valor JSON Tipo Remediar manualmente Erro do registo de atividades Description
Ativado Predefinição string Yes Yes O efeito da política é imposto durante a criação ou atualização de recursos.
Desativado DoNotEnforce string Yes No O efeito da política não é imposto durante a criação ou atualização de recursos.

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.

Âmbitos 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 recurso filho não tiver a definição aplicada, cada um poderá ser excluído da avaliação definindo notScopes. Esta propriedade é uma matriz para permitir 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.

Nota

Um recurso excluído é diferente de um recurso isento . Para obter mais informações, veja Compreender o âmbito no Azure Policy.

Mensagens de não conformidade

Para definir uma mensagem personalizada que descreva 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. Este nó é uma matriz de message entradas. Esta mensagem personalizada é adicional à mensagem de erro padrão para não conformidade e é opcional.

Importante

As mensagens personalizadas para não conformidade só são suportadas 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, mensagens diferentes podem ser configuradas para cada definição de política na iniciativa. As mensagens usam o policyDefinitionReferenceId valor configurado na definição da iniciativa. Para obter mais informações, consulte 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

Este segmento da atribuição de política fornece os valores para os parâmetros definidos na definição de política ou na definição de iniciativa. Esse design torna possível reutilizar uma definição de política ou iniciativa com recursos diferentes, mas verificar valores ou resultados de negócios diferentes.

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

Neste exemplo, os parâmetros previamente definidos na definição de política são prefix e suffix. Esta atribuição de política específica é definida prefix como DeptA e suffix -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 e, ao mesmo tempo, proporcionando flexibilidade.

Identidade

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

Nota

Uma única 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óximos passos