Implantações de locatários com arquivo Bicep

À medida que sua organização amadurece, talvez seja necessário definir e atribuir políticas ou controle de acesso baseado em função do Azure (Azure RBAC) em seu locatário do Microsoft Entra. Com modelos de nível de locatário, você pode aplicar políticas declarativamente e atribuir funções em um nível global.

Recursos de formação

Se preferir saber mais sobre escopos de implantação por meio de orientação passo a passo, consulte Implantar recursos para assinaturas, grupos de gerenciamento e locatários usando o Bicep.

Recursos suportados

Nem todos os tipos de recursos podem ser implantados no nível do locatário. Esta seção lista quais tipos de recursos são suportados.

Para o controle de acesso baseado em função do Azure (Azure RBAC), use:

Para modelos aninhados que implantam em grupos de gerenciamento, assinaturas ou grupos de recursos, use:

Para criar grupos de gerenciamento, use:

Para criar assinaturas, use:

Para gerir custos, utilize:

Para configurar o portal, use:

As definições de política internas são recursos no nível do locatário, mas você não pode implantar definições de política personalizadas no locatário. Para obter um exemplo de atribuição de uma definição de política interna a um recurso, consulte tenantResourceId example.

Definir âmbito

Para definir o escopo como locatário, use:

targetScope = 'tenant'

Acesso necessário

A entidade de segurança que implanta o modelo deve ter permissões para criar recursos no escopo do locatário. A entidade de segurança 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 gerenciamento, a entidade de segurança deve ter permissão de Colaborador no escopo do locatário. Para criar atribuições de função, a entidade de segurança deve ter permissão de proprietário.

O Administrador Global da ID do Microsoft Entra não tem permissão automática para atribuir funções. Para habilitar implantações de modelo no escopo do locatário, o Administrador Global deve executar as seguintes etapas:

  1. Eleve 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 à entidade de segurança que precisa implantar os modelos.

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

A entidade de segurança agora tem as permissões necessárias para implantar o modelo.

Comandos de implantação

Os comandos para implantações de locatário são diferentes dos comandos para implantações de grupo de recursos.

Para a CLI do Azure, use az deployment tenant create:

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

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

Local e nome da implantação

Para implantações em nível de locatário, você deve fornecer um local para a implantação. O local da implantação é separado do local dos recursos implantados. O local de implantação especifica onde armazenar os dados de implantação. As implantações de assinatura e grupo de gerenciamento também exigem um local. Para implantações de grupo de recursos, o local do grupo de recursos é usado para armazenar os dados de implantação.

Você pode fornecer um nome para a implantação ou usar o nome de implantação padrão. O nome padrão é o nome do arquivo de modelo. Por exemplo, a implantação de um arquivo chamado main.bicep cria um nome de implantação padrão de main.

Para cada nome de implantação, o local é imutável. Não é possível criar uma implantação em um local quando há uma implantação existente com o mesmo nome em um local diferente. Por exemplo, se você criar uma implantação de locatário com o nome deployment1 no centralus, não poderá criar posteriormente outra implantação com o nome deployment1, mas um local do westus. Se você receber o código InvalidDeploymentLocationde erro , use um nome diferente ou o mesmo local da implantação anterior para esse nome.

Escopos de implantação

Ao implantar em um locatário, você pode implantar recursos para:

  • o inquilino
  • grupos de gerenciamento dentro do locatário
  • subscrições
  • grupos de recursos

Um recurso de extensão pode ter um escopo diferente do destino de implantação.

O usuário que implanta o modelo deve ter acesso ao escopo especificado.

Esta seção mostra como especificar escopos diferentes. Você pode combinar esses diferentes escopos em um único modelo.

Âmbito de aplicação para o inquilino

Os recursos definidos no arquivo Bicep são aplicados ao locatário.

targetScope = 'tenant'

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

Âmbito de aplicação do grupo de gestão

Para direcionar um grupo de gerenciamento dentro do locatário, adicione um módulo. Use a função managementGroup para definir sua scope propriedade. Forneça o nome do grupo de gerenciamento.

targetScope = 'tenant'

param managementGroupName string

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

Âmbito da subscrição

Para direcionar uma assinatura dentro do locatário, adicione um módulo. Use a função de assinatura para definir sua scope propriedade. Forneça o ID da assinatura.

targetScope = 'tenant'

param subscriptionID string

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

Âmbito do grupo de recursos

Para direcionar um grupo de recursos dentro do locatário, adicione um módulo. Use a função resourceGroup para definir sua scope propriedade. Forneça a ID da assinatura e o nome do grupo de recursos.

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

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

Criar grupo de gestão

O modelo a seguir cria um grupo de gerenciamento.

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

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

Se sua conta não tiver permissão para implantar no locatário, você ainda poderá criar grupos de gerenciamento implantando em outro escopo. Para obter mais informações, consulte Grupo de gerenciamento.

Atribuir função

O modelo a seguir atribui uma função no escopo do locatário.

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

Próximos passos

Para saber mais sobre outros escopos, consulte: