Übung: Bereitstellen einer Ressource im Abonnementbereich

Abgeschlossen

Wichtig

Sie benötigen für diese Übung ein eigenes Azure-Abonnement. Außerdem fallen möglicherweise Gebühren für Sie an. Wenn Sie noch kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Project Teddybear ist in vollem Gang, und das R&D-Team wartet darauf, dass Sie ihm Zugriff auf das neue Azure-Abonnement erteilen. Sie haben das Abonnement bereits erstellt, aber bevor Sie dem Team Zugriff erteilen, müssen Sie sicherstellen, dass nur virtuelle Computer bereitgestellt werden, die den Richtlinien des Teams entsprechen. Das Team hat Ihnen mitgeteilt, dass es keine virtuellen Computer der F- oder G-Serie bereitstellen möchte.

In dieser Übung erstellen Sie eine Bicep-Vorlage, die das Abonnement basierend auf den Richtlinien des Teams konfiguriert.

In dem Prozess gehen Sie wie folgt vor:

  • Erstellen Sie eine Bicep-Vorlage, die in einem Abonnementbereich bereitgestellt werden soll.
  • Fügen Sie eine Azure Policy-Definition und -Zuweisung hinzu.
  • Stellen Sie die Vorlage bereit, und überprüfen Sie das Ergebnis.

Für diese Übung benötigen Sie die Berechtigung, abonnementspezifische Ressourcen bereitzustellen. Wenn Sie diese Anforderung mit Ihrem aktuellen Azure-Konto nicht erfüllen können, können Sie die kostenlose Testversion nutzen und ein neues Azure-Abonnement und einen neuen Mandanten erstellen. Alternativ können Sie die Bereitstellungsschritte in dieser Übung überspringen.

In dieser Übung wird die Bicep-Erweiterung für Visual Studio Code verwendet. Sie müssen diese Erweiterung in Visual Studio Code installieren.

Erstellen einer Vorlage im Abonnementbereich

  1. Öffnen Sie Visual Studio Code.

  2. Erstellen Sie eine neue Datei namens main.bicep.

  3. Speichern Sie die leere Datei, damit Visual Studio Code die Bicep-Tools lädt.

    Sie können entweder Datei>Speichern unter oder STRG+S unter Windows (⌘+S unter macOS) auswählen. Merken Sie sich unbedingt den Speicherort der Datei. Sie können dazu beispielsweise einen Ordner scripts (Skripts) erstellen und sie darin speichern.

  4. Fügen Sie der Datei main.bicep den folgenden Inhalt hinzu. Sie werden die Vorlage in Kürze bereitstellen. Es empfiehlt sich, ihn manuell einzugeben, anstatt ihn zu kopieren und einzufügen, damit Sie sehen können, wie die Tools Ihnen beim Schreiben Ihrer Bicep-Dateien helfen.

    targetScope = 'subscription'
    

    Diese Codezeile teilt Bicep mit, dass Ihre Vorlage in einem Abonnementbereich bereitgestellt wird.

Hinzufügen einer Richtliniendefinition

  1. Fügen Sie unter der soeben hinzugefügten Zeile die folgende Variablendefinition hinzu:

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. Fügen Sie am Ende der Datei die folgende Azure Policy-Definition hinzu:

    resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-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'
          }
        }
      }
    }
    

    Beachten Sie, dass die Richtliniendefinition nur für Ressourcen gilt, auf die Folgendes zutrifft:

    • Der Ressourcentyp ist gleich Microsoft.Compute/virtualMachines.
    • Die sku.name-Eigenschaft beginnt entweder mit Standard_F oder Standard_G.

    Wenn Sie versuchen, eine Ressource zu erstellen, die diese Bedingungen erfüllt, verweigert Azure die Ressourcenerstellung.

    Warnung

    Seien Sie vorsichtig, wenn Sie den Richtlinieneffekt Verweigern für Ihre Richtliniendefinitionen verwenden, insbesondere bei großen Bereichen wie Abonnements und Verwaltungsgruppen. Wenn die Definition nicht ordnungsgemäß erstellt wird, kann dies unerwartete Auswirkungen haben, die zu Ausfällen führen können. Es ist besser, mit dem Richtlinieneffekt Überwachen zu beginnen und erst dann zum Effekt Verweigern zu wechseln, wenn Sie gesehen haben, dass er über einen gewissen Zeitraum gut funktioniert.

    Sie erstellen die Richtliniendefinition im Bereich des Abonnements. Dies bedeutet, dass die Definition nach der Bereitstellung in allen Ressourcengruppen im Abonnement verfügbar ist.

Zuweisen der Richtlinie

Eine Richtliniendefinition hat erst dann Auswirkungen, wenn sie angewendet wird. In diesem Schritt stellen Sie eine zweite Ressource im Abonnementbereich bereit, welche die Richtliniendefinition auf das Abonnement anwendet.

  1. Fügen Sie unter den policyDefinitionName-Variablendefinitionen die folgende Variablendefinition hinzu:

    var policyAssignmentName = 'DenyFandGSeriesVMs'
    
  2. Fügen Sie am Ende der Datei unter der Richtliniendefinitionsressource die folgende Richtlinienzuweisung hinzu:

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

    Beachten Sie, dass Sie die Richtlinienzuweisung nicht explizit so konfigurieren, dass sie für das gesamte Abonnement gilt. Bicep versteht dies, da die Vorlage im Abonnementbereich bereitgestellt wird.

  3. Speichern Sie die Änderungen in der Datei.

Überprüfen der Vorlage

Die Vorlage sollte folgendermaßen aussehen:

targetScope = 'subscription'

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

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-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@2020-03-01' = {
  name: policyAssignmentName
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Andernfalls kopieren Sie entweder das Beispiel, oder passen Sie Ihre Vorlage an das Beispiel an.

Bereitstellen der Vorlage

Sie müssen sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto anmelden, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Sie die Azure CLI-Tools installiert haben.

  1. Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.

  2. Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell bash ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.

    Screenshot of the Visual Studio Code terminal window, with the bash option shown.

  3. Wenn eine andere Shell als bash angezeigt wird, wählen Sie die Shell-Dropdownliste und dann Git Bash aus.

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown shown and Git Bash Default selected.

  4. Wählen Sie in der Liste der Terminalshells bash aus.

    Screenshot of the Visual Studio Code terminal window, with the bash terminal selected.

  5. Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:

    cd templates
    

Installieren von Bicep

Vergewissern Sie sich mit dem folgenden Befehl, dass Sie die aktuelle Version von Bicep verwenden:

az bicep install && az bicep upgrade

Anmelden bei Azure mithilfe der Azure CLI

  1. Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:

    az login
    
  2. Melden Sie sich im Browserfenster, das daraufhin geöffnet wird, in Ihrem Azure-Konto an.

    Im Visual Studio Code-Terminal wird eine Liste der Abonnements angezeigt, die diesem Konto zugeordnet sind.

  3. Suchen Sie in der Liste nach dem Abonnement, das Sie für diese Übung verwenden möchten.

    Wenn Sie die Liste bei der Anmeldung verpasst haben, können Sie den folgenden Codeausschnitt verwenden, um Ihre Abonnements erneut aufzulisten.

    az account list --output table
    
  4. Legen Sie das Standardabonnement für alle Azure CLI-Befehle fest, die Sie in dieser Sitzung ausführen.

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

Melden Sie sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto an, um diese Vorlage in Azure bereitzustellen. Stellen Sie sicher, dass Azure PowerShell installiert ist.

  1. Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.

  2. Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell powershell oder pwsh ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.

    Screenshot of the Visual Studio Code terminal window, with the pwsh option displayed in the shell dropdown list.

  3. Wenn eine andere Shell als powershell oder pwsh angezeigt wird, wählen Sie die Shell-Dropdownliste und dann PowerShell aus.

    Screenshot of the Visual Studio Code terminal window, with the terminal shell dropdown list shown and PowerShell selected.

  4. Wählen Sie in der Liste der Terminalshells powershell oder pwsh aus.

    Screenshot of the Visual Studio Code terminal window, with the PowerShell terminal selected.

  5. Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:

    Set-Location -Path templates
    

Installieren der Bicep CLI

Installieren Sie die Bicep-CLI, um Bicep über Azure PowerShell zu verwenden.

Anmelden bei Azure mithilfe von Azure PowerShell

  1. Melden Sie sich im Visual Studio Code-Terminal mit dem folgenden Befehl bei Azure an:

    Connect-AzAccount
    
  2. Melden Sie sich im Browser, der anschließend geöffnet wird, bei Ihrem Azure-Konto an.

  3. Führen Sie den folgenden Befehl aus, um die ID des Abonnements abzurufen, das Sie für diese Übung verwenden möchten:

    Get-AzSubscription
    

    Die Abonnement-ID befindet sich in der zweiten Spalte. Kopieren Sie die zweite Spalte. Dies sieht in etwa wie cf49fbbc-217c-4EB6-9eb5-a6a6c68295a0 aus.

  4. Legen Sie das Standardabonnement für alle Azure PowerShell-Befehle fest, die Sie in dieser Sitzung ausführen.

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Bereitstellen der Vorlage in Azure

Stellen Sie die Vorlage im Visual Studio Code-Terminal mithilfe der folgenden Azure CLI-Befehle bereit:

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

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

Beachten Sie, dass Sie eine Bereitstellung im Abonnementbereich erstellen, indem Sie den Befehl az deployment sub create verwenden und nicht den Befehl az deployment group create, den Sie möglicherweise gewohnt sind.

Stellen Sie die Vorlage im Visual Studio Code-Terminal mithilfe der folgenden Azure PowerShell-Befehle bereit:

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

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

Beachten Sie, dass Sie eine Bereitstellung im Abonnementbereich erstellen, indem Sie das Cmdlet New-AzSubscriptionDeployment verwenden und nicht das Cmdlet New-AzResourceGroupDeployment, das Sie möglicherweise gewohnt sind.

Beachten Sie auch, dass Sie explizit einen Namen und Standort für die Bereitstellung angeben. Azure verwendet diese Informationen zum Speichern der Bereitstellungsmetadaten.

Tipp

Ihr Bereitstellungsname enthält das heutige Datum. Dadurch wird es weniger wahrscheinlich, dass Sie versehentlich den gleichen Namen wie eine andere Bereitstellung verwenden.

Das Fertigstellen der Bereitstellung kann einige Minuten dauern. Anschließend wird eine erfolgreiche Bereitstellung angezeigt.

Hinweis

Wenn eine Fehlermeldung mit dem Code AuthorizationFailed angezeigt wird, verfügen Sie wahrscheinlich nicht über die Berechtigung, eine abonnementspezifische Ressource bereitzustellen. Bitten Sie Ihren Azure-Administrator, Ihnen die entsprechenden Berechtigungen zu erteilen. Wenn Sie diese Anforderung mit Ihrem aktuellen Azure-Konto nicht erfüllen können, können Sie alternativ die kostenlose Testversion nutzen und ein neues Azure-Abonnement und einen neuen Mandanten erstellen.

Überprüfen der Bereitstellung

Sie können Bereitstellungen im Abonnementbereich im Azure-Portal anzeigen. Dies kann hilfreich sein, um zu bestätigen, dass die Bereitstellung erfolgreich abgeschlossen wurde, und um die Ergebnisse zu untersuchen.

  1. Öffnen Sie das Azure-Portal.

  2. Wählen Sie im linken Bereich Abonnements aus.

  3. Wählen Sie Ihr Abonnement aus.

  4. Geben Sie im SuchfeldBereitstellungen ein, und wählen Sie dann das Menüelement Bereitstellungen aus.

    Screenshot of the Azure portal Search box and the Deployments menu item.

  5. Wählen Sie in der Spalte Bereitstellungsname die Bereitstellung aus, die mit dem Unterbereich beginnt, um zu sehen, welche Ressourcen bereitgestellt wurden.

    Screenshot of the Azure portal interface showing the list of deployments.

  6. Wählen Sie Bereitstellungsdetails aus, um die Angaben zu erweitern. In diesem Fall werden die beiden Azure Policy-Ressourcen aufgeführt.

    Screenshot of the Azure portal overview pane for the selected deployment.

Bereinigen der Ressourcen

Sie haben Ressourcen im Abonnementbereich erfolgreich bereitgestellt. Sie können die von Ihnen erstellten Richtlinienressourcen entfernen, indem Sie die folgenden Befehle ausführen:

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 der nächsten Übungseinheit stellen Sie die gleichen Richtlinienressourcen erneut bereit. Sie werden erneut erstellt, aber Sie können sie anschließend erneut bereinigen.