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:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
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:
- Bereitstellen von Ressourcen mit ARM-Vorlagen und der Azure CLI
- Bereitstellen von Ressourcen mit ARM-Vorlagen und Azure PowerShell
- Bereitstellen von ARM-Vorlagen über Cloud Shell
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@2023-04-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@2023-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@2023-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:
- Programmgesteuertes Erstellen von Azure Enterprise-Abonnements
- Programmgesteuertes Erstellen von Azure-Abonnements für eine Microsoft-Kundenvereinbarung
- Programmgesteuertes Erstellen von Azure-Abonnements für eine Microsoft Partner-Vereinbarung
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 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@2023-04-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Nächste Schritte
Informationen zu anderen Bereichen finden Sie unter Folgendem: