Implementações de grupos de gestão com ficheiros Bicep
Este artigo descreve como definir o âmbito com o Bicep ao implementar num grupo de gestão.
À medida que a sua organização amadurece, pode implementar um ficheiro Bicep para criar recursos ao nível do grupo de gestão. Por exemplo, poderá ter de definir e atribuir políticas ou controlo de acesso baseado em funções do Azure (RBAC do Azure) para um grupo de gestão. Com os modelos de nível de grupo de gestão, pode aplicar políticas de forma declarativa e atribuir funções ao nível do grupo de gestão.
Recursos de preparação
Se preferir saber mais sobre os âmbitos de implementação através da documentação de orientação passo a passo, veja Implementar recursos em subscrições, grupos de gestão e inquilinos com o Bicep.
Recursos suportados
Nem todos os tipos de recursos podem ser implementados ao nível do grupo de gestão. Esta secção lista os tipos de recursos suportados.
Para o Azure Blueprints, utilize:
Para Azure Policy, utilize:
Para controlo de acesso, utilize:
- privateLinkAssociations
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Para modelos aninhados que são implementados em subscrições ou grupos de recursos, utilize:
Para gerir os seus recursos, utilize:
Os grupos de gestão são recursos ao nível do inquilino. No entanto, pode criar grupos de gestão numa implementação de grupo de gestão ao definir o âmbito do novo grupo de gestão para o inquilino. Veja Grupo de gestão.
Definir âmbito
Para definir o âmbito para o grupo de gestão, utilize:
targetScope = 'managementGroup'
Comandos de implementação
Para implementar num grupo de gestão, utilize os comandos de implementação do grupo de gestão.
Para a CLI do Azure, utilize 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 implementação e as opções para implementar modelos do ARM, veja:
- Implementar recursos com modelos arm e a CLI do Azure
- Implementar recursos com modelos arm e Azure PowerShell
- Implementar modelos do ARM a partir de Cloud Shell
Localização e nome da implementação
Para implementações ao nível do grupo de gestão, tem de fornecer uma localização para a implementação. A localização da implementação é separada da localização dos recursos que implementar. A localização de implementação especifica onde armazenar dados de implementação. As implementações de subscrições e inquilinos também requerem uma localização. Para implementações de grupos de recursos , a localização do grupo de recursos é utilizada para armazenar os dados de implementação.
Pode indicar um nome para a implementação ou utilizar o nome de implementação predefinido. O nome predefinido é o nome do ficheiro de modelo. Por exemplo, a implementação de um modelo com o nome main.bicep cria um nome de implementação predefinido principal.
Para cada nome de implementação, a localização é imutável. Não pode criar uma implementação numa localização quando existe uma implementação com o mesmo nome numa localização diferente. Por exemplo, se criar uma implementação de grupo de gestão com o nome deployment1 no centralus, não poderá criar mais tarde outra implementação com o nome deployment1 , mas sim uma localização de westus. Se receber o código InvalidDeploymentLocation
de erro , utilize um nome diferente ou a mesma localização da implementação anterior para esse nome.
Âmbitos de implementação
Ao implementar num grupo de gestão, pode implementar recursos em:
- o grupo de gestão de destino da operação
- outro grupo de gestão no inquilino
- subscrições no grupo de gestão
- grupos de recursos no grupo de gestão
- o inquilino do grupo de recursos
Um recurso de extensão pode ser confinado a um destino diferente do destino de implementação.
O utilizador que está a implementar o modelo tem de ter acesso ao âmbito especificado.
Âmbito para grupo de gestão
Para implementar recursos no grupo de gestão de destino, adicione esses recursos com a resource
palavra-chave .
targetScope = 'managementGroup'
// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
...
}
Para direcionar outro grupo de gestão, adicione um módulo. Utilize a função managementGroup para definir a scope
propriedade . Indique o nome do grupo de gestão.
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)
}
Âmbito da subscrição
Também pode direcionar subscrições dentro de um grupo de gestão. O utilizador que está a implementar o modelo tem de ter acesso ao âmbito especificado.
Para direcionar uma subscrição dentro do grupo de gestão, adicione um módulo. Utilize a função de subscrição para definir a scope
propriedade . Indique o ID da subscrição.
targetScope = 'managementGroup'
param subscriptionID string
// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription(subscriptionID)
}
Âmbito para grupo de recursos
Também pode direcionar grupos de recursos dentro do grupo de gestão. O utilizador que está a implementar o modelo tem de ter acesso ao âmbito especificado.
Para direcionar um grupo de recursos dentro do grupo de gestão, adicione um módulo. Utilize a função resourceGroup para definir a scope
propriedade . Indique o ID da subscrição 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)
}
Âmbito para inquilino
Para criar recursos no inquilino, adicione um módulo. Utilize a função de inquilino para definir a respetiva scope
propriedade. O utilizador que está a implementar o modelo tem de ter o acesso necessário para implementar no inquilino.
targetScope = 'managementGroup'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Em alternativa, pode definir o âmbito para /
alguns tipos de recursos, como grupos de gestão. A criação de um novo grupo de gestão é descrita na secção seguinte.
Grupo de gestão
Para criar um grupo de gestão numa implementação de grupo de gestão, tem de definir o âmbito para o inquilino.
O exemplo seguinte cria um novo grupo de gestão no grupo de gestão de raiz.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2021-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output newManagementGroup string = mgName
O exemplo seguinte cria um novo grupo de gestão no grupo de gestão direcionado para a implementação. Utiliza a função do grupo de gestão.
targetScope = 'managementGroup'
param mgName string = 'mg-${uniqueString(newGuid())}'
resource newMG 'Microsoft.Management/managementGroups@2021-04-01' = {
scope: tenant()
name: mgName
properties: {
details: {
parent: {
id: managementGroup().id
}
}
}
}
output newManagementGroup string = mgName
Subscrições
Para utilizar um modelo do ARM para criar uma nova subscrição do Azure num grupo de gestão, consulte:
- Criar subscrições do Azure Contrato Enterprise programaticamente
- Criar subscrições do Azure programaticamente para um Contrato de Cliente Microsoft
- Criar subscrições do Azure através de programação para um Contrato de Parceiro da Microsoft
Para implementar um modelo que move uma subscrição do Azure existente para um novo grupo de gestão, veja Mover subscrições no modelo do ARM
Azure Policy
As definições de política personalizadas implementadas no grupo de gestão são extensões do grupo de gestão. Para obter o ID de uma definição de política personalizada, utilize a função extensionResourceId( ). As definições de política incorporadas são recursos ao nível do inquilino. Para obter o ID de uma definição de política incorporada, utilize a função tenantResourceId( ).
O exemplo seguinte mostra como definir uma política ao nível do grupo de gestão e 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@2021-06-01' = {
name: 'locationRestriction'
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
not: {
field: 'location'
in: allowedLocations
}
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
name: 'locationAssignment'
properties: {
policyDefinitionId: policyDefinition.id
}
}
Passos seguintes
Para saber mais sobre outros âmbitos, consulte: