Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser med .NET Core

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.

.NET Core-biblioteket används för att hantera Azure-resurser. Den här guiden beskriver hur du använder .NET Core-biblioteket för att Azure Policy skapa en principtilldelning.

Förutsättningar

  • En Azure-prenumeration. Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
  • Ett huvudnamn för Azure-tjänsten, inklusive clientId och clientSecret. Om du inte har något huvudnamn för tjänsten för användning med Azure Policy eller om du vill skapa ett nytt kan du gå till Azure-hanteringsbibliotek för .NET-autentisering. Hoppa över steget för att installera .NET Core-paketen, så som vi gör i nästa steg.

Skapa Azure Policy projekt

Om du vill göra det möjligt för .NET Core Azure Policy skapa ett nytt konsolprogram och installera de nödvändiga paketen.

  1. Kontrollera att den senaste .NET Core är installerad (minst 3.1.8). Om det inte har installerats än laddar du ned det på dotnet.microsoft.com.

  2. Initiera ett nytt .NET Core-konsolprogram med namnet "policyAssignment":

    dotnet new console --name "policyAssignment"
    
  3. Ändra katalogerna till den nya projektmappen och installera de nödvändiga paketen för Azure Policy:

    # Add the Azure Policy package for .NET Core
    dotnet add package Microsoft.Azure.Management.ResourceManager --version 3.10.0-preview
    
    # Add the Azure app auth package for .NET Core
    dotnet add package Microsoft.Azure.Services.AppAuthentication --version 1.5.0
    
  4. Ersätt standardvärdet program.cs med följande kod och spara den uppdaterade filen:

    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Rest;
    using Microsoft.Azure.Management.ResourceManager;
    using Microsoft.Azure.Management.ResourceManager.Models;
    
    namespace policyAssignment
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                string strTenant = args[0];
                string strClientId = args[1];
                string strClientSecret = args[2];
                string strSubscriptionId = args[3];
                string strName = args[4];
                string strDisplayName = args[5];
                string strPolicyDefID = args[6];
                string strDescription = args[7];
                string strScope = args[8];
    
                var authContext = new AuthenticationContext($"https://login.microsoftonline.com/{strTenant}");
                var authResult = await authContext.AcquireTokenAsync(
                    "https://management.core.windows.net",
                    new ClientCredential(strClientId, strClientSecret));
    
                using (var client = new PolicyClient(new TokenCredentials(authResult.AccessToken)))
                {
                    var policyAssignment = new PolicyAssignment
                    {
                        DisplayName = strDisplayName,
                        PolicyDefinitionId = strPolicyDefID,
                        Description = strDescription
                    };
                    var response = await client.PolicyAssignments.CreateAsync(strScope, strName, policyAssignment);
                }
            }
        }
    }
    
  5. Skapa och publicera policyAssignment konsolprogrammet:

    dotnet build
    dotnet publish -o {run-folder}
    

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. Ändra katalogerna till som {run-folder} du definierade med föregående dotnet publish kommando.

  2. Ange följande kommando i terminalen:

    policyAssignment.exe `
       "{tenantId}" `
       "{clientId}" `
       "{clientSecret}" `
       "{subscriptionId}" `
       "audit-vm-manageddisks" `
       "Audit VMs without managed disks Assignment" `
       "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" `
       "Shows all virtual machines not using managed disks" `
       "{scope}"
    

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

  • {tenantId} – Ersätt med ditt klientorganisations-ID
  • {clientId} – Ersätt med klient-ID:t för tjänstens huvudnamn
  • {clientSecret} – Ersätt med klienthemligheten för tjänstens huvudnamn
  • {subscriptionId} – Ersätt med ditt prenumerations-ID
  • 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.
  • beskrivning – En djupare förklaring av vad principen gör eller varför den tilldelas 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. Initiera ett nytt .NET Core-konsolprogram med namnet "policyCompliance":

    dotnet new console --name "policyCompliance"
    
  2. Ändra katalogerna till den nya projektmappen och installera de nödvändiga paketen för Azure Policy:

    # Add the Azure Policy package for .NET Core
    dotnet add package Microsoft.Azure.Management.PolicyInsights --version 3.1.0
    
    # Add the Azure app auth package for .NET Core
    dotnet add package Microsoft.Azure.Services.AppAuthentication --version 1.5.0
    
  3. Ersätt standardvärdet program.cs med följande kod och spara den uppdaterade filen:

    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Rest;
    using Microsoft.Azure.Management.PolicyInsights;
    using Microsoft.Azure.Management.PolicyInsights.Models;
    
    namespace policyAssignment
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                string strTenant = args[0];
                string strClientId = args[1];
                string strClientSecret = args[2];
                string strSubscriptionId = args[3];
                string strName = args[4];
    
                var authContext = new AuthenticationContext($"https://login.microsoftonline.com/{strTenant}");
                var authResult = await authContext.AcquireTokenAsync(
                    "https://management.core.windows.net",
                    new ClientCredential(strClientId, strClientSecret));
    
                using (var client = new PolicyInsightsClient(new TokenCredentials(authResult.AccessToken)))
                {
                    var policyQueryOptions = new QueryOptions
                    {
                        Filter = $"IsCompliant eq false and PolicyAssignmentId eq '{strName}'",
                        Apply = "groupby(ResourceId)"
                    };
    
                    var response = await client.PolicyStates.ListQueryResultsForSubscriptionAsync(
                        "latest", strSubscriptionId, policyQueryOptions);
                    Console.WriteLine(response.Odatacount);
                }
            }
        }
    }
    
  4. Skapa och publicera policyAssignment konsolprogrammet:

    dotnet build
    dotnet publish -o {run-folder}
    
  5. Ändra katalogerna till som {run-folder} du definierade med föregående dotnet publish kommando.

  6. Ange följande kommando i terminalen:

    policyCompliance.exe `
       "{tenantId}" `
       "{clientId}" `
       "{clientSecret}" `
       "{subscriptionId}" `
       "audit-vm-manageddisks"
    

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

  • {tenantId} – Ersätt med ditt klientorganisations-ID
  • {clientId} – Ersätt med klient-ID:t för tjänstens huvudnamn
  • {clientSecret} – Ersätt med klienthemligheten för tjänstens huvudnamn
  • {subscriptionId} – Ersätt med ditt prenumerations-ID
  • name – Det unika namnet för principtilldelningsobjektet. I exemplet ovan används audit-vm-manageddisks.

Resultatet i matchar response det du ser 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 .NET Core-konsolprogrammen och installerade paket tar du bort policyAssignment projektmapparna policyCompliance och .

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: