Distributioner av hanteringsgrupp med Bicep-filer

I den här artikeln beskrivs hur du anger omfång med Bicep när du distribuerar till en hanteringsgrupp.

När din organisation mognar kan du distribuera en Bicep-fil för att skapa resurser på hanteringsgruppsnivå. Du kan till exempel behöva definiera och tilldela principer eller rollbaserad åtkomstkontroll i Azure (Azure RBAC) för en hanteringsgrupp. Med mallar på hanteringsgruppsnivå kan du deklarativt tillämpa principer och tilldela roller på hanteringsgruppsnivå.

Microsoft Learn

Mer information om distributionsomfång och praktisk vägledning finns i Distribuera resurser till prenumerationer, hanteringsgrupper och klienter med hjälp av Bicep på Microsoft Learn.

Resurser som stöds

Alla resurstyper kan inte distribueras till hanteringsgruppsnivån. I det här avsnittet visas vilka resurstyper som stöds.

För Azure Blueprints använder du:

För Azure Policy använder du:

Använd följande för åtkomstkontroll:

För kapslade mallar som distribueras till prenumerationer eller resursgrupper använder du:

Använd följande för att hantera dina resurser:

Hanteringsgrupper är resurser på klientorganisationsnivå. Du kan dock skapa hanteringsgrupper i en hanteringsgruppsdistribution genom att ange omfånget för den nya hanteringsgruppen till klienten. Se Hanteringsgrupp.

Ange omfång

Om du vill ange omfånget till hanteringsgrupp använder du:

targetScope = 'managementGroup'

Distributionskommandon

Om du vill distribuera till en hanteringsgrupp använder du hanteringsgruppens distributionskommandon.

För Azure CLI använder du 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"

Mer detaljerad information om distributionskommandon och alternativ för att distribuera ARM-mallar finns i:

Distributionsplats och namn

För distributioner på hanteringsgruppsnivå måste du ange en plats för distributionen. Platsen för distributionen är separat från platsen för de resurser som du distribuerar. Distributionsplatsen anger var distributionsdata ska lagras. Prenumerations- och klientdistributioner kräver också en plats. För distributioner av resursgrupper används platsen för resursgruppen för att lagra distributionsdata.

Du kan ange ett namn för distributionen eller använda standardnamnet för distributionen. Standardnamnet är namnet på mallfilen. Om du till exempel distribuerar en mall med namnet main.bicep skapas standarddistributionsnamnet main.

För varje distributionsnamn är platsen oföränderlig. Du kan inte skapa en distribution på en plats när det finns en befintlig distribution med samma namn på en annan plats. Om du till exempel skapar en hanteringsgruppsdistribution med namnet deployment1 i centralus kan du inte senare skapa en annan distribution med namnet deployment1 utan en plats för westus. Om du får felkoden InvalidDeploymentLocation använder du antingen ett annat namn eller samma plats som den tidigare distributionen för det namnet.

Distributionsomfång

När du distribuerar till en hanteringsgrupp kan du distribuera resurser till:

  • målhanteringsgruppen från åtgärden
  • en annan hanteringsgrupp i klientorganisationen
  • prenumerationer i hanteringsgruppen
  • resursgrupper i hanteringsgruppen
  • klientorganisationen för resursgruppen

En tilläggsresurs kan vara begränsad till ett mål som skiljer sig från distributionsmålet.

Den användare som distribuerar mallen måste ha åtkomst till det angivna omfånget.

Omfång till hanteringsgrupp

Om du vill distribuera resurser till målhanteringsgruppen lägger du till resurserna med resource nyckelordet .

targetScope = 'managementGroup'

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

Lägg till en modul för att rikta in dig på en annan hanteringsgrupp. Använd funktionen managementGroup för att ange scope egenskapen . Ange hanteringsgruppens namn.

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

Omfång till prenumeration

Du kan också rikta prenumerationer inom en hanteringsgrupp. Den användare som distribuerar mallen måste ha åtkomst till det angivna omfånget.

Om du vill rikta in dig på en prenumeration i hanteringsgruppen lägger du till en modul. Använd prenumerationsfunktionen för att ange scope egenskapen . Ange prenumerations-ID:t.

targetScope = 'managementGroup'

param subscriptionID string

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

Omfång till resursgrupp

Du kan också rikta in dig på resursgrupper i hanteringsgruppen. Den användare som distribuerar mallen måste ha åtkomst till det angivna omfånget.

Om du vill rikta in dig på en resursgrupp i hanteringsgruppen lägger du till en modul. Använd funktionen resourceGroup för att ange scope egenskapen . Ange prenumerations-ID och resursgruppsnamn.

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

Omfång till klientorganisation

Lägg till en modul för att skapa resurser i klientorganisationen. Använd klientfunktionen för att ange dess scope egenskap. Den användare som distribuerar mallen måste ha nödvändig åtkomst för att distribuera på klientorganisationen.

targetScope = 'managementGroup'

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

Eller så kan du ange omfånget till / för vissa resurstyper, till exempel hanteringsgrupper. Skapa en ny hanteringsgrupp beskrivs i nästa avsnitt.

Hanteringsgrupp

Om du vill skapa en hanteringsgrupp i en distribution av en hanteringsgrupp måste du ange omfånget till klienten.

I följande exempel skapas en ny hanteringsgrupp i rothanteringsgruppen.

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

I nästa exempel skapas en ny hanteringsgrupp i den hanteringsgrupp som är mål för distributionen. Den använder hanteringsgruppsfunktionen.

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

Prenumerationer

Om du vill använda en ARM-mall för att skapa en ny Azure-prenumeration i en hanteringsgrupp kan du läsa:

Information om hur du distribuerar en mall som flyttar en befintlig Azure-prenumeration till en ny hanteringsgrupp finns i Flytta prenumerationer i ARM-mall

Azure Policy

Anpassade principdefinitioner som distribueras till hanteringsgruppen är tillägg av hanteringsgruppen. Om du vill hämta ID:t för en anpassad principdefinition använder du funktionen extensionResourceId(). Inbyggda principdefinitioner är resurser på klientorganisationsnivå. Om du vill hämta ID:t för en inbyggd principdefinition använder du funktionen tenantResourceId().

I följande exempel visas hur du definierar en princip på hanteringsgruppsnivå och tilldelar den.

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

Nästa steg

Mer information om andra omfång finns i: