Tenantimplementaties met Bicep-bestand

Naarmate uw organisatie volwassen wordt, moet u mogelijk beleidsregels definiëren en toewijzen of op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) in uw Microsoft Entra-tenant. Met sjablonen op tenantniveau kunt u beleid declaratief toepassen en rollen toewijzen op globaal niveau.

Trainingsmateriaal

Als u liever meer wilt weten over implementatiebereiken via stapsgewijze richtlijnen, raadpleegt u Resources implementeren in abonnementen, beheergroepen en tenants met behulp van Bicep.

Ondersteunde resources

Niet alle resourcetypen kunnen worden geïmplementeerd op tenantniveau. In deze sectie wordt vermeld welke resourcetypen worden ondersteund.

Gebruik voor op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC):

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

Gebruik voor het maken van beheergroepen:

Gebruik voor het maken van abonnementen het volgende:

Gebruik voor het beheren van kosten:

Voor het configureren van de portal gebruikt u:

Ingebouwde beleidsdefinities zijn resources op tenantniveau, maar u kunt geen aangepaste beleidsdefinities implementeren op de tenant. Zie het voorbeeld tenantResourceId voor een voorbeeld van het toewijzen van een ingebouwde beleidsdefinitie aan een resource.

Bereik instellen

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

targetScope = 'tenant'

Vereiste toegang

De principal die de sjabloon implementeert, moet machtigingen hebben om resources te maken binnen het tenantbereik. De principal moet gemachtigd zijn om de implementatieacties (Microsoft.Resources/deployments/*) uit te voeren en om de resources te maken die in de sjabloon zijn gedefinieerd. Als u bijvoorbeeld een beheergroep wilt maken, moet de principal de machtiging Inzender hebben voor het tenantbereik. Als u roltoewijzingen wilt maken, moet de principal de machtiging Eigenaar hebben.

De Globale Beheer istrator voor de Microsoft Entra-id is niet automatisch gemachtigd om rollen toe te wijzen. Als u sjabloonimplementaties in het tenantbereik wilt inschakelen, moet de Globale Beheer istrator de volgende stappen uitvoeren:

  1. Verhoog de toegang tot het account zodat de globale Beheer istrator rollen kan toewijzen. Zie voor meer informatie Toegang verhogen om alle Azure-abonnementen en beheergroepen te beheren.

  2. Wijs eigenaar of inzender toe aan de principal die de sjablonen moet implementeren.

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

De principal beschikt nu over de vereiste machtigingen om de sjabloon te implementeren.

Implementatieopdrachten

De opdrachten voor tenantimplementaties verschillen van de opdrachten voor resourcegroepimplementaties.

Gebruik az deployment tenant create voor Azure CLI:

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

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

Implementatielocatie en -naam

Voor implementaties op tenantniveau moet u een locatie voor de implementatie opgeven. 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 implementaties van abonnementen en beheergroepen is ook een locatie vereist. Voor resourcegroepimplementaties wordt de locatie van de resourcegroep gebruikt om de implementatiegegevens op te slaan.

U kunt een naam opgeven voor de implementatie of de standaardimplementatienaam gebruiken. De standaardnaam is de naam van het sjabloonbestand. Als u bijvoorbeeld een bestand met de naam main.bicep implementeert, wordt een standaardimplementatienaam van het hoofdbestand gemaakt.

Voor elke implementatienaam kan de locatie onveranderbaar zijn. 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 tenantimplementatie maakt met de naam deployment1 in centralus, kunt u later geen andere implementatie maken met de naam deployment1, maar een locatie van westus. Als u de foutcode InvalidDeploymentLocationkrijgt, gebruikt u een andere naam of dezelfde locatie als de vorige implementatie voor die naam.

Implementatiebereiken

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

  • de tenant
  • beheergroepen binnen de tenant
  • abonnementen
  • resourcegroepen

Een extensieresource kan worden afgestemd op een doel dat verschilt van het implementatiedoel.

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

In deze sectie ziet u hoe u verschillende bereiken kunt opgeven. U kunt deze verschillende bereiken combineren in één sjabloon.

Bereik naar tenant

Resources die in het Bicep-bestand zijn gedefinieerd, worden toegepast op de tenant.

targetScope = 'tenant'

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

Bereik voor beheergroep

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

targetScope = 'tenant'

param managementGroupName string

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

Bereik voor abonnement

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

targetScope = 'tenant'

param subscriptionID string

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

Bereik tot resourcegroep

Als u een resourcegroep in de tenant wilt richten, voegt u een module toe. Gebruik de functie resourceGroup om de eigenschap ervan in scope te stellen. Geef de abonnements-id en resourcegroepnaam op.

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

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

Beheergroep maken

Met de volgende sjabloon maakt u een beheergroep.

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

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

Als uw account niet gemachtigd is om te implementeren in de tenant, kunt u nog steeds beheergroepen maken door te implementeren in een ander bereik. Zie Beheergroep voor meer informatie.

Rol toewijzen

Met de volgende sjabloon wordt een rol toegewezen aan het tenantbereik.

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

Volgende stappen

Zie voor meer informatie over andere bereiken: