Oefening: een resource binnen het abonnementsbereik implementeren
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
Open Visual Studio Code.
Maak een nieuw bestand met de naam main.bicep.
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.
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
Voeg onder de regel die u zojuist hebt toegevoegd de volgende variabeledefinitie toe:
var policyDefinitionName = 'DenyFandGSeriesVMs'
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 metStandard_F
ofStandard_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 resourcetype is gelijk aan
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.
Voeg onder de
policyDefinitionName
variabeledefinitie de volgende variabeledefinitie toe:var policyAssignmentName = 'DenyFandGSeriesVMs'
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.
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.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
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.
Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Git Bash.
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
Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:
az login
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.
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
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.
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
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.
Als een andere shell dan pwsh of powershell wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.
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
Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:
Connect-AzAccount
Meld u aan bij uw Azure-account in de browser die wordt geopend.
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.
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.
Ga naar de Azure Portal.
Selecteer Abonnementen in het linkerdeelvenster.
Selecteer uw abonnement.
Voer in het zoekvak Implementaties in en selecteer vervolgens het menu-item Implementaties.
Selecteer in de kolom Implementatienaam de implementatie die begint met subbereik om te zien welke resources zijn geïmplementeerd.
Selecteer Implementatiedetails om deze uit te vouwen. In dit geval worden de twee Azure Policy-resources weergegeven.
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.