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

A primeira etapa para compreender a conformidade no Azure é identificar o status de seus recursos. Neste início rápido, você cria uma atribuição de política para identificar recursos não compatíveis usando o Azure PowerShell. 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.

Os módulos do Azure PowerShell podem ser usados para gerenciar recursos do Azure na linha de comando ou em scripts. Este artigo explica como usar o Azure PowerShell para criar uma atribuição de política.

Ao atribuir uma política interna ou uma definição de iniciativa, é opcional referenciar uma versão. As atribuições de política de definições internas são padrão para a última versão e herdam automaticamente as alterações de versão secundária, a menos que esteja especificado de outra forma.

Pré-requisitos

  • Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
  • Azure PowerShell.
  • Visual Studio Code.
  • Microsoft.PolicyInsights deve ser 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 Colaborador e Proprietário.
  • Um grupo de recursos com pelo menos uma máquina virtual que não usa discos gerenciados.

Conectar-se ao 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>

Registrar provedor de recursos

Quando um provedor de recursos é registrado, ele está disponível para uso em sua assinatura do Azure.

Para verificar se Microsoft.PolicyInsights está registrado, execute Get-AzResourceProvider. O provedor de recursos contém vários tipos de recursos. Se o resultado for NotRegistered executado Register-AzResourceProvider:

 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.

Criar atribuição de política

Use os comandos a seguir para criar uma nova atribuição de política para o grupo de recursos. Este exemplo usa um grupo de recursos existente que contém uma máquina virtual sem discos gerenciados. O grupo de recursos é o escopo da atribuição de política. Esse exemplo usa as VMs de auditoria de definição de política interna que não usam discos gerenciados.

Execute os seguintes comandos e substitua <resourceGroupName> pelo nome do grupo de recursos:

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

$definition = Get-AzPolicyDefinition |
  Where-Object { $_.DisplayName -eq 'Audit VMs that do not use managed disks' }

A variável $rg armazena propriedades para o grupo de recursos e a variável $definition armazena as propriedades da definição de política. As propriedades são usadas em comandos subsequentes.

Execute o seguinte comando para criar a atribuição de política:

$policyparms = @{
Name = 'audit-vm-managed-disks'
DisplayName = 'Audit VM managed disks'
Scope = $rg.ResourceId
PolicyDefinition = $definition
Description = 'Az PowerShell policy assignment to resource group'
}

New-AzPolicyAssignment @policyparms

A variável $policyparms usa splatting para criar valores de parâmetro e melhorar a legibilidade. O comando New-AzPolicyAssignment usa os valores de parâmetro definidos na variável $policyparms.

  • Name cria o nome da atribuição de política usado no ResourceId da atribuição.
  • DisplayName é o nome da atribuição de política e está visível no portal do Azure.
  • Scope usa a propriedade $rg.ResourceId para atribuir a política ao grupo de recursos.
  • PolicyDefinition atribui a definição de política armazenada na variável $definition.
  • Description pode ser usado para adicionar contexto sobre a atribuição de política.

Os resultados da atribuição de política se assemelham ao seguinte exemplo:

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 New-AzPolicyAssignment.

Se você quiser exibir novamente as informações de atribuição de política, execute o seguinte comando:

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

Identificar recursos fora de conformidade

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.

Use o seguinte comando para identificar recursos que não estão em conformidade com a atribuição de política que você criou:

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

Get-AzPolicyState @complianceparms

A variável $complianceparms usa splatting para criar 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/14/2024 18:25:37
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

Para remover a atribuição de política, execute o seguinte comando:

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.