Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser med hjälp av JavaScript

Det första steget mot att förstå kompatibilitet i Azure är att identifiera dina resursers status. I den här snabbstarten skapar du en principtilldelning som identifierar virtuella datorer som inte använder hanterade diskar. När du är klar identifierar du virtuella datorer som inte är kompatibla.

JavaScript-biblioteket används för att hantera Azure-resurser från kommandoraden eller i skript. Den här guiden beskriver hur du använder JavaScript-biblioteket för att skapa en principtilldelning.

Förutsättningar

  • Azure-prenumeration: Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

  • Node.js: Node.js version 12 eller senare krävs.

Använda Azure Cloud Shell

Azure är värd för Azure Cloud Shell, en interaktiv gränssnittsmiljö som du kan använda via webbläsaren. Du kan använda antingen Bash eller PowerShell med Cloud Shell för att arbeta med Azure-tjänster. Du kan använda förinstallerade Cloud Shell-kommandon för att köra koden i den här artikeln utan att behöva installera något i din lokala miljö.

Så här startar du Azure Cloud Shell:

Alternativ Exempel/länk
Välj Prova i det övre högra hörnet av ett kodblock. Om du väljer Prova kopieras koden inte automatiskt till Cloud Shell. Exempel på Prova för Azure Cloud Shell
Gå till https://shell.azure.com eller Välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren. Starta Cloud Shell i ett nytt fönster
Välj knappen Cloud Shell på menyn längst upp till höger i Azure-portalen. Cloud Shell-knappen i Azure Portal

Så här kör du koden i den här artikeln i Azure Cloud Shell:

  1. Starta Cloud Shell.

  2. Kopiera koden genom att klicka på knappen Kopiera på ett kodblock.

  3. Klistra in koden i Cloud Shell-sessionen genom att välja Ctrl+Skift+V på Windows och Linux eller genom att välja Cmd+Skift+V på macOS.

  4. Välj Retur för att köra koden.

Lägga till principbiblioteken

Biblioteken måste läggas till om du Azure Policy JavaScript ska fungera med andra. De här biblioteken fungerar överallt där JavaScript kan användas, inklusive bash på Windows 10.

  1. Konfigurera ett nytt Node.js projekt genom att köra följande kommando.

    npm init -y
    
  2. Lägg till en referens till yargs-biblioteket.

    npm install yargs
    
  3. Lägg till en referens till Azure Policy bibliotek.

    # 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. Lägg till en referens till Azure-autentiseringsbiblioteket.

    npm install @azure/ms-rest-nodeauth
    

    Anteckning

    Kontrollera att package.js är @azure/arm-policy version 3.1.0 eller senare, @azure/arm-policyinsights version 3.2.0 eller senare och @azure/ms-rest-nodeauth version 3.0.5 eller senare.

Skapa en principtilldelning

I den här snabbstarten skapar du en principtilldelning och tilldelar definitionen Granska virtuella datorer som inte använder hanterade diskar ( 06a78e20-9358-41c9-923c-fb736d382a4d ). Den här principdefinitionen identifierar resurser som inte uppfyller villkoren i principdefinitionen.

  1. Skapa en ny fil med policyAssignment.js och ange följande kod.

    const argv = require("yargs").argv;
    const authenticator = require("@azure/ms-rest-nodeauth");
    const policyObjects = require("@azure/arm-policy");
    
    if (argv.subID && argv.name && argv.displayName && argv.policyDefID && argv.scope && argv.description) {
    
        const createAssignment = async () => {
            const credentials = await authenticator.interactiveLogin();
            const client = new policyObjects.PolicyClient(credentials, argv.subID);
            const assignments = new policyObjects.PolicyAssignments(client);
    
            const result = await assignments.create(
                argv.scope,
                argv.name,
                {
                    displayName: argv.displayName,
                    policyDefinitionId: argv.policyDefID,
                    description: argv.description
                }
            );
            console.log(result);
        };
    
        createAssignment();
    }
    
  2. Ange följande kommando i terminalen:

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

Föregående kommandon använder följande information:

  • subID – prenumerations-ID för autentiseringskontext. Se till att ersätta {subscriptionId} med din prenumeration.
  • name – Det unika namnet för principtilldelningsobjektet. I exemplet ovan används audit-vm-manageddisks.
  • displayName – Visningsnamn för principtilldelningen. I det här fallet använder du Tilldelningen Granska virtuella datorer utan hanterade diskar.
  • policyDefID – Sökvägen för principdefinitionen som du använder för att skapa tilldelningen. I det här fallet är det ID:t för principdefinitionen Granska virtuella datorer som inte använder hanterade diskar.
  • description – En djupare förklaring av vad principen gör eller varför den har tilldelats till det här omfånget.
  • scope – Ett omfång avgör vilka resurser eller gruppering av resurser som principtilldelningen tillämpas på. Det kan vara allt från en hanteringsgrupp till en enskild resurs. Se till att {scope} ersätta med något av följande mönster:
    • Hanteringsgrupp: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Prenumeration: /subscriptions/{subscriptionId}
    • Resursgrupp: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Resurs: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]

Nu är du redo att identifiera icke-kompatibla resurser för att förstå kompatibilitetstillståndet för din miljö.

Identifiera icke-kompatibla resurser

Nu när principtilldelningen har skapats kan du identifiera resurser som inte är kompatibla.

  1. Skapa en ny fil med policyState.js och ange följande kod.

    const argv = require("yargs").argv;
    const authenticator = require("@azure/ms-rest-nodeauth");
    const policyInsights = require("@azure/arm-policyinsights");
    
    if (argv.subID && argv.name) {
    
        const getStates = async () => {
    
            const credentials = await authenticator.interactiveLogin();
            const client = new policyInsights.PolicyInsightsClient(credentials);
            const policyStates = new policyInsights.PolicyStates(client);
            const result = await policyStates.listQueryResultsForSubscription(
                "latest",
                argv.subID,
                {
                    queryOptions: {
                        filter: "IsCompliant eq false and PolicyAssignmentId eq '" + argv.name + "'",
                        apply: "groupby((ResourceId))"
                    }
                }
            );
            console.log(result);
        };
    
        getStates();
    }
    
  2. Ange följande kommando i terminalen:

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

Ersätt med den prenumeration som du vill se kompatibilitetsresultaten för principtilldelningen med namnet {subscriptionId} "audit-vm-manageddisks" som vi skapade i föregående steg. En lista över andra omfång och sätt att sammanfatta data finns i PolicyStates*-metoder.

Ditt resultat liknar följande exempel:

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

Resultatet matchar det som visas på fliken Resursefterlevnad för en principtilldelning i Azure Portal vyn.

Rensa resurser

  • Ta bort principtilldelningen Granska virtuella datorer utan hanterade diskar Tilldelning via portalen. Principdefinitionen är inbyggd, så det finns ingen definition att ta bort.

  • Om du vill ta bort de installerade biblioteken från programmet kör du följande kommando.

    npm uninstall @azure/arm-policy @azure/arm-policyinsights @azure/ms-rest-nodeauth yargs
    

Nästa steg

I den här snabbstarten har du tilldelat en principdefinition för att identifiera icke-kompatibla resurser i Azure-miljön.

Mer information om hur du tilldelar principdefinitioner för att verifiera att nya resurser är kompatibla finns i självstudien för: