Início Rápido: criar uma atribuição de política para identificar recursos sem conformidade usando um modelo ARM

Neste início rápido, você usará um modelo do ARM (Azure Resource Manager) para criar uma atribuição de política que valide a conformidade do recurso com uma política do Azure. A política é atribuída a um grupo de recursos e audita as máquinas virtuais que não usam discos gerenciados. Depois de criar a atribuição de política, você identifica máquinas virtuais não compatíveis.

Um Modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo usa a sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Pré-requisitos

Examinar o modelo

O modelo do ARM cria uma atribuição de política para um escopo de grupo de recursos e atribui a definição de política interna VMs de auditoria que não usam discos gerenciados.

Crie o modelo do ARM a seguir como policy-assignment.json.

  1. Abra o Visual Studio Code e selecione Arquivo>Novo Arquivo de Texto.
  2. Copie e cole o modelo do ARM no Visual Studio Code.
  3. Selecione Arquivo>Salvar e use o nome de arquivo policy-assignment.json.
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "policyAssignmentName": {
      "type": "string",
      "defaultValue": "audit-vm-managed-disks"
    },
    "policyDefinitionID": {
      "type": "string",
      "defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d"
    },
    "policyDisplayName": {
      "type": "string",
      "defaultValue": "Audit VM managed disks"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/policyAssignments",
      "apiVersion": "2023-04-01",
      "name": "[parameters('policyAssignmentName')]",
      "properties": {
        "policyDefinitionId": "[parameters('policyDefinitionID')]",
        "description": "Policy assignment to resource group scope created with ARM template",
        "displayName": "[parameters('policyDisplayName')]",
        "nonComplianceMessages": [
          {
            "message": "Virtual machines should use managed disks"
          }
        ]
      }
    }
  ],
  "outputs": {
    "assignmentId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
    }
  }
}

O tipo de recurso definido no modelo do ARM é Microsoft.Authorization/policyAssignments.

O modelo usa três parâmetros para implantar a atribuição de política:

  • policyAssignmentName cria a atribuição de política chamada audit-vm-managed-disks.
  • policyDefinitionID usa a ID da definição de política interna. Para referência, os comandos para obter a ID estão na seção para implantar o modelo.
  • policyDisplayName cria um nome de exibição visível no portal do Azure.

Para obter mais informações sobre arquivos de modelo do ARM:

Implantar o modelo do ARM

É possível implantar o modelo do ARM com o Azure PowerShell ou a CLI do Azure.

Em uma sessão de terminal do Visual Studio Code, conecte-se ao Azure. Se você tiver mais de uma assinatura, execute os comandos para definir o contexto para sua assinatura. Substitua <subscriptionID> por sua ID da assinatura do Azure.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

Você poderá verificar se Microsoft.PolicyInsights estiver registrado. Se não ele estiver registrado, você poderá executar um comando para registrar o provedor de recursos.

Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Para obter mais informações, vá para Get-AzResourceProvider e Register-AzResourceProvider.

Os comandos a seguir exibem o valor do parâmetro policyDefinitionID:

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

Os comandos a seguir implantam a definição de política no seu grupo de recursos. Substitua <resourceGroupName> pelo nome do grupo de recursos:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.json'
}

New-AzResourceGroupDeployment @deployparms

A variável $rg armazena propriedades do grupo de recursos. A variável $deployparms usa splatting para criar valores de parâmetro e melhorar a legibilidade. O comando New-AzResourceGroupDeployment usa os valores de parâmetro definidos na variável $deployparms.

  • Name é o nome da implantação exibido na saída e no Azure para as implantações do grupo de recursos.
  • ResourceGroupName usa a propriedade $rg.ResourceGroupName para obter o nome do grupo de recursos ao qual a política está atribuída.
  • TemplateFile especifica o nome e a localização do modelo do ARM no computador local.

Você pode verificar a implantação da atribuição de política com o seguinte comando:

O comando usa a propriedade $rg.ResourceId para obter a ID do grupo de recursos.

Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name               : audit-vm-managed-disks
ResourceId         : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName       : audit-vm-managed-disks
ResourceGroupName  : {resourceGroupName}
ResourceType       : Microsoft.Authorization/policyAssignments
SubscriptionId     : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties         : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties

Para obter mais informações, acesse Get-AzPolicyAssignment.

Identificar recursos fora de conformidade

Depois que a atribuição de política é implantada, as máquinas virtuais implantadas no grupo de recursos são auditadas quanto à conformidade com a política de disco gerenciado.

O estado de conformidade de uma nova atribuição de política leva alguns minutos para se tornar ativo e fornecer resultados sobre o estado da política.

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

A variável $complianceparms cria valores de parâmetro usados no comando Get-AzPolicyState.

  • ResourceGroupName obtém o nome do grupo de recursos da propriedade $rg.ResourceGroupName.
  • PolicyAssignmentName especifica o nome usado quando a atribuição de política foi criada.
  • Filter usa uma expressão para localizar recursos que não estão em conformidade com a atribuição de política.

Seus resultados se assemelham ao exemplo a seguir e ComplianceState mostram NonCompliant:

Timestamp                : 2/26/2024 19:02:56
ResourceId               : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId       : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId       : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant              : False
SubscriptionId           : {subscriptionId}
ResourceType             : Microsoft.Compute/virtualMachines
ResourceLocation         : {location}
ResourceGroup            : {resourceGroupName}
ResourceTags             : tbd
PolicyAssignmentName     : audit-vm-managed-disks
PolicyAssignmentOwner    : tbd
PolicyAssignmentScope    : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName     : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction   : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds       : {managementGroupId}
ComplianceState          : NonCompliant
AdditionalProperties     : {[complianceReasonCode, ]}

Para obter mais informações, acesse Get-AzPolicyState.

Limpar os recursos

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Para sair da sua sessão do Azure PowerShell:

Disconnect-AzAccount

Próximas etapas

Neste guia de início rápido, você atribuiu uma definição de política para identificar recursos sem conformidade em seu ambiente do Azure.

Para saber mais sobre como atribuir políticas que validam a conformidade dos recursos, prossiga para o tutorial.