Guida introduttiva: Creare un'assegnazione dei criteri per identificare le risorse non conformi usando un file Bicep
In questa guida introduttiva si usa un file Bicep per creare un'assegnazione dei criteri che convalida la conformità della risorsa rispetto a un criterio di Azure. I criteri vengono assegnati a un gruppo di risorse e controllano le macchine virtuali che non usano dischi gestiti. Al termine della creazione dell'assegnazione dei criteri, si identificano le macchine virtuali non conformi.
Bicep è un linguaggio specifico di dominio (DSL) che usa la sintassi dichiarativa per distribuire le risorse di Azure. Offre sintassi concisa, indipendenza dai tipi affidabile e supporto per il riutilizzo del codice. Bicep offre la migliore esperienza di creazione per le soluzioni di infrastruttura come codice in Azure.
Quando si assegna un criterio predefinito o una definizione di iniziativa, è facoltativo fare riferimento a una versione. Per impostazione predefinita, le assegnazioni di criteri delle definizioni si basano sulla versione più recente ed ereditano automaticamente le modifiche della versione secondaria, se non diversamente specificato.
Prerequisiti
- Se non si ha un account Azure, creare un account gratuito prima di iniziare.
- Bicep.
- Azure PowerShell o interfaccia della riga di comando di Azure.
- Visual Studio Code e l'estensione Bicep per Visual Studio Code.
Microsoft.PolicyInsights
deve essere registrato nella sottoscrizione di Azure. Per registrare un provider di risorse, è necessario disporre dell'autorizzazione per registrare i provider di risorse. Tale autorizzazione è inclusa nei ruoli Collaboratore e Proprietario.- Gruppo di risorse con almeno una macchina virtuale che non usa dischi gestiti.
Esaminare il file Bicep
Il file Bicep crea un'assegnazione dei criteri per un ambito del gruppo di risorse e assegna la definizione dei criteri predefinita Controlla macchine virtuali che non usano dischi gestiti.
Creare il file Bicep seguente come policy-assignment.bicep.
- Aprire Visual Studio Code e selezionare File>Nuovo file di testo.
- Copiare e incollare il file Bicep in Visual Studio Code.
- Selezionare File>Salva e usare il nome file 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
Il tipo di risorsa definito nel file Bicep è Microsoft.Authorization/policyAssignments.
Il file Bicep usa tre parametri per distribuire l'assegnazione dei criteri:
policyAssignmentName
crea l'assegnazione dei criteri denominata audit-vm-managed-disks.policyDefinitionID
usa l'ID della definizione dei criteri predefinita. Per riferimento, i comandi per ottenere l'ID sono disponibili nella sezione per distribuire il modello.policyDisplayName
crea un nome visualizzato visibile nel portale di Azure.
Per altre informazioni sui file Bicep:
- Per altri esempi per Bicep, vedere Esplorare gli esempi di codice.
- Per altre informazioni sui riferimenti ai modelli per le distribuzioni, vedere Informazioni di riferimento sul modello di Azure.
- Per informazioni su come sviluppare file Bicep, vedere la documentazione di Bicep.
- Per informazioni sulle distribuzioni a livello di sottoscrizione, passare a Distribuzioni di sottoscrizioni con i file Bicep.
Distribuire il file Bicep
È possibile distribuire il file Bicep con Azure PowerShell o l'interfaccia della riga di comando di Azure.
Da una sessione del terminale di Visual Studio Code connettersi ad Azure. Se si dispone di più sottoscrizioni, eseguire i comandi per impostare il contesto sulla sottoscrizione. Sostituire <subscriptionID>
con l'ID della sottoscrizione di Azure.
Connect-AzAccount
# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>
È possibile verificare se Microsoft.PolicyInsights
è registrato. In caso contrario, è possibile eseguire un comando per registrare il provider di risorse.
Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
Select-Object -Property ResourceTypes, RegistrationState
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Per altre informazioni, vedere Get-AzResourceProvider e Register-AzResourceProvider.
I comandi seguenti mostrano il valore del parametro policyDefinitionID
:
(Get-AzPolicyDefinition |
Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId
I comandi seguenti distribuiscono la definizione dei criteri nel gruppo di risorse. Sostituire <resourceGroupName>
con il nome del gruppo di risorse:
$rg = Get-AzResourceGroup -Name '<resourceGroupName>'
$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.bicep'
}
New-AzResourceGroupDeployment @deployparms
La variabile $rg
archivia le proprietà per il gruppo di risorse. La variabile $deployparms
usa lo splatting per creare i valori dei parametri e migliorare la leggibilità. Il comando New-AzResourceGroupDeployment
usa i valori dei parametri definiti nella variabile $deployparms
.
Name
è il nome della distribuzione visualizzato nell'output e in Azure per le distribuzioni del gruppo di risorse.ResourceGroupName
usa la proprietà$rg.ResourceGroupName
per ottenere il nome del gruppo di risorse in cui sono assegnati i criteri.TemplateFile
specifica il nome e la posizione del file Bicep nel computer locale.
È possibile verificare la distribuzione dell'assegnazione dei criteri con il comando seguente:
Il comando usa la proprietà $rg.ResourceId
per ottenere l'ID del gruppo di risorse.
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
Per altre informazioni, vedere Get-AzPolicyAssignment.
Identificare risorse non conformi
Dopo aver distribuito l'assegnazione dei criteri, le macchine virtuali distribuite nel gruppo di risorse vengono controllate per verificare la conformità ai criteri del disco gestito.
Lo stato di conformità per una nuova assegnazione di criteri richiede alcuni minuti per diventare attivo e fornire risultati sullo stato del criterio.
$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}
Get-AzPolicyState @complianceparms
La variabile $complianceparms
crea i valori dei parametri usati nel comando Get-AzPolicyState
.
ResourceGroupName
ottiene il nome del gruppo di risorse dalla proprietà$rg.ResourceGroupName
.PolicyAssignmentName
specifica il nome usato quando è stata creata l'assegnazione dei criteri.Filter
usa un'espressione per trovare risorse non conformi all'assegnazione dei criteri.
I risultati saranno simili all'esempio seguente e ComplianceState
mostra 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, ]}
Per altre informazioni, vedere Get-AzPolicyState.
Pulire le risorse
Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Per disconnettersi dalla sessione di Azure PowerShell:
Disconnect-AzAccount
Passaggi successivi
In questa Guida introduttiva è stata assegnata una definizione dei criteri per identificare le risorse non conformi nell'ambiente Azure.
Per altre informazioni su come assegnare criteri che convalidano la conformità delle risorse, continuare con l'esercitazione.