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 Azure AD-klientorganisation. Med mallar på klientorganisationsnivå kan du deklarativt tillämpa principer och tilldela roller på global nivå.

Resurser som stöds

Alla resurstyper kan inte distribueras på 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:

Om du vill skapa hanteringsgrupper använder du:

För att skapa prenumerationer använder du:

Använd följande för att hantera kostnader:

För att konfigurera portalen använder du:

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

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

Det huvudnamn som distribuerar mallen måste ha behörighet att skapa resurser i klientorganisationsomfånget. Huvudnamn måste ha behörighet att köra distributionsåtgärderna ( Microsoft.Resources/deployments/* ) och för att skapa de resurser som definierats i mallen. Om du till exempel vill skapa en hanteringsgrupp måste huvudnamn ha behörigheten Deltagare i klientorganisationsomfånget. Om du vill skapa rolltilldelningar måste huvudägaren ha behörigheten Ägare.

Den globala administratören för Azure Active Directory har automatiskt behörighet att tilldela roller. Om du vill aktivera malldistributioner i klientorganisationsomfånget måste den globala administratören göra följande:

  1. Utö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"
    

Huvudnamn 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 att distribuera ARM-mallar finns i:

Distributionsplats och namn

För distributioner på klientorganisationsnivå 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. Distributioner av prenumerations- och hanteringsgrupp 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 standarddistributionsnamnet 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 usa, kan du inte senare skapa en annan distribution med namnet deployment1 utan platsen 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 klientorganisation kan du distribuera resurser till:

  • klienten
  • hanteringsgrupper i klientorganisationen
  • Prenumerationer
  • resursgrupper

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.

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 till hanteringsgrupp

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

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

Omfång till prenumeration

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

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

{
  "$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 till resursgrupp

Du kan också rikta in dig på resursgrupper i klientorganisationen. 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 klientorganisationen använder du en kapslad distribution. Ange egenskaperna subscriptionId resourceGroup och . Ange inte en plats för den kapslade distributionen eftersom den distribueras på resursgruppens plats.

{
  "$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 klientorganisationsomfånget.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.4.1008.15138",
      "templateHash": "11836852523469035276"
    }
  },
  "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"
      }
    }
  },
  "functions": [],
  "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