Implementaties van beheergroep met Bicep-bestanden

In dit artikel wordt beschreven hoe u een bereik in kunt stellen met Bicep wanneer u implementeert in een beheergroep.

Naarmate uw organisatie zich verder ontwikkelde, kunt u een Bicep-bestand implementeren om resources te maken op beheergroepsniveau. U moet bijvoorbeeld beleidsregels of op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) definiëren en toewijzen voor een beheergroep. Met beheergroepssjablonen kunt u beleidsregels declaratief toepassen en rollen toewijzen op beheergroepsniveau.

Microsoft Learn

Zie Deploy resources to subscriptions, management groups, and tenants by using Bicep on Microsoft Learn (Resources implementeren naar abonnementen, beheergroepen en tenants met bicep op Microsoft Learn) voor meer informatie over implementatiebereiken en praktijkhandleiding.

Ondersteunde resources

Niet alle resourcetypen kunnen worden geïmplementeerd op het niveau van de beheergroep. In deze sectie wordt vermeld welke resourcetypen worden ondersteund.

Gebruik Azure Blueprints voor meer informatie:

Gebruik Azure Policy voor meer informatie:

Gebruik voor toegangsbeheer:

Voor geneste sjablonen die worden geïmplementeerd in abonnementen of resourcegroepen, gebruikt u:

Voor het beheren van uw resources gebruikt u:

Beheergroepen zijn resources op tenantniveau. U kunt echter beheergroepen maken in een beheergroepimplementatie door het bereik van de nieuwe beheergroep in te stellen op de tenant. Zie Beheergroep.

Bereik instellen

Als u het bereik wilt instellen op beheergroep, gebruikt u:

targetScope = 'managementGroup'

Implementatieopdrachten

Als u wilt implementeren in een beheergroep, gebruikt u de implementatieopdrachten voor beheergroep.

Gebruik voor 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"

Zie voor meer informatie over implementatieopdrachten en -opties voor het implementeren van ARM-sjablonen:

Locatie en naam van implementatie

Voor implementaties op beheergroepniveau moet u een locatie voor de implementatie verstrekken. De locatie van de implementatie is gescheiden van de locatie van de resources die u implementeert. De implementatielocatie geeft aan waar implementatiegegevens moeten worden opgeslagen. Voor abonnements- en tenantimplementaties is ook een locatie vereist. Voor resourcegroepimplementaties wordt de locatie van de resourcegroep gebruikt om de implementatiegegevens op te slaan.

U kunt een naam voor de implementatie of de standaard implementatienaam gebruiken. De standaardnaam is de naam van het sjabloonbestand. Als u bijvoorbeeld een sjabloon met de naam main.bicep implementeert, wordt de standaard implementatienaam main gemaakt.

Voor elke implementatienaam is de locatie onveranderbaar. U kunt geen implementatie op één locatie maken wanneer er een bestaande implementatie met dezelfde naam op een andere locatie is. Als u bijvoorbeeld een implementatie van een beheergroep maakt met de naam deployment1 in centralus, kunt u later geen andere implementatie maken met de naam deployment1, maar met de locatie westus. Als u de foutcode krijgt, gebruikt u een andere naam of dezelfde locatie als de vorige InvalidDeploymentLocation implementatie voor die naam.

Implementatiebereiken

Wanneer u implementeert in een beheergroep, kunt u resources implementeren op:

  • de doelbeheergroep van de bewerking
  • een andere beheergroep in de tenant
  • abonnementen in de beheergroep
  • resourcegroepen in de beheergroep
  • de tenant voor de resourcegroep

Een extensieresource kan worden gericht op een ander doel dan het implementatiedoel.

De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.

Bereik tot beheergroep

Als u resources wilt implementeren in de doelbeheergroep, voegt u deze resources toe met het resource trefwoord .

targetScope = 'managementGroup'

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

Als u zich wilt richten op een andere beheergroep, voegt u een module toe. Gebruik de functie managementGroup om de eigenschap in te scope stellen. Geef de naam van de beheergroep op.

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

Bereik tot abonnement

U kunt zich ook richten op abonnementen binnen een beheergroep. De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.

Als u zich wilt richten op een abonnement in de beheergroep, voegt u een module toe. Gebruik de abonnementsfunctie om de eigenschap in scope te stellen. Geef de abonnements-id op.

targetScope = 'managementGroup'

param subscriptionID string

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

Bereik naar resourcegroep

U kunt zich ook richten op resourcegroepen binnen de beheergroep. De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.

Als u zich wilt richten op een resourcegroep in de beheergroep, voegt u een module toe. Gebruik de functie resourceGroup om de eigenschap in scope te stellen. Geef de abonnements-id en de naam van de resourcegroep op.

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

Bereik naar tenant

Als u resources wilt maken in de tenant, voegt u een module toe. Gebruik de tenantfunctie om de eigenschap ervan in scope te stellen. De gebruiker die de sjabloon implementeert, moet de vereiste toegang hebben om te implementeren in de tenant.

targetScope = 'managementGroup'

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

U kunt het bereik ook instellen op / voor bepaalde resourcetypen, zoals beheergroepen. Het maken van een nieuwe beheergroep wordt beschreven in de volgende sectie.

Beheergroep

Als u een beheergroep wilt maken in een beheergroepimplementatie, moet u het bereik instellen op de tenant.

In het volgende voorbeeld wordt een nieuwe beheergroep gemaakt in de hoofdbeheergroep.

targetScope = 'managementGroup'

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

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

output newManagementGroup string = mgName

In het volgende voorbeeld wordt een nieuwe beheergroep gemaakt in de beheergroep die voor de implementatie is bedoeld. Hiervoor wordt de beheergroepfunctie gebruikt.

targetScope = 'managementGroup'

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

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

output newManagementGroup string = mgName

Abonnementen

Als u een ARM-sjabloon wilt gebruiken om een nieuw Azure-abonnement te maken in een beheergroep, gaat u naar:

Zie Abonnementen verplaatsen in ARM-sjabloon voor het implementeren van een sjabloon die een bestaand Azure-abonnement verplaatst naar een nieuwe beheergroep

Azure Policy

Aangepaste beleidsdefinities die in de beheergroep worden geïmplementeerd, zijn extensies van de beheergroep. Gebruik de functie extensionResourceId() om de id van een aangepaste beleidsdefinitie op te halen. Ingebouwde beleidsdefinities zijn resources op tenantniveau. Gebruik de functie tenantResourceId() om de id van een ingebouwde beleidsdefinitie op te halen.

In het volgende voorbeeld ziet u hoe u een beleid definieert op het niveau van de beheergroep en dit toewijst.

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@2020-09-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

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

Volgende stappen

Zie voor meer informatie over andere scopes: