Übung: Bereitstellen von Ressourcen in einer Verwaltungsgruppe

Abgeschlossen

Project Teddybear war ein Erfolg, und nun ist die geheime R&D-Entwicklung in Ihrem Spielzeugunternehmen bereit, noch mehr neue Spielzeuge zu recherchieren. Das Team hat damit begonnen, Sie nahezu täglich nach neuen Abonnements zu fragen, und es muss seine Richtlinien auf sie alle anwenden.

Anstatt die Richtliniendefinitionen und -zuweisungen in jedem Abonnement zu duplizieren, haben Sie sich entschieden, alle Abonnements des Teams in einer Verwaltungsgruppe zu platzieren. Sie können die Richtlinie dann auf die gesamte Verwaltungsgruppe anwenden und müssen nicht jedes Abonnement einzeln berücksichtigen.

In dieser Übung erstellen Sie eine neue Bicep-Vorlage, um Richtliniendefinitionen und -zuweisungen auf eine Verwaltungsgruppe anzuwenden.

In dem Prozess gehen Sie wie folgt vor:

  • Erstellen Sie eine neue Verwaltungsgruppe.
  • Erstellen Sie eine neue Bicep-Datei im Verwaltungsgruppenbereich.
  • Fügen Sie der Datei Azure Policy-Ressourcen hinzu.
  • Verknüpfen Sie die Richtlinienzuweisung mit der Richtliniendefinition, indem Sie die Ressourcen-ID manuell erstellen.
  • Stellen Sie die Vorlage bereit, und überprüfen Sie das Ergebnis.

Für diese Übung gelten folgende Voraussetzungen:

Wenn Sie diese Anforderungen mit Ihrem aktuellen Azure-Konto nicht erfüllen können, können Sie eine kostenlose Testversion erhalten und ein neues Azure-Abonnement und einen neuen Mandanten erstellen. Alternativ können Sie die Bereitstellungsschritte in dieser Übung überspringen.

Erstellen einer Verwaltungsgruppe

In dieser Übung erstellen Sie eine neue Verwaltungsgruppe, damit Sie nicht versehentlich Ressourcen in einem anderen Teil Ihrer Azure-Umgebung beeinträchtigen.

Führen Sie im Visual Studio Code-Terminal die folgenden Azure CLI-Befehle aus:

az account management-group create \
  --name SecretRND \
  --display-name "Secret R&D Projects"

Standardmäßig wird die neue Verwaltungsgruppe als direktes untergeordnetes Element der Stammverwaltungsgruppe des Mandanten erstellt. Wenn Sie die Verwaltungsgruppe an einer bestimmten Stelle in Ihrer vorhandenen Verwaltungsgruppenhierarchie platzieren müssen, verwenden Sie den --parent-id-Parameter, und geben Sie den Namen der Verwaltungsgruppe an, die als übergeordnetes Element verwendet werden soll.

Führen Sie im Visual Studio Code-Terminal die folgenden Azure PowerShell-Befehle aus:

New-AzManagementGroup `
  -GroupId 'SecretRND' `
  -DisplayName 'Secret R&D Projects'

Standardmäßig wird die neue Verwaltungsgruppe als untergeordnetes Element der Stammverwaltungsgruppe des Mandanten erstellt. Wenn Sie die Verwaltungsgruppe an einer bestimmten Stelle in Ihrer vorhandenen Verwaltungsgruppenhierarchie platzieren müssen, verwenden Sie den -ParentId-Parameter, und geben Sie den Namen der Verwaltungsgruppe an, die als übergeordnetes Element verwendet werden soll.

In einer echten Bereitstellung würden Sie die Abonnements des F&E-Teams in die Verwaltungsgruppe verschieben. In dieser Übung stellen Sie die Richtlinien bereit, obwohl die Verwaltungsgruppe keine Abonnements enthält. Der gleiche Bereitstellungsprozess gilt unabhängig davon, ob die Verwaltungsgruppe leer ist oder Abonnements enthält.

Erstellen einer Bicep-Datei für die Bereitstellung in einer Verwaltungsgruppe

  1. Öffnen Sie Visual Studio Code.

  2. Löschen Sie die Datei main.bicep, und erstellen Sie dann eine neue leere Datei mit dem gleichen Namen.

  3. Speichern Sie die leere Datei.

  4. Fügen Sie der Datei folgenden Inhalt hinzu.

    targetScope = 'managementGroup'
    

    Beachten Sie, dass diese Codezeile Bicep darüber informiert, dass Ihre Vorlage im Verwaltungsgruppenbereich bereitgestellt wird.

Hinzufügen einer Richtliniendefinition

Erstellen Sie wie zuvor eine Richtliniendefinition in der Bicep-Datei.

  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'
          }
        }
      }
    }
    

    Die Richtliniendefinition ist identisch mit der Definition, die Sie zuvor auf Ihr Abonnement angewendet haben. Dieses Mal stellen Sie sie jedoch in einer Verwaltungsgruppe bereit.

Hinzufügen einer Richtlinienzuweisung

Sie wenden die Richtlinie jetzt auf die Verwaltungsgruppe an. Dies bedeutet, dass die Richtlinie für alle Abonnements gilt, die untergeordnete Elemente dieser Verwaltungsgruppe sind.

  1. Fügen Sie unter der policyDefinitionName-Variablendefinitionen die folgende Variable 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
      }
    }
    
  3. Speichern Sie die Änderungen in der Datei.

Überprüfen der Vorlage

Die Vorlage sollte folgendermaßen aussehen:

targetScope = 'managementGroup'

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 in Azure

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

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

az deployment mg create \
  --management-group-id $managementGroupId \
  --name $deploymentName \
  --location westus \
  --template-file $templateFile

Stellen Sie die Vorlage mithilfe von Azure PowerShell-Befehle im Terminal bereit.

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

New-AzManagementGroupDeployment `
  -ManagementGroupId $managementGroupId `
  -Name $deploymentName `
  -Location westus `
  -TemplateFile $templateFile

Beachten Sie, dass Sie wie bei Abonnementbereitstellungen explizit einen Namen und Standort für die Bereitstellungsmetadaten angeben. Und Sie verwenden das heutige Datum, um die Wahrscheinlichkeit zu verringern, dass der Name einer vorhandenen Bereitstellung verwendet wird.

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

Überprüfen der Bereitstellung

Wie bei Bereitstellungen im Abonnementbereich können Sie Bereitstellungen im Bereich der Verwaltungsgruppe im Azure-Portal anzeigen.

  1. Öffnen Sie das Azure-Portal.

  2. Wählen Sie im linken Bereich Alle Dienste aus.

  3. Geben Sie im SuchfeldVerwaltungsgruppe ein, und wählen Sie dann in der Ergebnisliste Verwaltungsgruppen aus.

    Screenshot of the Azure portal interface showing the service list with 'Management groups' highlighted.

  4. Wählen Sie die Verwaltungsgruppe Geheime F&E-Projekte aus.

    Screenshot of the Azure portal interface, highlighting 'Secret R&D Projects' in the list of management groups.

  5. Geben Sie im linken Bereich im SuchfeldBereitstellungen ein, und wählen Sie dann die Option Bereitstellungen unter Governance aus.

    Screenshot of the Azure portal interface, showing the management group details.

  6. Wählen Sie die Bereitstellung aus, die mit mg-scope beginnt, um zu sehen, welche Ressourcen bereitgestellt wurden.

    Screenshot of the Azure portal Deployments pane, highlighting the 'mg-scope-*' deployment in the list of deployments.

  7. Wählen Sie im Bereich Übersicht für die ausgewählte Bereitstellung Bereitstellungsdetails aus, um diese zu erweitern. Die beiden Azure Policy-Ressourcen werden aufgeführt.

    Screenshot of the Azure portal 'Overview' pane for the selected deployment.

Bereinigen der Ressourcen

Sie haben Ihre Ressourcen im Bereich der Verwaltungsgruppe erfolgreich bereitgestellt. Sie können die Richtlinienressourcen und die Verwaltungsgruppe entfernen, die Sie erstellt haben.

az account management-group delete --name SecretRND
Remove-AzManagementGroup -GroupId SecretRND