Estrutura de isenção do Azure Policy

O recurso de isenção do Azure Policy é usado para isentar uma hierarquia de recursos ou um recurso individual da avaliação de iniciativas ou definições. Os recursos isentos são levados em conta para a conformidade geral, mas não podem ser avaliados ou têm uma renúncia temporária. Para obter mais informações, consulte Entender a aplicabilidade no Azure Policy. As isenções do Azure Policy também funcionam com os seguintes modos do Resource Manager: Microsoft.Kubernetes.Data, Microsoft.KeyVault.Data e Microsoft.Network.Data.

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

Uma isenção de política é criada como um objeto filho na hierarquia de recursos ou o recurso individual concede a isenção. As isenções não podem ser criadas no nível do componente do modo de Provedor de recursos. Se o recurso pai ao qual a isenção se aplica for removido, a isenção também será removida.

Por exemplo, o JSON a seguir mostra uma isenção de política na categoria de renúncia de um recurso para uma atribuição de iniciativa chamada resourceShouldBeCompliantInit. O recurso é isento de apenas duas das definições de política na iniciativa: a definição de política personalizada customOrgPolicy (policyDefinitionReferenceId: requiredTags) e a definição de política interna de Locais permitidos (policyDefinitionReferenceId : allowedLocations):

{
  "id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/resourceIsNotApplicable",
  "apiVersion": "2020-07-01-preview",
  "name": "resourceIsNotApplicable",
  "type": "Microsoft.Authorization/policyExemptions",
  "properties": {
    "displayName": "This resource is scheduled for deletion",
    "description": "This resources is planned to be deleted by end of quarter and has been granted a waiver to the policy.",
    "metadata": {
      "requestedBy": "Storage team",
      "approvedBy": "IA",
      "approvedOn": "2020-07-26T08:02:32.0000000Z",
      "ticketRef": "4baf214c-8d54-4646-be3f-eb6ec7b9bc4f"
    },
    "policyAssignmentId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyAssignments/resourceShouldBeCompliantInit",
    "policyDefinitionReferenceId": [
      "requiredTags",
      "allowedLocations"
    ],
    "exemptionCategory": "waiver",
    "expiresOn": "2020-12-31T23:59:00.0000000Z",
    "assignmentScopeValidation": "Default"
  }
}

Nome de exibição e descrição

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

Metadados

A propriedade metadata permite criar qualquer propriedade filho necessária para armazenar informações relevantes. No exemplo acima, as propriedades requestedBy, approvedBy, approvedOn e ticketRef contêm valores de cliente para fornecer informações sobre quem solicitou e quem aprovou a isenção, quando isso aconteceu, além de um tíquete de acompanhamento interno da solicitação. Essas propriedades metadata são exemplos, mas não são necessárias, e metadata não está limitado a essas propriedades filho.

ID de atribuição de política

Este campo deve conter o nome completo do caminho de uma atribuição de política ou de iniciativa. O policyAssignmentId é uma cadeia de caracteres e não uma matriz. Essa propriedade define de qual atribuição a hierarquia de recursos pai ou o recurso individual está isento.

ID de definição de política

Se policyAssignmentId destinar-se a uma atribuição de iniciativa, a propriedade policyDefinitionReferenceId poderá ser usada para especificar de qual definição de política na iniciativa o recurso em questão está isento. Como o recurso pode estar isento de uma ou mais definições de política incluídas, essa propriedade é uma matriz. Os valores devem corresponder aos contidos na definição de iniciativa nos campos policyDefinitions.policyDefinitionReferenceId.

categoria da isenção

Há duas categorias de isenção que podem ser usadas para agrupar isenções:

  • Mitigado: a isenção é concedida porque a intenção da política é atendida por outro método.
  • Renúncia: a isenção é concedida porque o estado sem conformidade do recurso é aceito temporariamente. Essa categoria também é útil para excluir um recurso ou uma hierarquia de recursos de uma ou mais definições em uma iniciativa, mas não de toda a iniciativa.

Expiração

Para definir quando uma hierarquia de recursos ou um recurso individual não está mais isento de uma atribuição, configure a propriedade expiresOn. Essa propriedade opcional deve estar no formato de data/hora universal ISO 8601 yyyy-MM-ddTHH:mm:ss.fffffffZ.

Observação

As isenções de política não são excluídas quando a data expiresOn é atingida. O objeto é preservado para manutenção de registro, mas a isenção não é mais atendida.

Seletores de recurso

As isenções dão suporte a uma propriedade resourceSelectors opcional que funciona da mesma forma em isenções que em atribuições. Essa propriedade permite a distribuição gradual ou a reversão de uma isenção para determinados subconjuntos de recursos de maneira controlada com base no tipo de recurso, no local do recurso ou se o recurso tem um local. Mais detalhes sobre como usar seletores de recursos podem ser encontrados na estrutura de atribuição. O seguinte JSON é um exemplo de isenção que usa seletores de recursos. Neste exemplo, somente recursos em westcentralus estarão isentos da atribuição de política:

{
  "properties": {
    "policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "policyDefinitionReferenceId": [
      "limitSku",
      "limitType"
    ],
    "exemptionCategory": "Waiver",
    "resourceSelectors": [
      {
        "name": "TemporaryMitigation",
        "selectors": [
          {
            "kind": "resourceLocation",
            "in": [
              "westcentralus"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
  "type": "Microsoft.Authorization/policyExemptions",
  "name": "DemoExpensiveVM"
}

Os seguintes seletores kinds de recursos são suportados no objeto de isenções de políticas:

  • resourceLocation: Esta propriedade é usada para selecionar recursos com base em sua localização. Não pode ser usado no mesmo seletor de recursos que resourceWithoutLocation.
  • resourceType: Esta propriedade é usada para selecionar recursos com base no seu tipo.
  • resourceWithoutLocation: Esta propriedade é usada para selecionar recursos no nível de assinatura que não possuem localização. Atualmente, só suporta subscriptionLevelResources. Não pode ser usado no mesmo seletor de recursos que resourceLocation.
  • em: A lista de valores permitidos para o tipo especificado. Não pode ser usado com o notIn. Pode conter até 50 valores.
  • notIn: A lista de valores não permitidos para o tipo especificado. Não pode ser usado com dentro. Pode conter até 50 valores.
  • userPrincipalId: a lista dos IDs de objetos de usuário permitidos pode ser isenta na solicitação. Isso pode ser associado a um usuário individual, uma MSI ou uma entidade de serviço.
  • groupPrincipalId: a lista dos IDs permitidos de grupos de segurança pode ser isenta na solicitação. Um seletor de recursos pode conter múltiplos 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é 10 Selectores de recursos podem ser especificados em uma única tarefa. Os recursos no escopo são avaliados quando atendem a qualquer um desses seletores de recursos.

Isenções baseadas em identidade

Você pode aproveitar os tipos de seletor userPrincipalId e groupPrincipalId dentro da estrutura de isenção para permitir que um principal de serviço, MSI, usuário ou grupo de segurança específico contorne a aplicação de uma atribuição de política.

Pegue um exemplo em que você quer atribuir a definição Allowed virtual machine size SKUs de política embutida na sua assinatura para garantir que apenas VMs da família A possam ser implantadas, com exceção de um grupo com alto privilégio. Você pode usar condições baseadas em identidade para isentar esse grupo da sua organização dessa aplicação.

Este é um exemplo de isenção baseada em identidade:

"properties": {   
  "policyAssignmentId": "/subscriptions/<subscriptionID>/providers/Microsoft.Authorization/policyAssignments/CostMgmt",   
  "resourceSelectors": [{    
      "name": "AllowedGroups",   
      "selectors": [{   
          "kind": "groupPrincipalId",   
          "in": [ "<HighPrivEngGroupId>" ]   
        },      
      ]   
    }   
  ],   
  "exemptionCategory": "Waiver",   
  "displayName": "Exempt high SKU VM",   
  "description": "Exempt high SKU VM for business need"   
}   

Validação de escopo de atribuição (versão prévia)

Na maioria dos cenários, o escopo de isenção é validado para garantir que ele esteja no escopo de atribuição da política ou abaixo dele. A propriedade assignmentScopeValidation opcional pode permitir que uma isenção ignore essa validação e seja criada fora do escopo de atribuição. Essa validação se destina a situações em que uma assinatura precisa ser movida de um MG (grupo de gerenciamento) para outro, mas a movimentação seria impedida pela política devido às propriedades dos recursos dentro da assinatura. Nesse cenário, uma isenção poderia ser criada para que a assinatura em seu MG atual isentasse seus recursos de uma atribuição de política no MG de destino. Dessa forma, quando a assinatura for movida para o MG de destino, a operação não será impedida porque os recursos já estarão isentos da atribuição de política em questão. O uso dessa propriedade é mostrado no exemplo a seguir:

{
  "properties": {
    "policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgName}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "policyDefinitionReferenceId": [
      "limitSku",
      "limitType"
    ],
    "exemptionCategory": "Waiver",
    "assignmentScopeValidation": "DoNotValidate",
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
  "type": "Microsoft.Authorization/policyExemptions",
  "name": "DemoExpensiveVM"
}

Os valores permitidos para assignmentScopeValidation são Default e DoNotValidate. Se não for especificado, o processo de validação padrão ocorrerá.

Permissões necessárias

As permissões do RBAC (controle de acesso baseado em função) do Azure necessárias para gerenciar objetos de isenção de política estão no grupo de operações Microsoft.Authorization/policyExemptions. As funções internas de Colaborador de política de recurso e Administrador de segurança têm as permissões read e write, enquanto a função de Gravador de dados do Policy Insights (versão prévia) tem a permissão read.

As isenções têm medidas adicionais de segurança por causa do efeito da concessão de uma isenção. Além de precisar da operação Microsoft.Authorization/policyExemptions/write na hierarquia de recursos ou no recurso individual, o criador de uma isenção deve ter o verbo exempt/Action na atribuição de destino.

Criação e gerenciamento de isenção

As isenções são recomendadas para cenários com limite de tempo ou mais específicos em que um recurso ou hierarquia de recursos ainda deve ser rastreado e, de outra forma, seria avaliado, mas há um motivo específico para ele não ser avaliado quanto à conformidade. Por exemplo, se um ambiente tiver a definição interna Storage accounts should disable public network access (ID: b2982f36-99f2-4db5-8eff-283140c09693) atribuída com efeito definido como auditoria. Após a avaliação de conformidade, o recurso StorageAcc1 não está em conformidade, mas StorageAcc1 deve ter o acesso à rede pública habilitado para finalidades comerciais. Nesse momento, uma solicitação deve ser enviada para criar um recurso de isenção destinado a StorageAcc1. Depois que a isenção for criada, StorageAcc1 será mostrado como isento na revisão de conformidade.

Revise regularmente as isenções para garantir que todos os itens qualificados estejam devidamente isentos e remova rapidamente qualquer um que não esteja mais qualificado para ser isento. Nesse momento, os recursos de isenção que expiraram também podem ser excluídos.

Subestado de conformidade

Quando uma isenção se aplica a um recurso, seu estado de conformidade é Isento. O subestado de conformidade mostra qual seria o estado de conformidade do recurso caso a isenção fosse removida. O subestado de conformidade é povoado apenas para recursos isentos. Recursos não isentos possuem um subestado de conformidade em branco.

O subestado de conformidade faz parte do resultado de conformidade do Policy Insights. Não é uma propriedade que você configura no recurso de isenção de políticas.

Para visualizar o subestado de conformidade no portal do Azure:

  1. Vá até Conformidade de Políticas> e então selecione uma atribuição de política.
  2. No relatório de conformidade da tarefa, selecione as colunas Editar.
  3. Adicionar o subestado de Conformidade, organizar a coluna conforme necessário e então selecionar Salvar.

Você também pode selecionar o valor de Isenção ou Mitigado na coluna de detalhes de conformidade para visualizar o subestado de conformidade no painel de detalhes.

Para relatórios em toda a organização, consulte a properties.stateDetails.complianceSubState propriedade no Azure Resource Graph. A consulta a seguir lista recursos isentos e seus subestados de conformidade:

policyresources
| where type == "microsoft.policyinsights/policystates"
| extend complianceState = tostring(properties.complianceState)
| extend complianceSubState = tostring(properties.stateDetails.complianceSubState),
         resourceId = tostring(properties.resourceId),
         policyAssignmentId = tostring(properties.policyAssignmentId)
| where complianceState == "Exempt"
| project resourceId, policyAssignmentId, complianceState, complianceSubState

Próximas etapas