Guia de início rápido: criar uma atribuição de política para identificar recursos não compatíveis usando o modelo ARM

Neste início rápido, você usa um modelo do Azure Resource Manager (modelo ARM) para criar uma atribuição de política que valida a conformidade do recurso com uma política do Azure. A política é atribuída a um grupo de recursos e audita 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 utiliza sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Se o seu ambiente cumpre os pré-requisitos e se está familiarizado com a utilização de modelos ARM, selecione o botão Implementar no Azure. O modelo é aberto no portal do Azure.

Captura de ecrã do botão Implementar no Azure para atribuir uma política com um modelo do Azure Resource Manager.

Pré-requisitos

  • Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
  • Azure PowerShell ou CLI do Azure.
  • Código do Visual Studio e as ferramentas do Azure Resource Manager (ARM).
  • Microsoft.PolicyInsights deve estar registrado em sua assinatura do Azure. Para registrar um provedor de recursos, você deve ter permissão para registrar provedores de recursos. Essa permissão está incluída nas funções de Colaborador e Proprietário.
  • Um grupo de recursos com pelo menos uma máquina virtual que não usa discos gerenciados.

Rever o modelo

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

Crie o seguinte modelo ARM como policy-assignment.json.

  1. Abra o Visual Studio Code e selecione File>New Text File.
  2. Copie e cole o modelo ARM no Visual Studio Code.
  3. Selecione Arquivo>Salvar e use o nome do 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",
      "metadata": {
        "description": "Policy assignment name used in assignment's resource ID"
      }
    },
    "policyDefinitionID": {
      "type": "string",
      "defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "metadata": {
        "description": "Policy definition ID"
      }
    },
    "policyDisplayName": {
      "type": "string",
      "defaultValue": "Audit VM managed disks",
      "metadata": {
        "description": "Display name for Azure portal"
      }
    }
  },
  "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 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 para exibição visível no portal do Azure.

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

  • Para encontrar mais exemplos de modelos ARM, vá para Procurar exemplos de código.
  • Para saber mais sobre referências de modelo para implantações, vá para Referência de modelo do Azure.
  • Para saber como desenvolver modelos ARM, vá para a documentação de modelos ARM.
  • Para saber mais sobre implantações no nível de assinatura, vá para Implantações de assinatura com modelos ARM.

Implementar o modelo do Resource Manager

Você pode implantar o modelo 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 da sua assinatura. Substitua <subscriptionID> pelo seu ID da subscrição do Azure.

Connect-AzAccount

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

Você pode verificar se Microsoft.PolicyInsights está registrado. Se não estiver, você pode 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 policyDefinitionID parâmetro:

(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 $rg variável armazena propriedades para o grupo de recursos. A $deployparms variável usa splatting para criar valores de parâmetros e melhorar a legibilidade. O New-AzResourceGroupDeployment comando usa os valores de parâmetro definidos na $deployparms variável.

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

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

O comando usa a $rg.ResourceId propriedade 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, vá para Get-AzPolicyAssignment.

Identificar recursos que não estão em 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 $complianceparms variável cria valores de Get-AzPolicyState parâmetro usados no comando.

  • ResourceGroupName Obtém o nome do grupo de recursos da $rg.ResourceGroupName propriedade.
  • 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, vá para Get-AzPolicyState.

Clean up resources (Limpar recursos)

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

Para sair da sessão do Azure PowerShell:

Disconnect-AzAccount

Próximos passos

Neste guia de introdução, atribuiu uma definição de política para identificar recursos incompatíveis no seu ambiente do Azure.

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