Criar políticas programaticamente

Este artigo explica-lhe programaticamente a criação e gestão de políticas. Azure Policy definições impõem diferentes regras e efeitos sobre os seus recursos. A imposição garante que os recursos se mantêm em conformidade com as normas empresariais e os contratos de nível de serviço.

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

Pré-requisitos

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

  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 o módulo Azure PowerShell para a versão mais recente. Veja Instalar Azure PowerShell módulo para obter informações detalhadas. Para obter mais informações sobre a versão mais recente, consulte Azure PowerShell.

  3. Registe o fornecedor de recursos do Azure Policy Insights com Azure PowerShell para validar que a sua subscrição funciona com o fornecedor de recursos. Para registar um fornecedor de recursos, tem de ter permissão para executar a operação de ação de registo do fornecedor 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 o registo e visualização de fornecedores de recursos, veja Fornecedores de Recursos e Tipos.

  4. Se ainda não o fez, instale a CLI do Azure. 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 através de programação. A política de exemplo audita as contas de armazenamento que estão abertas a todas as redes públicas com o PowerShell, a CLI do Azure e os pedidos HTTP.

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

  1. Utilize o seguinte fragmento JSON para criar um ficheiro 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 a criação de uma definição de política, veja Azure Policy Estrutura de Definições.

  2. Execute o seguinte comando para criar uma definição de política com o ficheiro 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 denominada Contas de Armazenamento de Auditoria Abertas em Redes Públicas. Para obter mais informações sobre outros parâmetros que pode utilizar, consulte New-AzPolicyDefinition.

    Quando chamada sem parâmetros de localização, New-AzPolicyDefinition a predefinição é guardar a definição de política na subscrição selecionada do contexto de sessões. Para guardar a definição numa localização diferente, utilize os seguintes parâmetros:

    • SubscriptionId - Guarde numa subscrição diferente. Requer um valor GUID .
    • ManagementGroupName - Guardar num grupo de gestão. Requer um valor de cadeia .
  3. Depois de criar a definição de política, pode criar uma atribuição de política ao executar 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 parâmetro Âmbito em New-AzPolicyAssignment funciona com o grupo de gestão, a subscrição, o grupo de recursos ou um único recurso. O parâmetro utiliza um caminho de recurso completo, que a propriedade ResourceId devolve Get-AzResourceGroup . O padrão de Âmbito para cada contentor é o seguinte. Substitua {rName}, {rgName}, {subId}e {mgName} pelo nome do recurso, nome do grupo de recursos, ID da subscrição e nome do grupo de gestão, respetivamente. {rType} seria substituído pelo tipo de recurso do recurso, como Microsoft.Compute/virtualMachines para uma VM.

    • 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 a gestão de políticas de recursos com o módulo Resource Manager PowerShell, veja Az.Resources.

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

Utilize o procedimento seguinte para criar uma definição de política.

  1. Copie o seguinte fragmento JSON para criar um ficheiro JSON. Irá chamar o ficheiro no próximo passo.

    "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 com 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 {subscriptionId} anterior 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 Azure Policy Definições – Criar ou Atualizar e Definições de Política – Criar ou Atualizar No Grupo de Gestão.

Utilize o procedimento seguinte para criar uma atribuição de política e atribuir a definição de política ao nível do grupo de recursos.

  1. Copie o fragmento JSON seguinte para criar um ficheiro de atribuição de política JSON. Substitua as informações de exemplo em <> símbolos pelos 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 com 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 as informações de exemplo em <> símbolos pelos seus próprios valores.

    Para obter mais informações sobre como fazer chamadas HTTP para a API REST, veja 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, utilize o seguinte procedimento:

  1. Copie o fragmento JSON seguinte para criar um ficheiro 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 a criação de uma definição de política, veja Azure Policy Estrutura de Definições.

  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 denominada Contas de Armazenamento de Auditoria Abertas em Redes Públicas. Para obter mais informações sobre outros parâmetros que pode utilizar, veja az policy definition create.

    Quando chamada sem parâmetros de localização, az policy definition creation a predefinição é guardar a definição de política na subscrição selecionada do contexto de sessões. Para guardar a definição numa localização diferente, utilize os seguintes parâmetros:

    • subscrição - Guarde numa subscrição diferente. Requer um valor GUID para o ID da subscrição ou um valor de cadeia para o nome da subscrição.
    • management-group - Guarde num grupo de gestão. Requer um valor de cadeia .
  3. Utilize o seguinte comando para criar uma atribuição de política. Substitua as informações de exemplo em <> símbolos pelos seus próprios valores.

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

    O parâmetro de âmbito em az policy assignment create funciona com o grupo de gestão, a subscrição, o grupo de recursos ou um único recurso. O parâmetro utiliza um caminho de recurso completo. O padrão de âmbito para cada contentor é o seguinte. Substitua {rName}, {rgName}, {subId}e {mgName} pelo nome do recurso, nome do grupo de recursos, ID da subscrição e nome do grupo de gestão, respetivamente. {rType} seria substituído pelo tipo de recurso do recurso, como Microsoft.Compute/virtualMachines para uma VM.

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

Pode obter o ID de Definição do Azure Policy com o PowerShell com o seguinte comando:

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

O ID de definição de política para a definição de política que criou deve assemelhar-se ao seguinte exemplo:

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

Para obter mais informações sobre como pode gerir políticas de recursos com a CLI do Azure, veja Políticas de Recursos da CLI do Azure.

Passos seguintes

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