Partilhar via


Criar políticas programaticamente

Este artigo orienta você através da criação e gerenciamento de políticas de forma programática. As definições de Política do Azure impõem regras e efeitos diferentes sobre seus recursos. A aplicação garante que os recursos permaneçam em conformidade com os padrões corporativos e os contratos de nível de serviço.

Para obter informações sobre conformidade, consulte Obtendo dados de conformidade.

Pré-requisitos

Antes de começar, certifique-se de que os seguintes pré-requisitos são atendidos:

  1. Se ainda não o fez, instale o ARMClient. É uma ferramenta que envia pedidos de HTTP para APIs baseadas no Azure Resource Manager.

  2. Atualize seu módulo do Azure PowerShell para a versão mais recente. Consulte Instalar o módulo do Azure PowerShell para obter informações detalhadas. Para obter mais informações sobre a versão mais recente, consulte Azure PowerShell.

  3. Registre o provedor de recursos do Azure Policy Insights usando o Azure PowerShell para validar se sua assinatura funciona com o provedor de recursos. Para registrar um provedor de recursos, você deve ter permissão para executar a operação de ação de registro para o provedor de recursos. Esta operação está incluída nas funções de Contribuinte e Proprietário. Execute o seguinte comando para registar o fornecedor de recursos:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Para obter mais informações sobre como registar e visualizar os fornecedores de recursos, veja Fornecedores e Tipos de Recursos.

  4. Se ainda não o fez, instale a CLI do Azure. Você pode obter a versão mais recente em Instalar a CLI do Azure no Windows.

Criar e atribuir uma definição de política

O primeiro passo para uma melhor visibilidade dos seus recursos é criar e atribuir políticas sobre os seus recursos. O próximo passo é aprender a criar e atribuir uma política de forma programática. A política de exemplo audita contas de armazenamento que estão abertas a todas as redes públicas usando solicitações PowerShell, CLI do Azure e HTTP.

Criar e atribuir uma definição de política com o PowerShell

  1. Use o seguinte trecho JSON para criar um arquivo JSON com o nome AuditStorageAccounts.json.

    {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
          },
          {
            "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
            "equals": "Allow"
          }
        ]
      },
      "then": {
        "effect": "audit"
      }
    }
    

    Para obter mais informações sobre como criar uma definição de política, consulte Estrutura de definição de política do Azure.

  2. Execute o seguinte comando para criar uma definição de política usando o arquivo AuditStorageAccounts.json .

    New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
    

    O comando cria uma definição de política chamada Contas de Armazenamento de Auditoria Abertas a Redes Públicas. Para obter mais informações sobre outros parâmetros que você pode usar, consulte New-AzPolicyDefinition.

    Quando chamado sem parâmetros de localização, New-AzPolicyDefinition o padrão é salvar a definição de política na assinatura selecionada do contexto das sessões. Para salvar a definição em um local diferente, use os seguintes parâmetros:

    • SubscriptionId - Salve em uma assinatura diferente. Requer um valor GUID .
    • ManagementGroupName - Salve em um grupo de gerenciamento. Requer um valor de cadeia de caracteres .
  3. Depois de criar sua definição de política, você pode criar uma atribuição de política executando os seguintes comandos:

    $rg = Get-AzResourceGroup -Name 'ContosoRG'
    $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts'
    New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
    

    Substitua ContosoRG pelo nome do grupo de recursos pretendido.

    O Scope parâmetro on New-AzPolicyAssignment funciona com grupo de gerenciamento, assinatura, grupo de recursos ou um único recurso. O parâmetro usa um caminho de recurso completo, que a ResourceId propriedade on Get-AzResourceGroup retorna. O padrão para Scope cada recipiente é o seguinte. Substitua {rName}, {rgName}, {subId}e {mgName} pelo nome do recurso, nome do grupo de recursos, ID da assinatura e nome do grupo de gerenciamento, respectivamente. {rType} seria substituído pelo tipo de recurso do recurso, como Microsoft.Compute/virtualMachines para uma máquina virtual.

    • Recurso - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupo de recursos - /subscriptions/{subId}/resourceGroups/{rgName}
    • Subscrição - /subscriptions/{subId}
    • Grupo de gestão - /providers/Microsoft.Management/managementGroups/{mgName}

Para obter mais informações sobre como gerenciar políticas de recursos usando o módulo PowerShell do Gerenciador de Recursos, consulte Az.Resources.

Criar e atribuir uma definição de política usando ARMClient

Use o procedimento a seguir para criar uma definição de política.

  1. Copie o seguinte trecho JSON para criar um arquivo JSON. Você chamará o arquivo na próxima etapa.

    "properties": {
      "displayName": "Audit Storage Accounts Open to Public Networks",
      "policyType": "Custom",
      "mode": "Indexed",
      "description": "This policy ensures that storage accounts with exposure to Public Networks are audited.",
      "parameters": {},
      "policyRule": {
        "if": {
          "allOf": [
            {
              "field": "type",
              "equals": "Microsoft.Storage/storageAccounts"
            },
            {
              "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
              "equals": "Allow"
            }
          ]
        },
        "then": {
          "effect": "audit"
        }
      }
    }
    
  2. Crie a definição de política usando uma das seguintes chamadas:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
    
    # For defining a policy in a management group
    armclient PUT "/providers/Microsoft.Management/managementgroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
    

    Substitua o anterior {subscriptionId} pelo ID da sua subscrição ou {managementGroupId} pelo ID do seu grupo de gestão.

    Para obter mais informações sobre a estrutura da consulta, consulte Definições de política do Azure - Criar ou atualizar e Definições de política - Criar ou atualizar no grupo de gerenciamento.

Use o procedimento a seguir para criar uma atribuição de política e atribuir a definição de política no nível do grupo de recursos.

  1. Copie o seguinte trecho JSON para criar um arquivo de atribuição de política JSON. Substitua informações de exemplo em <> símbolos por seus próprios valores.

    {
      "properties": {
        "description": "This policy assignment makes sure that storage accounts with exposure to Public Networks are audited.",
        "displayName": "Audit Storage Accounts Open to Public Networks Assignment",
        "parameters": {},
        "policyDefinitionId": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks",
        "scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>"
      }
    }
    
  2. Crie a atribuição de política usando a seguinte chamada:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2021-09-01" @<path to Assignment JSON file>
    

    Substitua informações de exemplo em <> símbolos por seus próprios valores.

    Para obter mais informações sobre como fazer chamadas HTTP para a API REST, consulte Recursos da API REST do Azure.

Criar e atribuir uma definição de política com a CLI do Azure

Para criar uma definição de política, use o seguinte procedimento:

  1. Copie o seguinte trecho JSON para criar um arquivo de atribuição de política JSON.

    {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
          },
          {
            "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
            "equals": "Allow"
          }
        ]
      },
      "then": {
        "effect": "audit"
      }
    }
    

    Para obter mais informações sobre como criar uma definição de política, consulte Estrutura de definição de política do Azure.

  2. Execute o seguinte comando para criar uma definição de política:

    az policy definition create --name 'audit-storage-accounts-open-to-public-networks' --display-name 'Audit Storage Accounts Open to Public Networks' --description 'This policy ensures that storage accounts with exposures to public networks are audited.' --rules '<path to json file>' --mode All
    

    O comando cria uma definição de política chamada Contas de Armazenamento de Auditoria Abertas a Redes Públicas. Para obter mais informações sobre outros parâmetros que você pode usar, consulte az policy definition create.

    Quando chamado sem parâmetros de localização, az policy definition creation o padrão é salvar a definição de política na assinatura selecionada do contexto das sessões. Para salvar a definição em um local diferente, use os seguintes parâmetros:

    • subscrição - Guarde numa subscrição diferente. Requer um valor GUID para a ID da assinatura ou um valor de cadeia de caracteres para o nome da assinatura.
    • management-group - Salvar em um grupo de gerenciamento. Requer um valor de cadeia de caracteres .
  3. Use o comando a seguir para criar uma atribuição de política. Substitua informações de exemplo em símbolos de colchetes < > angulares por seus próprios valores.

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    O scope parâmetro on az policy assignment create funciona com grupo de gerenciamento, assinatura, grupo de recursos ou um único recurso. O parâmetro usa um caminho de recurso completo. O padrão para scope cada recipiente é o seguinte. Substitua {rName}, {rgName}, {subId}e {mgName} pelo nome do recurso, nome do grupo de recursos, ID da assinatura e nome do grupo de gerenciamento, respectivamente. {rType} seria substituído pelo tipo de recurso do recurso, como Microsoft.Compute/virtualMachines para uma máquina virtual.

    • Recurso - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupo de recursos - /subscriptions/{subID}/resourceGroups/{rgName}
    • Subscrição - /subscriptions/{subID}
    • Grupo de gestão - /providers/Microsoft.Management/managementGroups/{mgName}

Você pode obter a ID de Definição de Política do Azure usando o PowerShell com o seguinte comando:

az policy definition show --name 'Audit Storage Accounts with Open Public Networks'

A ID de definição de política para a definição de política que você criou deve ser semelhante ao exemplo a seguir:

"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"

Para obter mais informações sobre como você pode gerenciar políticas de recursos com a CLI do Azure, consulte Políticas de recursos da CLI do Azure.

Próximos passos

Consulte os seguintes artigos para obter mais informações sobre os comandos e consultas neste artigo.