Implantações de inquilinos com modelos ARM

À medida que a sua organização amadurece, poderá ter de definir e atribuir políticas ou controlo de acesso baseado em funções (Azure RBAC) através do seu inquilino Azure AD. Com modelos de nível de inquilino, você pode declarativamente aplicar políticas e atribuir papéis a nível global.

Dica

Recomendamos a Bicep porque oferece as mesmas capacidades que os modelos ARM e a sintaxe é mais fácil de usar. Para saber mais, consulte os destacamentos de inquilinos.

Recursos suportados

Nem todos os tipos de recursos podem ser implantados ao nível do inquilino. Esta secção lista quais os tipos de recursos suportados.

Para o controlo de acesso baseado em funções Azure (Azure RBAC), utilize:

Para modelos aninhados que se implementam para grupos de gestão, subscrições ou grupos de recursos, utilize:

Para criar grupos de gestão, utilize:

Para criar subscrições, utilize:

Para gerir custos, utilize:

Para configurar o portal, utilize:

Definições políticas incorporadas são recursos ao nível do inquilino, mas você não pode implementar definições de política personalizada no inquilino. Para um exemplo de atribuir uma definição de política incorporada a um recurso, consulte o exemplo do TenantResourceId.

Esquema

O esquema que você usa para implantações de inquilinos é diferente do esquema para implantações de grupos de recursos.

Para modelos, use:

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

O esquema para um ficheiro de parâmetro é o mesmo para todos os âmbitos de implantação. Para ficheiros de parâmetros, utilize:

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

Acesso obrigatório

O principal que implementa o modelo deve ter permissões para criar recursos no âmbito do inquilino. O principal deve ter permissão para executar as ações de implantação (Microsoft.Resources/deployments/*) e para criar os recursos definidos no modelo. Por exemplo, para criar um grupo de gestão, o principal deve ter permissão do Contribuinte no âmbito do arrendatário. Para criar atribuições de funções, o principal deve ter permissão do Proprietário.

O Administrador Global para a Azure Ative Directory não tem automaticamente permissão para atribuir funções. Para permitir a implementação do modelo no âmbito do inquilino, o Administrador Global deve fazer os seguintes passos:

  1. Elevar o acesso à conta para que o Administrador Global possa atribuir funções. Para obter mais informações, veja Elevar o acesso para gerir todas as subscrições e grupos de gestão do Azure.

  2. Atribua proprietário ou colaborador ao principal que precisa de implementar os modelos.

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

O principal tem agora as permissões necessárias para implementar o modelo.

Comandos de implantação

Os comandos para implantações de inquilinos são diferentes dos comandos para implantações de grupos de recursos.

Para o Azure CLI, utilize o inquilino de implantação az criar:

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"

Para obter informações mais detalhadas sobre os comandos de implantação e opções para a implementação de modelos ARM, consulte:

Localização e nome da implantação

Para implantações de nível de inquilino, você deve fornecer uma localização para a implantação. A localização da implantação é separada da localização dos recursos que implementa. A localização da implantação especifica onde armazenar dados de implantação. As implementações de grupos de subscrição e gestão também requerem uma localização. Para a implementação de grupos de recursos , a localização do grupo de recursos é usada para armazenar os dados de implantação.

Pode fornecer um nome para a implementação ou utilizar o nome de implementação predefinido. O nome predefinido é o nome do ficheiro do modelo. Por exemplo, a implementação de um modelo chamado azuredeploy.json cria um nome de implementação padrão de azuredeploy.

Para cada nome de implantação, a localização é imutável. Não é possível criar uma implantação num local quando há uma implantação existente com o mesmo nome num local diferente. Por exemplo, se criar uma implantação de inquilino com o nome implantado1 em central, não pode mais tarde criar outra implantação com o nome de implantação1 , mas uma localização de Westus. Se obter o código de InvalidDeploymentLocationerro , utilize um nome diferente ou o mesmo local que a versão anterior para esse nome.

Âmbitos de implantação

Ao ser destacado para um inquilino, pode mobilizar recursos para:

  • o inquilino
  • grupos de gestão dentro do inquilino
  • assinaturas
  • grupos de recursos

Um recurso de extensão pode ser traçado para um alvo diferente do alvo de implantação.

O utilizador que implementa o modelo deve ter acesso ao âmbito especificado.

Esta secção mostra como especificar diferentes âmbitos. Você pode combinar estes diferentes âmbitos em um único modelo.

Âmbito para inquilino

Os recursos definidos na secção de recursos do modelo são aplicados ao arrendatário.

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

Âmbito para grupo de gestão

Para direcionar um grupo de gestão dentro do inquilino, adicione uma implantação aninhada e especifique o scope imóvel.

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

Âmbito de subscrição

Também pode direcionar as subscrições dentro do inquilino. O utilizador que implementa o modelo deve ter acesso ao âmbito especificado.

Para direcionar uma subscrição dentro do inquilino, use uma implantação aninhada e o subscriptionId imóvel.

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

Âmbito para grupo de recursos

Você também pode direcionar grupos de recursos dentro do inquilino. O utilizador que implementa o modelo deve ter acesso ao âmbito especificado.

Para direcionar um grupo de recursos dentro do inquilino, use uma implantação aninhada. Desa estada as subscriptionIdresourceGroup propriedades. Não desloque um local para a implantação aninhada porque está implantado na localização do grupo de recursos.

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

Criar grupo de gestão

O modelo a seguir cria um grupo de gestão.

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

Se a sua conta não tiver permissão para implantar no inquilino, ainda pode criar grupos de gestão implantando-se para outro âmbito. Para mais informações, consulte o Grupo de Gestão.

Atribuir função

O modelo a seguir atribui uma função no âmbito do inquilino.

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

Passos seguintes