Klientdistributioner med ARM-mallar

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å.

Dricks

Vi rekommenderar Bicep eftersom det erbjuder samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i klientdistributioner.

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.

Schema

Schemat som du använder för klientdistributioner skiljer sig från schemat för resursgruppsdistributioner.

För mallar använder du:

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

Schemat för en parameterfil är detsamma för alla distributionsomfång. För parameterfiler använder du:

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

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-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/tenant-deployments/new-mg/azuredeploy.json"

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 mall med namnet azuredeploy.json skapas ett standarddistributionsnamn för azuredeploy.

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 resursavsnittet i mallen tillämpas på klientorganisationen.

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

Omfång för hanteringsgrupp

Om du vill rikta in dig på en hanteringsgrupp i klientorganisationen lägger du till en kapslad distribution och anger egenskapen scope .

{
  "$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": "2022-09-01",
      "name": "nestedMG",
      "scope": "[variables('mgId')]",
      "location": "eastus",
      "properties": {
        "mode": "Incremental",
        "template": {
          management-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

Omfång för prenumeration

Du kan också rikta prenumerationer i klientorganisationen. Användaren som distribuerar mallen måste ha åtkomst till det angivna omfånget.

Om du vill rikta in dig på en prenumeration i klientorganisationen använder du en kapslad distribution och egenskapen subscriptionId .

{
  "$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
            }
          ]
        }
      }
    }
  ]
}

Omfång för resursgrupp

Du kan också rikta in dig på resursgrupper i klientorganisationen. Användaren som distribuerar mallen måste ha åtkomst till det angivna omfånget.

Om du vill rikta in dig på en resursgrupp i klientorganisationen använder du en kapslad distribution. subscriptionId Ange egenskaperna ochresourceGroup. Ange ingen plats för den kapslade distributionen eftersom den distribueras på platsen för resursgruppen.

{
  "$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
            }
          ]
        }
      }
    }
  ]
}

Skapa en hanteringsgrupp

Följande mall skapar en hanteringsgrupp.

{
    "$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": {
        }
      }
    ]
  }

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.

{
  "$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')]"
      }
    }
  ]
}

Nästa steg