Övning – Distribuera en resurs med prenumerationsomfång
Viktigt!
Du behöver en egen Azure-prenumeration för att utföra den här övningen, och avgifter kan tillkomma. Om du inte redan har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Project Teddybear är i full gång och R&D-teamet väntar på att du ska ge det åtkomst till den nya Azure-prenumerationen. Du har redan skapat prenumerationen, men innan du ger teamet åtkomst måste du se till att den endast distribuerar virtuella datorer som följer teamets principer. Teamet har sagt att de inte vill distribuera virtuella datorer i F- eller G-serien.
I den här övningen skapar du en Bicep-mall som konfigurerar prenumerationen baserat på teamets principer.
Under processen gör du följande:
- Skapa en Bicep-mall som ska distribueras i ett prenumerationsomfång.
- Lägg till en Azure Policy-definition och tilldelning.
- Distribuera mallen och verifiera resultatet.
Den här övningen kräver att du har behörighet att distribuera resurser med prenumerationsomfång. Om du inte kan uppfylla det här kravet med ditt aktuella Azure-konto kan du få en kostnadsfri utvärderingsversion och skapa en ny Azure-prenumeration och klientorganisation. Du kan också hoppa över distributionsstegen i den här övningen.
Den här övningen använder Bicep-tillägget för Visual Studio Code. Installera tillägget i Visual Studio Code.
Skapa en mall med prenumerationsomfång
Öppna Visual Studio Code.
Skapa en ny fil med namnet main.bicep.
Spara den tomma filen så att Visual Studio Code läser in Bicep-verktyget.
Du kan antingen välja Spara som-fil> eller välja Ctrl+S i Windows (⌘+S på macOS). Kom ihåg var du har sparat filen. Du kanske till exempel vill skapa en skriptmapp för att spara den.
Lägg till följande innehåll i filen main.bicep . Du kommer snart att distribuera mallen. Det är en bra idé att skriva in den manuellt i stället för att kopiera och klistra in, så att du kan se hur verktyget hjälper dig att skriva dina Bicep-filer.
targetScope = 'subscription'
Den här kodraden anger för Bicep att mallen kommer att distribueras i ett prenumerationsomfång.
Lägga till en principdefinition
Lägg till följande variabeldefinition under raden som du nyss lade till:
var policyDefinitionName = 'DenyFandGSeriesVMs'
Lägg till följande Azure Policy-definition längst ned i filen:
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' } } } }
Observera att principdefinitionen endast gäller för resurser där:
- Resurstypen är lika med
Microsoft.Compute/virtualMachines
. - Egenskapen
sku.name
börjar antingen medStandard_F
ellerStandard_G
.
När du försöker skapa en resurs som matchar dessa villkor nekar Azure skapandet av resursen.
Varning
Var försiktig när du använder neka-principeffekten för dina principdefinitioner, särskilt vid breda omfång som prenumerationer och hanteringsgrupper. Om definitionen inte har skapats korrekt kan den ha oväntade effekter som kan leda till avbrott. Det är bättre att börja med granskningsprincipens effekt och sedan växla till neka-effekten först när du har sett att den fungerar bra under en viss tidsperiod.
Du skapar principdefinitionen i prenumerationens omfång. Det innebär att när definitionen har distribuerats blir den tillgänglig i alla resursgrupper i prenumerationen.
- Resurstypen är lika med
Tilldela principen
En principdefinition har ingen effekt förrän den har tillämpats. I det här steget distribuerar du en andra resurs med prenumerationsomfång som tillämpar principdefinitionen på prenumerationen.
policyDefinitionName
Lägg till följande variabeldefinition under variabeldefinitionen:var policyAssignmentName = 'DenyFandGSeriesVMs'
Lägg till följande principtilldelning under principdefinitionsresursen längst ned i filen:
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = { name: policyAssignmentName properties: { policyDefinitionId: policyDefinition.id } }
Observera att du inte uttryckligen konfigurerar principtilldelningen så att den gäller för hela prenumerationen. Bicep förstår detta eftersom mallen kommer att distribueras i prenumerationsomfånget.
Spara ändringarna i filen.
Verifiera mallen
Mallen bör se ut så här:
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
}
}
Om den inte gör det kopierar du antingen exemplet eller justerar mallen så att den matchar exemplet.
Distribuera mallen
För att distribuera mallen till Azure behöver du logga in på ditt Azure-konto från Visual Studio Code-terminalen. Se till att du har installerat Azure CLI-verktygen.
I menyn Terminal väljer du Ny terminal. Terminalfönstret öppnas vanligtvis på den nedre halvan av skärmen.
Om gränssnittet som visas till höger i terminalfönstret är bash är rätt gränssnitt öppet och du kan gå vidare till nästa avsnitt.
Om ett annat gränssnitt än bash visas väljer du listrutepilen för gränssnittet och väljer sedan Azure Cloud Shell (Bash).
I listan över terminalgränssnitt väljer du bash.
I terminalen går du till katalogen där du sparade mallen. Om du till exempel har sparat mallen i mallmappen kan du använda det här kommandot:
cd templates
Installera Bicep
Kör följande kommando för att se till att du har den senaste versionen av Bicep:
az bicep install && az bicep upgrade
Logga in på Azure med hjälp av Azure CLI
Logga in på Azure i Visual Studio Code-terminalen genom att köra följande kommando:
az login
Logga in på ditt Azure-konto i webbläsaren som öppnas.
Visual Studio Code-terminalen visar en lista över de prenumerationer som är associerade med det här kontot.
Leta upp den prenumeration som du vill använda för den här övningen i listan.
Om du missade listan från inloggningen kan du använda följande kodfragment för att lista dina prenumerationer igen.
az account list --output table
Ange standardprenumerationen för alla Azure CLI-kommandon som du kör i den här sessionen.
az account set --subscription "Your Subscription Name or ID"
Om du vill distribuera den här mallen till Azure loggar du in på ditt Azure-konto från Visual Studio Code-terminalen. Kontrollera att du har installerat Azure PowerShell.
I menyn Terminal väljer du Ny terminal. Terminalfönstret öppnas vanligtvis på den nedre halvan av skärmen.
Om gränssnittet som visas till höger i terminalfönstret är powershell eller pwsh är rätt gränssnitt öppet och du kan gå vidare till nästa avsnitt.
Om ett annat gränssnitt än powershell eller pwsh visas väljer du listrutepilen för gränssnittet och väljer sedan PowerShell.
I listan över terminalgränssnitt väljer du powershell eller pwsh.
I terminalen går du till katalogen där du sparade mallen. Om du till exempel har sparat mallen i mallmappen kan du använda det här kommandot:
Set-Location -Path templates
Installera Bicep CLI
Om du vill använda Bicep från Azure PowerShell installerar du Bicep CLI.
Logga in i Azure med Azure PowerShell
Logga in på Azure i Visual Studio Code-terminalen genom att köra följande kommando:
Connect-AzAccount
Logga in på ditt Azure-konto i webbläsaren som öppnas.
Hämta ID:t för den prenumeration som du vill använda för den här övningen genom att köra följande kommando:
Get-AzSubscription
Prenumerations-ID är den andra kolumnen. Kopiera den andra kolumnen. Det ser ut ungefär som aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e.
Ange standardprenumerationen för alla Azure PowerShell-kommandon som du kör i den här sessionen.
Set-AzContext -SubscriptionId {Your subscription ID}
Distribuera mallen till Azure
Distribuera mallen i Visual Studio Code-terminalen med hjälp av följande Azure CLI-kommandon:
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today
az deployment sub create \
--name $deploymentName \
--location westus \
--template-file $templateFile
Observera att du skapar en prenumerationsomfångsdistribution med hjälp az deployment sub create
av kommandot i stället för det az deployment group create
kommando som du kan vara van vid.
Distribuera mallen i Visual Studio Code-terminalen med hjälp av följande Azure PowerShell-kommandon:
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"
New-AzSubscriptionDeployment `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile
Observera att du skapar en prenumerationsomfångsdistribution med hjälp av cmdleten New-AzSubscriptionDeployment
i stället för den New-AzResourceGroupDeployment
cmdlet som du kan vara van vid.
Observera också att du uttryckligen anger ett namn och en plats för distributionen. Azure använder den här informationen för att lagra distributionsmetadata.
Dricks
Distributionsnamnet innehåller dagens datum. Detta gör det mindre troligt att du av misstag använder samma namn som en annan distribution.
Distributionen kan ta en minut eller två att slutföra och sedan visas en lyckad distribution.
Kommentar
Om du får ett felmeddelande med koden AuthorizationFailed har du förmodligen inte behörighet att distribuera resurser med prenumerationsomfång. Be Azure-administratören att ge dig behörigheter. Om du inte kan uppfylla det här kravet med ditt aktuella Azure-konto kan du också få en kostnadsfri utvärderingsversion och skapa en ny Azure-prenumeration och klientorganisation.
Verifiera distributionen
Du kan visa distributioner med prenumerationsomfång i Azure Portal. Detta kan vara användbart för att kontrollera att distributionen har slutförts och för att granska resultaten.
Gå till Azure-portalen.
Välj Prenumerationer i den vänstra rutan.
Välj din prenumeration.
I rutan Sök anger du Distributioner och väljer sedan menyalternativet Distributioner .
I kolumnen Distributionsnamn väljer du distributionen som börjar med underomfånget för att se vilka resurser som har distribuerats.
Välj Distributionsinformation för att expandera den. I det här fallet visas de två Azure Policy-resurserna.
Rensa resurserna
Du har distribuerat resurser med prenumerationsomfång. Du kan ta bort de principresurser som du har skapat genom att köra följande kommandon:
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
I nästa övningsenhet distribuerar du om samma principresurser. De kommer att återskapas, men du kan rensa dem igen efteråt.