Tenantimplementaties met ARM-sjablonen

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

Tip

We raden Bicep aan omdat deze dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie tenantimplementaties voor meer informatie.

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

Gebruik voor geneste sjablonen die worden geïmplementeerd in beheergroepen, abonnementen of resourcegroepen:

Gebruik voor het maken van beheergroepen het volgende:

Gebruik voor het maken van abonnementen:

Gebruik voor het beheren van kosten:

Gebruik voor het configureren van de portal:

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

Schema

Het schema dat u gebruikt voor tenantimplementaties is anders dan het schema voor resourcegroepimplementaties.

Gebruik voor sjablonen:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  ...
}

Het schema voor een parameterbestand is hetzelfde voor alle implementatiebereiken. Gebruik voor parameterbestanden:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

Vereiste toegang

De principal die de sjabloon implementeert, moet machtigingen hebben voor het maken van resources 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 beheerder voor het Azure Active Directory heeft niet automatisch machtigingen om rollen toe te wijzen. Als u sjabloonimplementaties in het tenantbereik wilt inschakelen, moet de globale beheerder de volgende stappen uitvoeren:

  1. Toegang tot accounts verhogen zodat de globale beheerder 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-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/tenant-deployments/new-mg/azuredeploy.json"

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 opgeven voor de implementatie. 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 sjabloon met de naam azuredeploy.json implementeert, wordt een standaardimplementatienaam van azuredeploy 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 tenantimplementatie maakt met de naamimplementatie1 in centralus, kunt u later geen andere implementatie maken met de naamimplementatie1 , 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 in:

  • de tenant
  • beheergroepen binnen de tenant
  • Abonnementen
  • Resourcegroepen

Een extensieresource kan worden beperkt tot 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 zijn gedefinieerd in de sectie Resources van de sjabloon, worden toegepast op de tenant.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    tenant-resources
  ],
  "outputs": {}
}

Bereik naar beheergroep

Als u een beheergroep binnen de tenant wilt richten, voegt u een geneste implementatie toe en geeft u de scope eigenschap op.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string"
    }
  },
  "variables": {
    "mgId": "[concat('Microsoft.Management/managementGroups/', parameters('mgName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedMG",
      "scope": "[variables('mgId')]",
      "location": "eastus",
      "properties": {
        "mode": "Incremental",
        "template": {
          management-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

Bereik voor abonnement

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

Als u een abonnement binnen de tenant wilt gebruiken, gebruikt u een geneste implementatie en de subscriptionId eigenschap.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedSub",
      "location": "westus2",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              subscription-resources
            }
          ]
        }
      }
    }
  ]
}

Bereik naar resourcegroep

U kunt ook resourcegroepen binnen de tenant targeten. De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.

Als u een resourcegroep binnen de tenant wilt gebruiken, gebruikt u een geneste implementatie. Stel de subscriptionId en resourceGroup eigenschappen in. Stel geen locatie in voor de geneste implementatie, omdat deze is geïmplementeerd op de locatie van de resourcegroep.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedRGDeploy",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              resource-group-resources
            }
          ]
        }
      }
    }
  ]
}

Beheergroep maken

Met de volgende sjabloon maakt u een beheergroep.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "mgName": {
        "type": "string",
        "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
      }
    },
    "resources": [
      {
        "type": "Microsoft.Management/managementGroups",
        "apiVersion": "2020-02-01",
        "name": "[parameters('mgName')]",
        "properties": {
        }
      }
    ]
  }

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

Rol toewijzen

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "17107802581699825924"
    }
  },
  "parameters": {
    "principalId": {
      "type": "string",
      "metadata": {
        "description": "principalId if the user that will be given contributor access to the tenant"
      }
    },
    "roleDefinitionId": {
      "type": "string",
      "defaultValue": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
      "metadata": {
        "description": "roleDefinition for the assignment - default is owner"
      }
    }
  },
  "variables": {
    "roleAssignmentName": "[guid('/', parameters('principalId'), parameters('roleDefinitionId'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2020-03-01-preview",
      "name": "[variables('roleAssignmentName')]",
      "properties": {
        "roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
        "principalId": "[parameters('principalId')]"
      }
    }
  ]
}

Volgende stappen