Implantações de assinatura com arquivos Bicep
Para simplificar o gerenciamento de recursos, você pode implantar recursos no nível de sua assinatura do Azure. Por exemplo, você pode implantar políticas e o controle de acesso baseado em função do Azure (Azure RBAC) à sua assinatura, que as aplica em toda a sua assinatura.
Este artigo descreve como definir o escopo de implantação para uma assinatura em um arquivo Bicep.
Nota
Você pode implantar em 800 grupos de recursos diferentes em uma implantação de nível de assinatura.
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 de assinatura. Esta seção lista quais tipos de recursos são suportados.
Para Azure Blueprints, use:
Para Políticas do Azure, use:
Para controle de acesso, use:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- funçõesAtribuições
- funçãoAtribuiçãoAgendaSolicitações
- roleDefinitions
- funçãoElegibilidadeAgendaSolicitações
- funçãoGestãoPolíticasAtribuições
Para modelos aninhados que implantam em grupos de recursos, use:
Para criar novos grupos de recursos, use:
Para gerenciar sua assinatura, use:
- orçamentos
- configurações - Advisor
- linha de crédito
- fechaduras
- profile - Análise de Alterações
- supportPlanTypes
- etiquetas
Para monitorização, utilize:
Por segurança, use:
- advancedThreatProtectionSettings
- alertasRegras de supressão
- avaliaçãoMetadados
- avaliações
- autoProvisioningSettings
- conectores
- deviceSecurityGroups
- ingestãoConfigurações
- Preços
- segurançaContactos
- Configurações
- workspaceSettings
Outros tipos suportados incluem:
Definir âmbito
Para definir o escopo como assinatura, use:
targetScope = 'subscription'
Comandos de implantação
Para implantar em uma assinatura, use os comandos de implantação no nível de assinatura.
Para a CLI do Azure, use az deployment sub create. O exemplo a seguir implanta um modelo para criar um grupo de recursos:
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-file main.bicep \
--parameters rgName=demoResourceGroup rgLocation=centralus
Para obter informações mais detalhadas sobre comandos de implantação e opções para implantar modelos ARM, consulte:
- Implantar recursos com modelos ARM e CLI do Azure
- Implantar recursos com modelos ARM e Azure PowerShell
- Implantar modelos ARM a partir do Cloud Shell
Local e nome da implantação
Para implantações de nível de assinatura, 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 grupo de gerenciamento 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 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, implantar um modelo chamado main.json cria um nome de implantação padrão de principal.
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 assinatura com o nome deployment1 no centralus, não poderá criar outra implantação posteriormente com o nome deployment1 , mas um local do westus. Se você receber o código InvalidDeploymentLocation
de erro , use um nome diferente ou o mesmo local da implantação anterior para esse nome.
Escopos de implantação
Ao implantar em uma assinatura, você pode implantar recursos para:
- a subscrição de destino da operação
- qualquer subscrição no inquilino
- grupos de recursos dentro da assinatura ou outras assinaturas
- O inquilino da subscrição
Um recurso de extensão pode ter o escopo definido para um destino diferente do destino de implantação.
O usuário que implanta o modelo deve ter acesso ao escopo especificado.
Âmbito da subscrição
Para implantar recursos na assinatura de destino, adicione esses recursos com a resource
palavra-chave.
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2024-03-01' = {
...
}
Para obter exemplos de implantação na assinatura, consulte Criar grupos de recursos com o Bíceps e Atribuir definição de política.
Para implantar recursos em uma assinatura diferente da assinatura da operação, adicione um módulo. Use a função de assinatura para definir a scope
propriedade. Forneça a subscriptionId
propriedade para a ID da assinatura na qual você deseja implantar.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Âmbito do grupo de recursos
Para implantar recursos em um grupo de recursos dentro da assinatura, adicione um módulo e defina sua scope
propriedade. Se o grupo de recursos já existir, use a função resourceGroup para definir o valor do escopo. Forneça o nome do grupo de recursos.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Se o grupo de recursos for criado no mesmo arquivo Bicep, use o nome simbólico do grupo de recursos para definir o valor do escopo. Para obter um exemplo de como definir o escopo para o nome simbólico, consulte Criar grupo de recursos com Bicep.
Âmbito de aplicação para o inquilino
Para criar recursos no locatário, adicione um módulo. Use a função tenant para definir sua scope
propriedade.
O usuário que implanta o modelo deve ter o acesso necessário para implantar no locatário.
O exemplo a seguir inclui um módulo que é implantado para o locatário.
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Em vez de usar um módulo, você pode definir o escopo para tenant()
alguns tipos de recursos. O exemplo a seguir implanta um grupo de gerenciamento no locatário.
targetScope = 'subscription'
param mgName string = 'mg-${uniqueString(newGuid())}'
// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output output string = mgName
Para obter mais informações, consulte Grupo de gerenciamento.
Grupos de recursos
Para obter informações sobre como criar grupos de recursos, consulte Criar grupo de recursos com o Bicep.
Azure Policy
Atribuir definição de política
O exemplo a seguir atribui uma definição de política existente à assinatura. Se a definição de política usar parâmetros, forneça-os como um objeto. Se a definição de política não usar parâmetros, use o objeto vazio padrão.
targetScope = 'subscription'
param policyDefinitionID string
param policyName string
param policyParameters object = {}
resource policyAssign 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: policyName
properties: {
policyDefinitionId: policyDefinitionID
parameters: policyParameters
}
}
Criar e atribuir definições de política
Você pode definir e atribuir uma definição de política no mesmo arquivo Bicep.
targetScope = 'subscription'
resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
name: 'locationpolicy'
properties: {
policyType: 'Custom'
parameters: {}
policyRule: {
if: {
field: 'location'
equals: 'northeurope'
}
then: {
effect: 'deny'
}
}
}
}
resource locationRestrict 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
name: 'allowedLocation'
properties: {
policyDefinitionId: locationPolicy.id
}
}
Controlo de acesso
Para saber mais sobre como atribuir funções, consulte Adicionar atribuições de função do Azure usando modelos do Azure Resource Manager.
O exemplo a seguir cria um grupo de recursos, aplica um bloqueio a ele e atribui uma função a uma entidade de segurança.
targetScope = 'subscription'
@description('Name of the resourceGroup to create')
param resourceGroupName string
@description('Location for the resourceGroup')
param resourceGroupLocation string
@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string
@description('roleDefinition to apply to the resourceGroup - default is contributor')
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'
@description('Unique name for the roleAssignment in the format of a guid')
param roleAssignmentName string = guid(principalId, roleDefinitionId, resourceGroupName)
var roleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'
resource newResourceGroup 'Microsoft.Resources/resourceGroups@2024-03-01' = {
name: resourceGroupName
location: resourceGroupLocation
properties: {}
}
module applyLock 'lock.bicep' = {
name: 'applyLock'
scope: newResourceGroup
}
module assignRole 'role.bicep' = {
name: 'assignRBACRole'
scope: newResourceGroup
params: {
principalId: principalId
roleNameGuid: roleAssignmentName
roleDefinitionId: roleID
}
}
O exemplo a seguir mostra o módulo para aplicar o bloqueio:
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
O próximo exemplo mostra o módulo para atribuir a função:
@description('The principal to assign the role to')
param principalId string
@description('A GUID used to identify the role assignment')
param roleNameGuid string = newGuid()
param roleDefinitionId string
resource roleNameGuid_resource 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: roleNameGuid
properties: {
roleDefinitionId: roleDefinitionId
principalId: principalId
}
}
Próximos passos
Para saber mais sobre outros escopos, consulte: