Bereitstellung von Verwaltungsgruppen mit Bicep-Dateien

In diesem Artikel wird beschrieben, wie Sie den Bereich mit Bicep bei der Bereitstellung in einer Verwaltungsgruppe festlegen.

Wenn Ihre Organisation sich weiterentwickelt, können Sie eine Bicep-Datei bereitstellen, um Ressourcen auf Verwaltungsgruppenebene zu erstellen. Beispielsweise müssen Sie möglicherweise Richtlinien oder die rollenbasierte Zugriffssteuerung von Azure (Azure Role-Based Access Control, Azure-RBAC) für eine Verwaltungsgruppe definieren und zuweisen. Mit Vorlagen auf Verwaltungsgruppenebene können Sie Richtlinien deklarativ anwenden und Rollen auf Verwaltungsgruppenebene zuweisen.

Schulungsressourcen

Wenn Sie sich lieber in einer Schritt-für-Schritt-Anleitung über Bereitstellungsbereiche informieren möchten, finden Sie weitere Informationen unter Bereitstellen von Ressourcen für Abonnements, Verwaltungsgruppen und Mandanten mithilfe von Bicep.

Unterstützte Ressourcen

Nicht alle Ressourcentypen können auf Mandantengruppenebene bereitgestellt werden. Im folgenden Abschnitt werden die unterstützten Ressourcentypen aufgelistet.

Verwenden Sie für Azure Blueprints:

Verwenden Sie für Azure Policy Folgendes:

Verwenden Sie zur Zugriffssteuerung Folgendes:

Verwenden Sie für geschachtelte Vorlagen, die in Abonnements oder Ressourcengruppen bereitstellen:

Verwenden Sie für die Verwaltung Ihrer Ressourcen:

Bei Verwaltungsgruppen handelt es sich um Ressourcen auf Mandantenebene. Sie haben aber die Möglichkeit, Verwaltungsgruppen in einer Verwaltungsgruppenbereitstellung zu erstellen, indem Sie den Bereich der neuen Verwaltungsgruppe auf den Mandanten festlegen. Weitere Informationen finden Sie unter Verwaltungsgruppe.

Mengenbereich

Verwenden Sie Folgendes, um den Bereich auf die Verwaltungsgruppe festzulegen:

targetScope = 'managementGroup'

Bereitstellungsbefehle

Verwenden Sie für die Bereitstellung in einer Verwaltungsgruppe die Verwaltungsgruppen-Bereitstellungsbefehle.

Verwenden Sie bei der Azure CLI az deployment mg create:

az deployment mg create \
  --name demoMGDeployment \
  --location WestUS \
  --management-group-id myMG \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/management-level-deployment/azuredeploy.json"

Ausführlichere Informationen über Bereitstellungsbefehle und -optionen für die Bereitstellung von ARM-Vorlagen finden Sie in den folgenden Artikeln:

Bereitstellungsspeicherort und -name

Für Bereitstellungen auf Verwaltungsgruppenebene müssen Sie einen Speicherort für die Bereitstellung angeben. Der Speicherort der Bereitstellung ist vom Speicherort der Ressourcen getrennt, die Sie bereitstellen. Der Bereitstellungsspeicherort gibt an, wo Bereitstellungsdaten gespeichert werden sollen. Die Bereitstellungen von Abonnement und Mandant benötigen auch einen Speicherort. Für Ressourcengruppenbereitstellungen wird der Speicherort der Ressourcengruppe zum Speichern der Bereitstellungsdaten verwendet.

Sie können einen Namen für die Bereitstellung angeben oder den Bereitstellungsstandardnamen verwenden. Der Standardname ist der Name der Vorlagendatei. Wenn Sie beispielsweise eine Vorlage mit dem Namen main.bicep bereitstellen, wird der Standardbereitstellungsname main erstellt.

Der Speicherort für jeden Bereitstellungsnamen ist unveränderlich. Sie können keine Bereitstellung an einem Speicherort erstellen, wenn bereits eine Bereitstellung mit demselben Namen an einem anderen Speicherort vorhanden ist. Wenn Sie z. B. eine Verwaltungsgruppenbereitstellung mit dem Namen deployment1 in centralus erstellen, können Sie später keine weitere Bereitstellung mit dem Namen deployment1, aber einen Speicherort westus erstellen. Wenn Sie den Fehlercode InvalidDeploymentLocation erhalten, verwenden Sie entweder einen anderen Namen oder denselben Speicherort wie bei der vorherigen Bereitstellung für diesen Namen.

Bereitstellungsbereiche

Bei der Bereitstellung in einer Verwaltungsgruppe können Sie Ressourcen an folgenden Orten bereitstellen:

  • In der Zielverwaltungsgruppe des Vorgangs
  • In einer anderen Verwaltungsgruppe im Mandanten
  • In Abonnements in der Verwaltungsgruppe
  • In Ressourcengruppen in der Verwaltungsgruppe
  • Im Mandanten für die Ressourcengruppe

Für eine Erweiterungsressource kann der Bereich auf ein Ziel festgelegt werden, das sich vom Bereitstellungsziel unterscheidet.

Der Benutzer, der die Vorlage bereitstellt, muss Zugriff auf den angegebenen Bereich besitzen.

Bereich: Verwaltungsgruppe

Um Ressourcen für die Zielverwaltungsgruppe bereitzustellen, fügen Sie diese Ressourcen mit dem Schlüsselwort resource hinzu.

targetScope = 'managementGroup'

// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  ...
}

Wenn Sie eine andere Verwaltungsgruppe als Bereitstellungsziel verwenden möchten, können Sie ein Modul hinzufügen. Verwenden Sie die managementGroup-Funktion, um die Eigenschaft scope festzulegen. Geben Sie den Namen der Verwaltungsgruppe an.

targetScope = 'managementGroup'

param otherManagementGroupName string

// module deployed at management group level but in a different management group
module exampleModule 'module.bicep' = {
  name: 'deployToDifferentMG'
  scope: managementGroup(otherManagementGroupName)
}

Bereich: Abonnement

Sie können auch Abonnements innerhalb einer Verwaltungsgruppe als Bereitstellungsziel verwenden. Der Benutzer, der die Vorlage bereitstellt, muss Zugriff auf den angegebenen Bereich besitzen.

Um ein Abonnement innerhalb der Verwaltungsgruppe als Bereitstellungsziel zu verwenden, fügen Sie ein Modul hinzu. Verwenden Sie die subscription-Funktion, um die Eigenschaft scope festzulegen. Geben Sie die Abonnement-ID an.

targetScope = 'managementGroup'

param subscriptionID string

// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

Bereich: Ressourcengruppe

Sie können auch Ressourcengruppen innerhalb der Verwaltungsgruppe als Bereitstellungsziel verwenden. Der Benutzer, der die Vorlage bereitstellt, muss Zugriff auf den angegebenen Bereich besitzen.

Um eine Ressourcengruppe innerhalb der Verwaltungsgruppe als Bereitstellungsziel zu verwenden, fügen Sie ein Modul hinzu. Verwenden Sie die resourceGroup-Funktion, um die Eigenschaft scope festzulegen. Geben Sie die Abonnement-ID und den Namen der Ressourcengruppe an.

targetScope = 'managementGroup'

param subscriptionID string
param resourceGroupName string

// module deployed to resource group in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Bereich: Mandant

Zum Erstellen von Ressourcen im Mandanten fügen Sie ein Modul hinzu. Verwenden Sie die tenant-Funktion, um die Eigenschaft scope festzulegen. Der Benutzer, der die Vorlage bereitstellt, muss über den erforderlichen Zugriff zum Bereitstellen im Mandanten verfügen.

targetScope = 'managementGroup'

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

Alternativ können Sie den Bereich für einige Ressourcentypen wie z. B. Verwaltungsgruppen auf / festlegen. Die Erstellung einer neuen Verwaltungsgruppe ist im nächsten Abschnitt beschrieben.

Verwaltungsgruppe

Zum Erstellen einer Verwaltungsgruppe in einer Verwaltungsgruppenbereitstellung müssen Sie den Bereich auf den Mandanten festlegen.

Im folgenden Beispiel wird in der Stammverwaltungsgruppe eine neue Verwaltungsgruppe erstellt.

targetScope = 'managementGroup'

param mgName string = 'mg-${uniqueString(newGuid())}'

resource newMG 'Microsoft.Management/managementGroups@2021-04-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output newManagementGroup string = mgName

Im nächsten Beispiel wird eine neue Verwaltungsgruppe in der Verwaltungsgruppe erstellt, die als Ziel der Bereitstellung dient. Es wird die Verwaltungsgruppenfunktion verwendet.

targetScope = 'managementGroup'

param mgName string = 'mg-${uniqueString(newGuid())}'

resource newMG 'Microsoft.Management/managementGroups@2021-04-01' = {
  scope: tenant()
  name: mgName
  properties: {
    details: {
      parent: {
        id: managementGroup().id
      }
    }
  }
}

output newManagementGroup string = mgName

Abonnements

Informationen zur Verwendung einer ARM-Vorlage zum Erstellen eines neuen Azure-Abonnements in einer Verwaltungsgruppe finden Sie unter:

Informationen zum Bereitstellen einer Vorlage, die ein vorhandenes Azure-Abonnement in eine neue Verwaltungsgruppe verschiebt, finden Sie unter Verschieben von Abonnements in ARM-Vorlagen.

Azure Policy

Benutzerdefinierte Richtliniendefinitionen, die für die Verwaltungsgruppe bereitgestellt werden, sind Erweiterungen der Verwaltungsgruppe. Verwenden Sie die Funktion extensionResourceId(), um die ID einer benutzerdefinierten Richtliniendefinition abzurufen. Integrierte Richtliniendefinitionen sind Ressourcen auf Mandantenebene. Verwenden Sie die Funktion tenantResourceId(), um die ID einer integrierten Richtliniendefinition abzurufen.

Im folgenden Beispiel wird veranschaulicht, wie eine Richtlinie auf der Verwaltungsgruppenebene definiert und zugewiesen wird.

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Nächste Schritte

Informationen zu anderen Bereichen finden Sie unter Folgendem: