Prenumerationsdistributioner med Bicep-filer
För att förenkla hanteringen av resurser kan du distribuera resurser på nivån för din Azure-prenumeration. Du kan till exempel distribuera principer och rollbaserad åtkomstkontroll i Azure (Azure RBAC) till din prenumeration, vilket tillämpar dem i hela prenumerationen.
I den här artikeln beskrivs hur du anger distributionsomfånget till en prenumeration i en Bicep-fil.
Kommentar
Du kan distribuera till 800 olika resursgrupper i en distribution på prenumerationsnivå.
Utbildningsresurser
Om du hellre vill lära dig mer om distributionsomfång via stegvis vägledning kan du läsa Distribuera resurser till prenumerationer, hanteringsgrupper och klientorganisationer med hjälp av Bicep.
Resurser som stöds
Alla resurstyper kan inte distribueras till prenumerationsnivå. I det här avsnittet visas vilka resurstyper som stöds.
För Azure Blueprints använder du:
För Azure-principer använder du:
För åtkomstkontroll använder du:
- accessReviewScheduleDefinitions
- accessReviewSchedule Inställningar
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
För kapslade mallar som distribueras till resursgrupper använder du:
Om du vill skapa nya resursgrupper använder du:
För att hantera din prenumeration använder du:
För övervakning använder du:
För säkerhet använder du:
- advancedThreatProtection Inställningar
- alertsSuppressionRules
- assessmentMetadata
- Bedömningar
- automatisk avetablering Inställningar
- Kontakter
- deviceSecurityGroups
- inmatning Inställningar
- priser
- securityContacts
- Inställningar
- arbetsyta Inställningar
Andra typer som stöds är:
Ange omfång
Om du vill ange omfånget till prenumeration använder du:
targetScope = 'subscription'
Distributionskommandon
Om du vill distribuera till en prenumeration använder du distributionskommandona på prenumerationsnivå.
För Azure CLI använder du az deployment sub create. I följande exempel distribueras en mall för att skapa en resursgrupp:
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-file main.bicep \
--parameters rgName=demoResourceGroup rgLocation=centralus
Mer detaljerad information om distributionskommandon och alternativ för distribution av ARM-mallar finns i:
- Distribuera resurser med ARM-mallar och Azure CLI
- Distribuera resurser med ARM-mallar och Azure PowerShell
- Distribuera ARM-mallar från Cloud Shell
Distributionsplats och namn
För distributioner på prenumerationsnivå måste du ange en plats för distributionen. Distributionens plats är separat från platsen för de resurser som du distribuerar. Distributionsplatsen anger var distributionsdata ska lagras. Hanteringsgrupps - och klientdistributioner kräver också en plats. För resursgruppsdistributioner används platsen för resursgruppen för att lagra distributionsdata.
Du kan ange ett namn för distributionen eller använda standarddistributionsnamnet. Standardnamnet är namnet på mallfilen. Om du till exempel distribuerar en mall med namnet main.json skapas ett standarddistributionsnamn för main.
För varje distributionsnamn är platsen oföränderlig. Du kan inte skapa en distribution på en plats när det finns en befintlig distribution med samma namn på en annan plats. Om du till exempel skapar en prenumerationsdistribution med namnet deployment1 i centralus kan du inte senare skapa en annan distribution med namnet deployment1 utan en plats i westus. Om du får felkoden InvalidDeploymentLocation
använder du antingen ett annat namn eller samma plats som den tidigare distributionen för det namnet.
Distributionsomfång
När du distribuerar till en prenumeration kan du distribuera resurser till:
- målprenumerationen från åtgärden
- valfri prenumeration i klientorganisationen
- resursgrupper i prenumerationen eller andra prenumerationer
- klientorganisationen för prenumerationen
En tilläggsresurs kan begränsas till ett annat mål än distributionsmålet.
Användaren som distribuerar mallen måste ha åtkomst till det angivna omfånget.
Omfång för prenumeration
Om du vill distribuera resurser till målprenumerationen lägger du till resurserna med nyckelordet resource
.
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2024-03-01' = {
...
}
Exempel på distribution till prenumerationen finns i Skapa resursgrupper med Bicep och Tilldela principdefinition.
Om du vill distribuera resurser till en prenumeration som skiljer sig från prenumerationen från åtgärden lägger du till en modul. Använd prenumerationsfunktionen för att ange egenskapenscope
. subscriptionId
Ange egenskapen till ID:t för den prenumeration som du vill distribuera till.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Omfång för resursgrupp
Om du vill distribuera resurser till en resursgrupp i prenumerationen lägger du till en modul och anger dess scope
egenskap. Om resursgruppen redan finns använder du funktionen resourceGroup för att ange omfångsvärdet. Ange resursgruppens namn.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Om resursgruppen skapas i samma Bicep-fil använder du det symboliska namnet på resursgruppen för att ange omfångsvärdet. Ett exempel på hur du anger omfånget till det symboliska namnet finns i Skapa resursgrupp med Bicep.
Omfång för klientorganisation
Om du vill skapa resurser i klientorganisationen lägger du till en modul. Använd klientfunktionen för att ange dess scope
egenskap.
Användaren som distribuerar mallen måste ha den åtkomst som krävs för att distribuera i klientorganisationen.
I följande exempel ingår en modul som distribueras till klientorganisationen.
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
I stället för att använda en modul kan du ange omfånget till tenant()
för vissa resurstyper. I följande exempel distribueras en hanteringsgrupp i klientorganisationen.
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
Mer information finns i Hanteringsgrupp.
Resursgrupper
Information om hur du skapar resursgrupper finns i Skapa resursgrupp med Bicep.
Azure Policy
Tilldela principdefinition
I följande exempel tilldelas prenumerationen en befintlig principdefinition. Om principdefinitionen tar parametrar anger du dem som ett objekt. Om principdefinitionen inte tar parametrar använder du det tomma standardobjektet.
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
}
}
Skapa och tilldela principdefinitioner
Du kan definiera och tilldela en principdefinition i samma Bicep-fil.
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
}
}
Åtkomstkontroll
Mer information om hur du tilldelar roller finns i Lägga till Azure-rolltilldelningar med hjälp av Azure Resource Manager-mallar.
I följande exempel skapas en resursgrupp, ett lås tillämpas på den och en roll tilldelas till ett huvudnamn.
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
}
}
I följande exempel visas modulen för att tillämpa låset:
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
I nästa exempel visas modulen för att tilldela rollen:
@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
}
}
Nästa steg
Mer information om andra omfång finns i: