Avvio rapido: Creare un'assegnazione di criteri per identificare le risorse non conformi con JavaScript

Il primo passaggio per comprendere la conformità in Azure consiste nell'identificare lo stato delle risorse. In questo avvio rapido si creerà un'assegnazione di criteri per identificare le macchine virtuali che non usano dischi gestiti. Al termine, si identificheranno le macchine virtuali non conformi.

La libreria di JavaScript viene usata per creare e gestire le risorse di Azure dalla riga di comando o negli script. Questa guida illustra come usare la libreria di JavaScript per creare un'assegnazione di criteri.

Prerequisiti

  • Sottoscrizione di Azure: Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

  • Node.js: è richiesto Node.js versione 12 o successiva.

Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi Cloud Shell preinstallati per eseguire il codice in questo articolo, senza dover installare alcun elemento nell'ambiente locale.

Per avviare Azure Cloud Shell:

Opzione Esempio/Collegamento
Selezionare Prova nell'angolo in alto a destra di un codice o di un blocco di comandi. Selezionando Prova non copia automaticamente il codice o il comando in Cloud Shell. Screenshot che mostra un esempio di Prova per Azure Cloud Shell.
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Screenshot che mostra come avviare Cloud Shell in una nuova finestra.
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. Screenshot che mostra il pulsante Cloud Shell nel portale di Azure

Per usare Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice (o blocco di comandi) per copiare il codice o il comando.

  3. Incollare il codice o il comando nella sessione di Cloud Shell selezionando CTRL+MAIUSC+V in Windows e Linux oppure selezionando Cmd+Maiusc+V in macOS.

  4. Selezionare Invio per eseguire il codice o il comando.

Aggiungere le librerie di criteri

Per abilitare l'uso di JavaScript con Criteri di Azure, è necessario aggiungere le librerie. Queste librerie funzionano ovunque sia possibile usare JavaScript, incluso Bash in Windows 10.

  1. Configurare un nuovo progetto Node.js usando il comando seguente.

    npm init -y
    
  2. Aggiungere un riferimento alla libreria yargs.

    npm install yargs
    
  3. Aggiungere un riferimento alle librerie di Criteri di Azure.

    # arm-policy is for working with Azure Policy objects such as definitions and assignments
    npm install @azure/arm-policy
    
    # arm-policyinsights is for working with Azure Policy compliance data such as events and states
    npm install @azure/arm-policyinsights
    
  4. Aggiungere un riferimento alla libreria di autenticazione di Azure.

    npm install @azure/identity
    

    Nota

    Verificare che in package.json@azure/arm-policy sia versione 5.0.1 o successiva, @azure/arm-policyinsights è la versione 5.0.0 o successiva ed @azure/identity è la versione 2.0.4 o successiva.

Creare un'assegnazione di criteri

In questo avvio rapido i crea un'assegnazione di criteri e si assegna la definizione Controlla macchine virtuali che non usano dischi gestiti (06a78e20-9358-41c9-923c-fb736d382a4d). Questa definizione di criteri identifica le risorse che non rispettano le condizioni in essa impostate.

  1. Creare un nuovo file denominato policyAssignment.js e immettere il codice seguente.

    const argv = require("yargs").argv;
    const { DefaultAzureCredential } = require("@azure/identity");
    const { PolicyClient } = require("@azure/arm-policy");
    
    if (argv.subID && argv.name && argv.displayName && argv.policyDefID && argv.scope && argv.description) {
    
        const createAssignment = async () => {
            const credentials = new DefaultAzureCredential();
            const client = new PolicyClient(credentials, argv.subID);
    
            const result = await client.policyAssignments.create(
                argv.scope,
                argv.name,
                {
                    displayName: argv.displayName,
                    policyDefinitionId: argv.policyDefID,
                    description: argv.description
                }
            );
            console.log(result);
        };
    
        createAssignment();
    }
    
  2. Immettere il comando seguente nel terminale:

    node policyAssignment.js `
       --subID "{subscriptionId}" `
       --name "audit-vm-manageddisks" `
       --displayName "Audit VMs without managed disks Assignment" `
       --policyDefID "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" `
       --description "Shows all virtual machines not using managed disks" `
       --scope "{scope}"
    

I comandi precedenti usano le informazioni seguenti:

  • subID: ID sottoscrizione per il contesto di autenticazione. Assicurarsi di sostituire {subscriptionId} con la sottoscrizione in uso.
  • name: nome univoco per l'oggetto assegnazione di criteri. L'esempio precedente usa audit-vm-manageddisks.
  • displayName: nome visualizzato per l'assegnazione di criteri. In questo caso viene usato controllare le macchine virtuali senza assegnazione di dischi gestiti.
  • policyDefID : percorso della definizione dei criteri, in base al quale si sta usando per creare l'assegnazione. In questo caso si tratta dell'ID della definizione di criteri Controllare le macchine virtuali che non usano i dischi gestiti.
  • description - Spiegazione più dettagliata delle operazioni eseguite dal criterio o dei motivi per cui è assegnato a questo ambito.
  • scope - Ambito che determina le risorse o il raggruppamento di risorse a cui viene applicata l'assegnazione di criteri. Può spaziare da un gruppo di gestione a una singola risorsa. Assicurarsi di sostituire {scope} con uno dei criteri seguenti:
    • Gruppo di gestione: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Sottoscrizione: /subscriptions/{subscriptionId}
    • Gruppo di risorse: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Risorsa: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]

A questo punto si è pronti per identificare le risorse non conformi e comprendere così lo stato di conformità dell'ambiente.

Identificare risorse non conformi

Dopo aver creato l'assegnazione di criteri, è possibile identificare le risorse non conformi.

  1. Creare un nuovo file denominato policyState.js e immettere il codice seguente.

    const argv = require("yargs").argv;
    const { DefaultAzureCredential } = require("@azure/identity");
    const { PolicyInsightsClient } = require("@azure/arm-policyinsights");
    
    if (argv.subID && argv.name) {
    
        const getStates = async () => {
    
            const credentials = new DefaultAzureCredential();
            const client = new PolicyInsightsClient(credentials);
            const result = client.policyStates.listQueryResultsForSubscription(
                "latest",
                argv.subID,
                {
                    queryOptions: {
                        filter: "IsCompliant eq false and PolicyAssignmentId eq '" + argv.name + "'",
                        apply: "groupby((ResourceId))"
                    }
                }
            );
            console.log(result);
        };
    
        getStates();
    }
    
  2. Immettere il comando seguente nel terminale:

    node policyState.js --subID "{subscriptionId}" --name "audit-vm-manageddisks"
    

Sostituire {subscriptionId} con la sottoscrizione per cui si vogliono visualizzare i risultati di conformità per l'assegnazione dei criteri denominata 'audit-vm-manageddisks' creata nei passaggi precedenti. Per un elenco di altri ambiti e modi per riepilogare i dati, vedere i metodi PolicyStates*.

I risultati saranno simili all'esempio seguente:

{
    'additional_properties': {
        '@odata.nextLink': None
    },
    'odatacontext': 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest',
    'odatacount': 12,
    'value': [{data}]
}

I risultati corrispondono a quanto visualizzato nella scheda Conformità risorsa di un'assegnazione di criteri nella vista del portale di Azure.

Pulire le risorse

  • Eliminare l'assegnazione di criteri Controlla le macchine virtuali senza assegnazione di dischi gestiti tramite il portale. La definizione di criteri è predefinita, quindi non esiste alcuna definizione da rimuovere.

  • Per rimuovere le librerie installate dall'applicazione, eseguire il comando seguente.

    npm uninstall @azure/arm-policy @azure/arm-policyinsights @azure/identity yargs
    

Passaggi successivi

In questa Guida introduttiva è stata assegnata una definizione dei criteri per identificare le risorse non conformi nell'ambiente Azure.

Per altre informazioni sull'assegnazione di definizioni di criteri per convalidare la conformità delle nuove risorse, continuare con l'esercitazione seguente: