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

Neste início rápido, você usa um arquivo Bicep 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.

O Bicep é uma linguagem específica do domínio que utiliza sintaxe declarativa para implementar recursos do Azure. Fornece sintaxe concisa, segurança de tipos fiável e suporte para reutilização de código. O Bicep oferece a melhor experiência de criação para suas soluções de infraestrutura como código no Azure.

Pré-requisitos

Revise o arquivo Bicep

O arquivo Bicep 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 arquivo Bicep como policy-assignment.bicep.

  1. Abra o Visual Studio Code e selecione File>New Text File.
  2. Copie e cole o arquivo Bicep no Visual Studio Code.
  3. Selecione Arquivo>Salvar e use o nome do arquivo policy-assignment.bicep.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'

resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
  name: policyAssignmentName
  scope: resourceGroup()
  properties: {
    policyDefinitionId: policyDefinitionID
    description: 'Policy assignment to resource group scope created with Bicep file'
    displayName: policyDisplayName
    nonComplianceMessages: [
      {
        message: 'Virtual machines should use managed disks'
      }
    ]
  }
}

output assignmentId string = assignment.id

O tipo de recurso definido no arquivo Bicep é Microsoft.Authorization/policyAssignments.

O arquivo Bicep 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 Bicep:

  • Para encontrar mais exemplos de Bicep, 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 arquivos Bicep, vá para a documentação do Bicep.
  • Para saber mais sobre implantações no nível de assinatura, vá para Implantações de assinatura com arquivos Bicep.

Implantar o arquivo Bicep

Você pode implantar o arquivo Bicep 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.bicep'
}

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 ficheiro Bicep 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/20/2024 18:55:45
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.