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:
Se ainda não o fez, instale o ARMClient. É uma ferramenta que envia pedidos de HTTP para APIs baseadas no Azure Resource Manager.
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.
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.
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
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.
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 .
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 onNew-AzPolicyAssignment
funciona com grupo de gerenciamento, assinatura, grupo de recursos ou um único recurso. O parâmetro usa um caminho de recurso completo, que aResourceId
propriedade onGet-AzResourceGroup
retorna. O padrão paraScope
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, comoMicrosoft.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}
- Recurso -
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.
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" } } }
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.
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>" } }
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:
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.
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 .
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 onaz 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 parascope
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, comoMicrosoft.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}
- Recurso -
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.
- Recursos da API REST do Azure.
- Módulos do Azure PowerShell.
- Comandos de política da CLI do Azure.
- Referência da API REST do provedor de recursos da Política do Azure.
- Organizar os recursos com os grupos de gestão do Azure.