Klientdistributioner med Bicep-fil

När din organisation mognar kan du behöva definiera och tilldela principer eller rollbaserad åtkomstkontroll i Azure (Azure RBAC) i din Microsoft Entra-klientorganisation. Med mallar på klientnivå kan du deklarativt tillämpa principer och tilldela roller på global nivå.

Utbildningsresurser

Om du hellre vill lära dig mer om distributionsomfång via stegvis vägledning kan du läsa Distribuera resurser till prenumerationer, hanteringsgrupper och klientorganisationer med hjälp av Bicep.

Resurser som stöds

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

För rollbaserad åtkomstkontroll i Azure (Azure RBAC) använder du:

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

Använd för att skapa hanteringsgrupper:

För att skapa prenumerationer använder du:

Använd för att hantera kostnader:

För att konfigurera portalen använder du:

Inbyggda principdefinitioner är resurser på klientnivå, men du kan inte distribuera anpassade principdefinitioner i klientorganisationen. Ett exempel på hur du tilldelar en inbyggd principdefinition till en resurs finns i exemplet tenantResourceId.

Ange omfång

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

targetScope = 'tenant'

Nödvändig åtkomst

Huvudkontot som distribuerar mallen måste ha behörighet att skapa resurser i klientomfånget. Huvudkontot måste ha behörighet att köra distributionsåtgärderna (Microsoft.Resources/deployments/*) och att skapa de resurser som definierats i mallen. Om du till exempel vill skapa en hanteringsgrupp måste huvudkontot ha behörigheten Deltagare i klientomfånget. Om du vill skapa rolltilldelningar måste huvudnamnet ha ägarbehörighet.

Den globala administratören för Microsoft Entra-ID:t har inte automatiskt behörighet att tilldela roller. Om du vill aktivera malldistributioner i klientomfånget måste den globala administratören göra följande:

  1. Öka kontoåtkomsten så att den globala administratören kan tilldela roller. Läs mer i Utöka åtkomst för att hantera alla Azure-prenumerationer och hanteringsgrupper.

  2. Tilldela ägare eller deltagare till det huvudnamn som behöver distribuera mallarna.

    New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
    
    az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
    

Huvudkontot har nu de behörigheter som krävs för att distribuera mallen.

Distributionskommandon

Kommandona för klientdistributioner skiljer sig från kommandona för resursgruppsdistributioner.

För Azure CLI använder du az deployment tenant create:

az deployment tenant create \
  --name demoTenantDeployment \
  --location WestUS \
  --template-file main.bicep

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

Distributionsplats och namn

För distributioner på klientnivå måste du ange en plats för distributionen. Distributionens plats är separat från platsen för de resurser som du distribuerar. Distributionsplatsen anger var distributionsdata ska lagras. Distributioner av prenumerationer och hanteringsgrupper kräver också en plats. För resursgruppsdistributioner används platsen för resursgruppen för att lagra distributionsdata.

Du kan ange ett namn för distributionen eller använda standarddistributionsnamnet. Standardnamnet är namnet på mallfilen. Om du till exempel distribuerar en fil med namnet main.bicep skapas ett standarddistributionsnamn för 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 klientdistribution med namnet deployment1 i centralus kan du inte senare skapa en annan distribution med namnet deployment1 utan en plats i westus. Om du får felkoden InvalidDeploymentLocationanvä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 klientorganisation kan du distribuera resurser till:

  • klientorganisationen
  • hanteringsgrupper i klientorganisationen
  • prenumerationer
  • resursgrupper

En tilläggsresurs kan begränsas till ett annat mål än distributionsmålet.

Användaren som distribuerar mallen måste ha åtkomst till det angivna omfånget.

Det här avsnittet visar hur du anger olika omfång. Du kan kombinera dessa olika omfång i en enda mall.

Omfång för klientorganisation

Resurser som definierats i Bicep-filen tillämpas på klientorganisationen.

targetScope = 'tenant'

// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  ...
}

Omfång för hanteringsgrupp

Om du vill rikta in dig på en hanteringsgrupp i klientorganisationen lägger du till en modul. Använd funktionen managementGroup för att ange dess scope egenskap. Ange namnet på hanteringsgruppen.

targetScope = 'tenant'

param managementGroupName string

// create resources at management group level
module  'module.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupName)
}

Omfång för prenumeration

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

targetScope = 'tenant'

param subscriptionID string

// create resources at subscription level
module  'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

Omfång för resursgrupp

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

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

// create resources at resource group level
module  'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Skapa en hanteringsgrupp

Följande mall skapar en hanteringsgrupp.

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

resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  name: mgName
  properties: {}
}

Om ditt konto inte har behörighet att distribuera till klientorganisationen kan du fortfarande skapa hanteringsgrupper genom att distribuera till ett annat omfång. Mer information finns i Hanteringsgrupp.

Tilldela rollen

Följande mall tilldelar en roll i klientomfånget.

targetScope = 'tenant'

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

@description('roleDefinition for the assignment - default is owner')
param roleDefinitionId string = '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'

var roleAssignmentName = guid(principalId, roleDefinitionId)

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    principalId: principalId
  }
}

Nästa steg

Mer information om andra omfång finns i: