Abonnementbereitstellungen mit Bicep-Dateien

Um die Verwaltung von Ressourcen zu vereinfachen, können Sie Ressourcen auf der Ebene Ihres Azure-Abonnements bereitstellen. Beispielsweise können Sie Richtlinien und rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) für Ihr Abonnement bereitstellen, wodurch diese dann in Ihrem gesamten Abonnement angewendet wird.

In diesem Artikel wird beschrieben, wie Sie den Bereitstellungsbereich auf ein Abonnement in einer Bicep-Datei festlegen.

Hinweis

In einer Bereitstellung auf Abonnementebene können Sie in 800 verschiedenen Ressourcengruppen bereitstellen.

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 Abonnementebene bereitgestellt werden. Im folgenden Abschnitt werden die unterstützten Ressourcentypen aufgelistet.

Verwenden Sie für Azure Blueprints:

Verwenden Sie für Azure-Richtlinien:

Verwenden Sie zur Zugriffssteuerung Folgendes:

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

Verwenden Sie zum Erstellen neuer Ressourcengruppen:

Verwenden Sie zum Verwalten Ihres Abonnements:

Verwenden Sie für die Überwachung Folgendes:

Verwenden Sie für Sicherheit Folgendes:

Andere unterstützte Typen sind unter anderem:

Mengenbereich

Legen Sie den Bereich wie folgt auf ein Abonnement fest:

targetScope = 'subscription'

Bereitstellungsbefehle

Verwenden Sie die Bereitstellungsbefehle auf Abonnementbereich für die Bereitstellung in einem Abonnement.

Verwenden Sie für die Azure-Befehlszeilenschnittstelle az deployment sub create. Das folgende Beispiel stellt eine Vorlage zum Erstellen einer Ressourcengruppe bereit:

az deployment sub create \
  --name demoSubDeployment \
  --location centralus \
  --template-file main.bicep \
  --parameters rgName=demoResourceGroup rgLocation=centralus

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 Abonnementebene 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 Verwaltungsgruppe und Mandant benötigen auch einen Speicherort. Für Ressourcengruppe-Bereitstellungen 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.json 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 Abonnementbereitstellung 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 ein Abonnement können Sie Ressourcen an folgenden Orten bereitstellen:

  • im Zielabonnement des Vorgangs
  • in einem beliebigen Abonnement im Mandanten
  • in anderen Ressourcengruppen im Abonnement oder in anderen Abonnements
  • im Mandanten für das Abonnement

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: Abonnement

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

targetScope = 'subscription'

// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  ...
}

Beispiele für die Bereitstellung im Abonnement finden Sie unter Erstellen von Ressourcengruppen mit Bicep und Zuweisen von Richtliniendefinitionen.

Zum Bereitstellen von Ressourcen in einem anderen Abonnement als dem des Vorgangs fügen Sie ein Modul hinzu. Verwenden Sie die subscription-Funktion, um die Eigenschaft scope festzulegen. Legen Sie subscriptionId auf die ID des Abonnements fest, in dem die Bereitstellung erfolgen soll.

targetScope = 'subscription'

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToDifferentSub'
  scope: subscription(otherSubscriptionID)
}

Bereich: Ressourcengruppe

Zum Bereitstellen von Ressourcen in einer Ressourcengruppe im Abonnement fügen Sie ein Modul hinzu und legen seine Eigenschaft scope fest. Wenn die Ressourcengruppe bereits vorhanden ist, verwenden Sie die resourceGroup-Funktion, um den Bereichswert festzulegen. Geben Sie den Ressourcengruppennamen an.

targetScope = 'subscription'

param resourceGroupName string

module exampleModule 'module.bicep' = {
  name: 'exampleModule'
  scope: resourceGroup(resourceGroupName)
}

Wenn die Ressourcengruppe in derselben Bicep-Datei erstellt wird, verwenden Sie den symbolischen Namen der Ressourcengruppe, um den Bereichswert festzulegen. Ein Beispiel für das Festlegen des Bereichs auf den symbolischen Namen finden Sie unter Erstellen einer Ressourcengruppen mit Bicep.

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.

Das folgende Beispiel enthält ein Modul, das im Mandanten bereitgestellt wird.

targetScope = 'subscription'

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

Anstatt ein Modul zu verwenden, können Sie für einige Ressourcentypen den Bereich auf tenant() festlegen. Im folgenden Beispiel wird eine Verwaltungsgruppe im Mandanten bereitgestellt.

targetScope = 'subscription'

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

// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2021-04-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Weitere Informationen finden Sie unter Verwaltungsgruppe.

Ressourcengruppen

Informationen zum Erstellen von Ressourcengruppen finden Sie unter Erstellen einer Ressourcengruppe mit Bicep.

Azure Policy

Zuweisen einer Richtliniendefinition

Im folgenden Beispiel wird dem Abonnement eine vorhandene Richtliniendefinition zugewiesen. Wenn die Richtliniendefinition Parameter unterstützt, stellen Sie diese als Objekt bereit. Wenn die Richtliniendefinition keine Parameter unterstützt, verwenden Sie das standardmäßige leere Objekt.

targetScope = 'subscription'

param policyDefinitionID string
param policyName string
param policyParameters object = {}

resource policyAssign 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: policyName
  properties: {
    policyDefinitionId: policyDefinitionID
    parameters: policyParameters
  }
}

Erstellen und Zuweisen von Richtliniendefinitionen

Sie können eine Richtliniendefinition in derselben Bicep-Datei definieren und zuweisen.

targetScope = 'subscription'

resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: 'locationpolicy'
  properties: {
    policyType: 'Custom'
    parameters: {}
    policyRule: {
      if: {
        field: 'location'
        equals: 'northeurope'
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource locationRestrict 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: 'allowedLocation'
  properties: {
    policyDefinitionId: locationPolicy.id
  }
}

Zugriffssteuerung

Informationen zum Zuweisen von Rollen finden Sie unter Hinzufügen von Azure-Rollenzuweisungen mithilfe von Azure Resource Manager-Vorlagen.

Im folgenden Beispiel wird eine Ressourcengruppe erstellt, eine Sperre darauf angewendet und einem Prinzipal eine Rolle zugewiesen.

targetScope = 'subscription'

@description('Name of the resourceGroup to create')
param resourceGroupName string

@description('Location for the resourceGroup')
param resourceGroupLocation string

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition to apply to the resourceGroup - default is contributor')
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'

@description('Unique name for the roleAssignment in the format of a guid')
param roleAssignmentName string = guid(principalId, roleDefinitionId, resourceGroupName)

var roleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'

resource newResourceGroup 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
  properties: {}
}

module applyLock 'lock.bicep' = {
  name: 'applyLock'
  scope: newResourceGroup
}

module assignRole 'role.bicep' = {
  name: 'assignRBACRole'
  scope: newResourceGroup
  params: {
    principalId: principalId
    roleNameGuid: roleAssignmentName
    roleDefinitionId: roleID
  }
}

Im folgenden Beispiel wird das Modul zum Anwenden der Sperre gezeigt:

resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
  name: 'rgLock'
  properties: {
    level: 'CanNotDelete'
    notes: 'Resource group should not be deleted.'
  }
}

Im nächsten Beispiel wird das Modul zum Zuweisen der Rolle gezeigt:

@description('The principal to assign the role to')
param principalId string

@description('A GUID used to identify the role assignment')
param roleNameGuid string = newGuid()

param roleDefinitionId string

resource roleNameGuid_resource 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleNameGuid
  properties: {
    roleDefinitionId: roleDefinitionId
    principalId: principalId
  }
}

Nächste Schritte

Informationen zu anderen Bereichen finden Sie unter Folgendem: