Implantações de grupo de gerenciamento com arquivos Bicep
Este artigo descreve como definir o escopo com o Bicep ao implantar em um grupo de gerenciamento.
À medida que a sua organização amadurece, você pode implantar um arquivo Bicep para criar recursos no nível do grupo de gerenciamento. Por exemplo, talvez você precise definir e atribuir políticas ou o RBAC do Azure (controle de acesso baseado em função do Azure) para um grupo de gerenciamento. Com os modelos em nível de grupo de gerenciamento, você pode atribuir funções nesse mesmo nível e aplicar políticas declarativamente.
Recursos de treinamento
Se você quiser saber mais sobre os escopos de implantação por meio de diretrizes passo a passo, confira Implantar recursos em assinaturas, grupos de gerenciamento e locatários usando o Bicep.
Recursos compatíveis
Nem todos os tipos de recursos podem ser implantados em nível de grupo de gerenciamento. Esta seção lista os tipos de recursos compatíveis.
Para o Azure Blueprints, use:
Para o Azure Policy, use:
Para controle de acesso, use:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Para modelos aninhados que são implantados em assinaturas ou grupos de recursos, use:
Para gerenciar recursos, use:
Os grupos de gerenciamento são recursos em nível de locatário. No entanto, é possível criá-los em uma implantação de grupo de gerenciamento definindo o escopo do novo grupo de gerenciamento para o locatário. Confira Grupo de gerenciamento.
Escopo de conjunto
Para definir o escopo para o grupo de gerenciamento, use:
targetScope = 'managementGroup'
Comandos de implantação
Para implantar em um grupo de gerenciamento, use os comandos de implantação de grupo de gerenciamento.
Para a CLI do Azure, use az deployment mg create:
az deployment mg create \
--name demoMGDeployment \
--location WestUS \
--management-group-id myMG \
--template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/management-level-deployment/azuredeploy.json"
Para obter informações mais detalhadas sobre os comandos de implantação e as opções para implantar modelos do ARM, confira:
- Implantar recursos com modelos do Resource Manager e a CLI do Azure
- Implantar recursos com modelos do Resource Manager e o Azure PowerShell
- Implantar modelos do ARM do Cloud Shell
Nome e local da implantação
Para implantações em nível de grupo de gerenciamento, você deve informar um local para a implantação. O local da implantação é separado do local dos recursos que você implanta. O local de implantação especifica onde armazenar os dados de implantação. As implantações de assinatura e locatário também exigem um local. Para implantações de grupo de recursos, o local do grupo de recursos é usado para armazenar os dados da implantação.
Você pode fornecer um nome da implantação ou usar o nome da implantação padrão. O nome padrão é o nome do arquivo de modelo. Por exemplo, implantar um modelo chamado main.bicep cria um nome de implantação padrão de main.
O local não pode ser alterado para cada nome de implantação. Você não pode 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 grupo de gerenciamento com o nome deployment1 em centralus, não poderá criar outra implantação mais tarde com o nome deployment1 no local westus. Se você receber o código de erro InvalidDeploymentLocation
, use um nome diferente ou o mesmo local que a implantação anterior para esse nome.
Escopos de implantação
Ao implantar em um grupo de gerenciamento, você pode implantar recursos:
- no grupo de gerenciamento de destino com base na operação
- em outro grupo de gerenciamento do locatário
- nas assinaturas do grupo de gerenciamento
- nos grupos de recursos do grupo de gerenciamento
- no locatário do grupo de recursos
É possível definir o escopo de um recurso de extensão para um destino diferente do destino de implantação.
O usuário que implanta o modelo deve ter acesso ao escopo especificado.
Escopo do grupo de gerenciamento
Para implantar recursos no grupo de gerenciamento de destino, adicione esses recursos com a palavra-chave resource
.
targetScope = 'managementGroup'
// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
...
}
Para ter outro grupo de gerenciamento como destino, adicione um módulo. Use a função managementGroup para definir a propriedade scope
. Forneça o nome do grupo de gerenciamento.
targetScope = 'managementGroup'
param otherManagementGroupName string
// module deployed at management group level but in a different management group
module exampleModule 'module.bicep' = {
name: 'deployToDifferentMG'
scope: managementGroup(otherManagementGroupName)
}
Escopo de assinatura
Também é possível visar a assinaturas de um grupo de gerenciamento. O usuário que implanta o modelo deve ter acesso ao escopo especificado.
Para direcionar uma assinatura dentro do grupo de gerenciamento, adicione um módulo. Use a função de assinatura para definir a propriedade scope
. Forneça a ID da assinatura.
targetScope = 'managementGroup'
param subscriptionID string
// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription(subscriptionID)
}
Escopo de grupo de recursos
Você também pode visar a grupos de recursos do grupo de gerenciamento. O usuário que implanta o modelo deve ter acesso ao escopo especificado.
Para direcionar um grupo de recursos dentro do grupo de gerenciamento, adicione um módulo. Use a função resourceGroup para definir a propriedade scope
. Forneça a ID da assinatura e o nome do grupo de recursos.
targetScope = 'managementGroup'
param subscriptionID string
param resourceGroupName string
// module deployed to resource group in the management group
module exampleModule 'module.bicep' = {
name: 'deployToRG'
scope: resourceGroup(subscriptionID, resourceGroupName)
}
Escopo de locatário
Para criar recursos no locatário, adicione um módulo. Use a função locatário para definir sua propriedade scope
. O usuário que está implantando o modelo deve ter o acesso necessário para implantar no locatário.
targetScope = 'managementGroup'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Ou é possível definir o escopo como /
para alguns tipos de recursos, como grupos de gerenciamento. A próxima seção descreve a criação de um novo grupo de gerenciamento.
Grupo de gerenciamento
Para criar um grupo de gerenciamento em uma implantação do grupo de gerenciamento, você deverá definir o escopo para o locatário.
O exemplo a seguir cria um novo grupo de gerenciamento no grupo de gerenciamento raiz.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output newManagementGroup string = mgName
O próximo exemplo cria um novo grupo de gerenciamento no grupo de gerenciamento direcionado para a implantação. Ele usa a função de grupo de gerenciamento.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {
details: {
parent: {
id: managementGroup().id
}
}
}
}
output newManagementGroup string = mgName
Assinaturas
Para usar um modelo do ARM para criar uma assinatura do Azure em um grupo de gerenciamento, confira:
- Criar assinaturas do Contrato Enterprise do Azure de modo programático
- Criar assinaturas do Azure de modo programático para um Contrato de Cliente da Microsoft
- Criar assinaturas do Azure de modo programático para um Contrato de Parceiro da Microsoft
Para implantar um modelo que move uma assinatura existente do Azure para um novo grupo de gerenciamento, confira Mover assinaturas no modelo do ARM
Azure Policy
As definições de políticas personalizadas que são implantadas no grupo de gerenciamento são extensões do grupo de gerenciamento. Para obter a ID de uma definição de política personalizada, use a função extensionResourceId(). As definições de políticas internas são recursos em nível de locatário. Para obter a ID de uma definição de política interna, use a função tenantResourceId().
O exemplo a seguir mostra como definir uma política no nível do grupo de gerenciamento e como atribuí-la.
targetScope = 'managementGroup'
@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
'australiaeast'
'australiasoutheast'
'australiacentral'
]
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Próximas etapas
Para saber mais sobre outros escopos, consulte: