Oefening: een resource binnen het abonnementsbereik implementeren

Voltooid

Belangrijk

U hebt uw eigen Azure-abonnement nodig om deze oefening te kunnen uitvoeren. Dit kan kosten met zich meebrengen. Als u nog geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Project Teddybear is in volle gang en het R&D-team wacht totdat u het toegang geeft tot het nieuwe Azure-abonnement. U hebt het abonnement al gemaakt, maar voordat u het team toegang geeft, moet u ervoor zorgen dat er alleen virtuele machines worden geïmplementeerd die voldoen aan het beleid van het team. Het team heeft u verteld dat het geen virtuele machines uit de F- of G-serie wil implementeren.

In deze oefening maakt u een Bicep-sjabloon waarmee het abonnement wordt geconfigureerd op basis van het beleid van het team.

Tijdens het proces gaat u het volgende doen:

  • Maak een Bicep-sjabloon die moet worden geïmplementeerd binnen een abonnementsbereik.
  • Voeg een Azure Policy-definitie en -toewijzing toe.
  • Implementeer de sjabloon en controleer het resultaat.

Voor deze oefening moet u gemachtigd zijn om resources binnen het abonnementsbereik te implementeren. Als u niet aan deze vereiste kunt voldoen met uw huidige Azure-account, kunt u een gratis proefversie krijgen en een nieuw Azure-abonnement en een nieuwe Azure-tenant maken. U kunt ook de implementatiestappen in deze oefening overslaan.

In deze oefening wordt de Bicep-extensie voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.

Een sjabloon met abonnementsbereik maken

  1. Open Visual Studio Code.

  2. Maak een nieuw bestand met de naam main.bicep.

  3. Sla het lege bestand op zodat Visual Studio Code de Bicep-hulpprogramma's laadt.

    U kunt Bestand> selecteren of Ctrl+S selecteren in Windows (⌘+S in macOS). Vergeet niet waar u het bestand hebt opgeslagen. U kunt bijvoorbeeld een map met scripts maken om deze op te slaan in.

  4. Voeg de volgende inhoud toe aan het bestand main.bicep . U gaat de sjabloon binnenkort implementeren. Het is een goed idee om het handmatig te typen in plaats van te kopiëren en plakken, zodat u kunt zien hoe u met de tooling uw Bicep-bestanden kunt schrijven.

    targetScope = 'subscription'
    

    Deze coderegel vertelt Bicep dat uw sjabloon wordt geïmplementeerd in een abonnementsbereik.

Een beleidsdefinitie toevoegen

  1. Voeg onder de regel die u zojuist hebt toegevoegd de volgende variabeledefinitie toe:

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. Voeg onderaan het bestand de volgende Azure Policy-definitie toe:

    resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
      name: policyDefinitionName
      properties: {
        policyType: 'Custom'
        mode: 'All'
        parameters: {}
        policyRule: {
          if: {
            allOf: [
              {
                field: 'type'
                equals: 'Microsoft.Compute/virtualMachines'
              }
              {
                anyOf: [
                  {
                    field: 'Microsoft.Compute/virtualMachines/sku.name'
                    like: 'Standard_F*'
                  }
                  {
                    field: 'Microsoft.Compute/virtualMachines/sku.name'
                    like: 'Standard_G*'
                  }
                ]
              }
            ]
          }
          then: {
            effect: 'deny'
          }
        }
      }
    }
    

    U ziet dat de beleidsdefinitie alleen van toepassing is op resources waarbij:

    • Het resourcetype is gelijk aan Microsoft.Compute/virtualMachines.
    • De sku.name eigenschap begint met Standard_F of Standard_G.

    Wanneer u probeert een resource te maken die aan deze voorwaarden voldoet, wordt het maken van resources door Azure geweigerd.

    Waarschuwing

    Wees voorzichtig wanneer u het effect voor het weigeren van beleid gebruikt voor uw beleidsdefinities, met name voor grote bereiken, zoals abonnementen en beheergroepen. Als de definitie niet juist is gemaakt, kan deze onverwachte gevolgen hebben die kunnen leiden tot storingen. Het is beter om te beginnen met het effect van het controlebeleid en vervolgens pas over te schakelen naar het weigeringseffect nadat u het gedurende een bepaalde periode goed hebt gezien.

    U maakt de beleidsdefinitie binnen het bereik van het abonnement. Dit betekent dat, nadat de definitie is geïmplementeerd, deze beschikbaar is in alle resourcegroepen in het abonnement.

Het beleid toewijzen

Een beleidsdefinitie heeft geen effect totdat deze is toegepast. In deze stap implementeert u een tweede resource binnen het abonnementsbereik die de beleidsdefinitie toepast op het abonnement.

  1. Voeg onder de policyDefinitionName variabeledefinitie de volgende variabeledefinitie toe:

    var policyAssignmentName = 'DenyFandGSeriesVMs'
    
  2. Voeg onder aan het bestand, onder de resource van de beleidsdefinitie, de volgende beleidstoewijzing toe:

    resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
      name: policyAssignmentName
      properties: {
        policyDefinitionId: policyDefinition.id
      }
    }
    

    U ziet dat u de beleidstoewijzing niet expliciet configureert om toe te passen op het hele abonnement. Bicep begrijpt dit, omdat de sjabloon wordt geïmplementeerd in het abonnementsbereik.

  3. Sla de wijzigingen in het bestand op.

Uw sjabloon controleren

Uw sjabloon moet er als volgt uitzien:

targetScope = 'subscription'

var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        allOf: [
          {
            field: 'type'
            equals: 'Microsoft.Compute/virtualMachines'
          }
          {
            anyOf: [
              {
                field: 'Microsoft.Compute/virtualMachines/sku.name'
                like: 'Standard_F*'
              }
              {
                field: 'Microsoft.Compute/virtualMachines/sku.name'
                like: 'Standard_G*'
              }
            ]
          }
        ]
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
  name: policyAssignmentName
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Als dit niet het geval is, kopieert u het voorbeeld of past u de sjabloon aan zodat deze overeenkomt met het voorbeeld.

De sjabloon implementeren

Als u deze sjabloon wilt implementeren in Azure, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u de Azure CLI-hulpprogramma's hebt geïnstalleerd.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als in het terminalvenster bash aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u ook een bash-shellpictogram aan de rechterkant ziet, kunt u deze selecteren om de shell te starten.

    Schermopname van het Visual Studio Code-terminalvenster, met de bash-optie weergegeven.

    Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Git Bash.

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en Git Bash Default geselecteerd.

  3. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u de sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    cd templates
    

Bicep installeren

Voer de volgende opdracht uit om te controleren of u de nieuwste versie van Bicep hebt:

az bicep install && az bicep upgrade

Aanmelden bij Azure met behulp van Azure CLI

  1. Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:

    az login
    
  2. Meld u aan bij uw Azure-account in de browser die wordt geopend.

    In de Visual Studio Code-terminal wordt een lijst weergegeven met de abonnementen die aan dit account zijn gekoppeld.

  3. Zoek in de lijst het abonnement dat u voor deze oefening wilt gebruiken.

    Als u de lijst uit de aanmelding hebt gemist, kunt u het volgende fragment gebruiken om uw abonnementen opnieuw weer te geven.

    az account list --output table
    
  4. Stel het standaardabonnement in voor alle Azure CLI-opdrachten die u in deze sessie uitvoert.

    az account set --subscription "Your Subscription Name or ID"
    

Als u deze sjabloon wilt implementeren in Azure, meldt u zich aan bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u Azure PowerShell hebt geïnstalleerd.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als in het terminalvenster pwsh of powershell aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u aan de rechterkant een PowerShell-shellpictogram ziet, kunt u deze optie selecteren om de shell te starten.

    Schermopname van het Visual Studio Code-terminalvenster, met de optie pwsh weergegeven in de vervolgkeuzelijst shell.

    Als een andere shell dan pwsh of powershell wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en PowerShell geselecteerd.

  3. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u uw sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    Set-Location -Path templates
    

Bicep CLI installeren

Als u Bicep wilt gebruiken vanuit Azure PowerShell, installeert u de Bicep CLI.

Aanmelden bij Azure met behulp van Azure PowerShell

  1. Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:

    Connect-AzAccount
    
  2. Meld u aan bij uw Azure-account in de browser die wordt geopend.

  3. Haal de id op van het abonnement dat u voor deze oefening wilt gebruiken door de volgende opdracht uit te voeren:

    Get-AzSubscription
    

    De abonnements-id is de tweede kolom. Kopieer de tweede kolom. Het ziet er ongeveer uit als aaaa0a0a-bb1b-cc2c-dd3d-eeeee4e4e4e4e.

  4. Stel het standaardabonnement in voor alle Azure PowerShell-opdrachten die u in deze sessie uitvoert.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

De sjabloon implementeren in Azure

Implementeer de sjabloon in de Visual Studio Code-terminal met behulp van de volgende Azure CLI-opdrachten:

templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today

az deployment sub create \
    --name $deploymentName \
    --location westus \
    --template-file $templateFile

U ziet dat u een implementatie met abonnementsbereik maakt met behulp van de az deployment sub create opdracht, in plaats van de az deployment group create opdracht waarmee u mogelijk wordt gebruikt.

Implementeer de sjabloon in de Visual Studio Code-terminal met behulp van de volgende Azure PowerShell-opdrachten:

$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"

New-AzSubscriptionDeployment `
  -Name $deploymentName `
  -Location westus `
  -TemplateFile $templateFile

U ziet dat u een implementatie binnen het abonnementsbereik maakt met behulp van de New-AzSubscriptionDeployment cmdlet, in plaats van de New-AzResourceGroupDeployment cmdlet waarmee u mogelijk wordt gebruikt.

U ziet ook dat u expliciet een naam en locatie voor de implementatie opgeeft. Azure gebruikt deze informatie om de metagegevens van de implementatie op te slaan.

Tip

De naam van uw implementatie bevat de datum van vandaag. Hierdoor is het minder waarschijnlijk dat u per ongeluk dezelfde naam gebruikt als een andere implementatie.

Het kan een paar minuten duren voordat de implementatie is voltooid. Vervolgens ziet u een geslaagde implementatie.

Notitie

Als u een foutbericht ontvangt met de code AuthorizationFailed, bent u waarschijnlijk niet gemachtigd om resources binnen het abonnementsbereik te implementeren. Vraag uw Azure-beheerder om u machtigingen te verlenen. Als u niet aan deze vereiste kunt voldoen met uw huidige Azure-account, kunt u ook een gratis proefversie krijgen en een nieuw Azure-abonnement en een nieuwe Azure-tenant maken.

De implementatie controleren

U kunt implementaties binnen het abonnementsbereik bekijken in Azure Portal. Dit kan handig zijn om te controleren of de implementatie is voltooid en om de resultaten te controleren.

  1. Ga naar de Azure Portal.

  2. Selecteer Abonnementen in het linkerdeelvenster.

  3. Selecteer uw abonnement.

  4. Voer in het zoekvak Implementaties in en selecteer vervolgens het menu-item Implementaties.

    Schermopname van het zoekvak van Azure Portal en het menu-item Implementaties.

  5. Selecteer in de kolom Implementatienaam de implementatie die begint met subbereik om te zien welke resources zijn geïmplementeerd.

    Schermopname van de Azure Portal-interface met de lijst met implementaties.

  6. Selecteer Implementatiedetails om deze uit te vouwen. In dit geval worden de twee Azure Policy-resources weergegeven.

    Schermopname van het overzichtsvenster van Azure Portal voor de geselecteerde implementatie.

De resources opschonen

U hebt resources binnen het abonnementsbereik geïmplementeerd. U kunt de beleidsbronnen verwijderen die u hebt gemaakt door de volgende opdrachten uit te voeren:

subscriptionId=$(az account show --query 'id' --output tsv)

az policy assignment delete --name 'DenyFandGSeriesVMs' --scope "/subscriptions/$subscriptionId"
az policy definition delete --name 'DenyFandGSeriesVMs' --subscription $subscriptionId
$subscriptionId = (Get-AzContext).Subscription.Id

Remove-AzPolicyAssignment -Name 'DenyFandGSeriesVMs' -Scope "/subscriptions/$subscriptionId"
Remove-AzPolicyDefinition -Name 'DenyFandGSeriesVMs' -SubscriptionId $subscriptionId

In de volgende oefeningseenheid implementeert u dezelfde beleidsbronnen opnieuw. Ze worden opnieuw gemaakt, maar u kunt ze later weer opschonen.