Démarrage rapide : Créer une attribution de stratégie pour identifier les ressources non conformes à l’aide de JavaScript

La première étape pour comprendre la conformité dans Azure consiste à identifier l’état de vos ressources. Dans ce démarrage rapide, vous créerez une affectation de stratégie pour identifier les machines virtuelles qui n’utilisent pas de disques managés. Lorsque vous aurez terminé, vous identifierez les machines virtuelles qui ne sont pas conformes.

La bibliothèque JavaScript permet de gérer les ressources Azure à partir de la ligne de commande ou à l’aide de scripts. Ce guide explique comment utiliser une bibliothèque JavaScript pour créer une attribution de stratégie.

Prérequis

  • Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

  • Node.JS : La version 12 ou supérieure de Node.js est nécessaire.

Azure Cloud Shell

Azure héberge Azure Cloud Shell, un environnement d’interpréteur de commandes interactif que vous pouvez utiliser dans votre navigateur. Vous pouvez utiliser Bash ou PowerShell avec Cloud Shell pour utiliser les services Azure. Vous pouvez utiliser les commandes préinstallées Cloud Shell pour exécuter le code de cet article sans avoir à installer quoi que ce soit dans votre environnement local.

Pour démarrer Azure Cloud Shell :

Option Exemple/Lien
Sélectionnez Essayer dans le coin supérieur droite d’un bloc de codes ou de commandes. La sélection de Essayer ne copie pas automatiquement le code ni la commande dans Cloud Shell. Capture d’écran présentant un exemple d’essai pour Azure Cloud Shell.
Accédez à https://shell.azure.com ou sélectionnez le bouton Lancer Cloud Shell pour ouvrir Cloud Shell dans votre navigateur. Capture d’écran montrant comment lancer Cloud Shell dans une nouvelle fenêtre.
Sélectionnez le bouton Cloud Shell dans la barre de menus en haut à droite du portail Azure. Capture d’écran présentant le bouton Cloud Shell dans le portail Azure.

Pour utiliser Azure Cloud Shell :

  1. Démarrez Cloud Shell.

  2. Sélectionnez le bouton Copier sur un bloc de codes (ou un bloc de commandes) pour copier le code ou la commande.

  3. Collez le code ou la commande dans la session Cloud Shell en sélectionnant Ctrl+Maj+V sur Windows et Linux ou en sélectionnant Cmd+Maj+V sur macOS.

  4. Sélectionnez Entrer pour exécuter le code ou la commande.

Ajouter les bibliothèques Azure Policy

Pour permettre à JavaScript de fonctionner avec Azure Policy, les bibliothèques doivent être ajoutées. Ces bibliothèques fonctionnent partout où vous pouvez utiliser JavaScript, y compris bash sur Windows 10.

  1. Configurez un nouveau projet Node.js en exécutant la commande suivante.

    npm init -y
    
  2. Ajoutez une référence à la bibliothèque yargs.

    npm install yargs
    
  3. Ajoutez une référence aux bibliothèques Azure Policy.

    # 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. Ajoutez une référence à la bibliothèque d’authentification Azure.

    npm install @azure/identity
    

    Notes

    Vérifiez dans package.json que la version de @azure/arm-policy est 5.0.1 ou une version ultérieure, que la version de @azure/arm-policyinsights est 5.0.0 ou une version ultérieure, et que la version de @azure/identity est 2.0.4 ou une version ultérieure.

Créer une affectation de stratégie

Dans ce démarrage rapide, vous allez créer une attribution de stratégie et attribuer la définition de stratégie Auditer les machines virtuelles n’utilisant aucun disque managé. (06a78e20-9358-41c9-923c-fb736d382a4d). Cette stratégie identifie les ressources qui ne sont pas conformes aux conditions définies dans sa définition.

  1. Créez un fichier nommé policyAssignment.js et entrez le code suivant.

    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. Entrez la commande suivante dans le terminal :

    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}"
    

Les commandes précédentes utilisent les informations suivantes :

  • subID – ID d’abonnement du contexte d’authentification. Veillez à remplacer {subscriptionId} par votre abonnement.
  • name – Nom unique de l’objet d’attribution de stratégie. L’exemple ci-dessus utilise audit-vm-manageddisks.
  • displayName – Nom complet pour l’attribution de stratégie. Dans ce cas, nous allons utiliser l’affectation Audit VMs without managed disks (Auditer les machines virtuelles sans disques managés).
  • policyDefID : chemin de la définition de la stratégie, basé sur celui que vous utilisez pour créer l’attribution. Dans ce cas, il s’agit de l’ID de la définition de stratégie Auditer les machines virtuelles qui n’utilisent pas de disques managés.
  • description : explication plus détaillée de ce que fait la stratégie ou de la raison pour laquelle elle est attribuée à cette étendue.
  • scope : une étendue détermine les ressources ou le groupe de ressources sur lesquels l'attribution de stratégie est appliquée. Cette étendue peut aller d'un groupe d'administration à une ressource individuelle. Veillez à remplacer {scope} par l’un des modèles suivants :
    • Groupe d’administration : /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Abonnement : /subscriptions/{subscriptionId}
    • Groupe de ressources : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Ressource : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]

Vous êtes maintenant prêt à identifier les ressources non conformes pour comprendre l’état de conformité de votre environnement.

Identifier des ressources non conformes

Maintenant que votre attribution de stratégie est créée, vous pouvez identifier les ressources qui ne sont pas conformes.

  1. Créez un fichier nommé policyState.js et entrez le code suivant.

    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. Entrez la commande suivante dans le terminal :

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

Remplacez {subscriptionId} par l’abonnement dont vous souhaitez afficher les résultats de conformité pour l’attribution de stratégie nommée « audit-vm-manageddisks » que nous avons créée dans les étapes précédentes. Pour obtenir la liste des autres étendues et méthodes permettant de synthétiser les données, consultez les méthodes PolicyStates*.

Vos résultats doivent ressembler à l’exemple suivant :

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

Les résultats correspondent à ce que vous voyez sous l’onglet Conformité des ressources d’une attribution de stratégie dans la vue du portail Azure.

Nettoyer les ressources

  • Supprimez l’attribution de stratégie Audit VMs without managed disks Assignment (Auditer les machines virtuelles sans attribution de disques managés) via le portail. La définition de stratégie étant intégrée, il n’y a aucune définition à supprimer.

  • Si vous souhaitez supprimer les bibliothèques installées de votre application, exécutez la commande suivante.

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

Étapes suivantes

Dans ce démarrage rapide, vous avez affecté une définition de stratégie pour identifier les ressources non conformes de votre environnement Azure.

Pour en savoir plus sur l'attribution de définitions de stratégie visant à vérifier que les nouvelles ressources sont conformes, suivez le tutoriel :