Abonnementsimplementaties met Bicep-bestanden
In dit artikel wordt beschreven hoe u een bereik in kunt stellen met Bicep wanneer u implementeert in een abonnement.
Ter vereenvoudiging van het beheer van resources kunt u resources implementeren op het niveau van uw Azure-abonnement. U kunt bijvoorbeeld beleidsregels en op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) implementeren in uw abonnement, wat van toepassing is op uw abonnement. U kunt ook resourcegroepen binnen het abonnement maken en resources implementeren in resourcegroepen in het abonnement.
Notitie
U kunt implementeren naar 800 verschillende resourcegroepen in een implementatie op abonnementsniveau.
Microsoft Learn
Zie Deploy resources to subscriptions, management groups, and tenants by using Bicep on Microsoft Learn (Resources implementeren naar abonnementen, beheergroepen en tenants met bicep op Microsoft Learn) voor meer informatie over implementatiebereiken en praktijkhandleiding.
Ondersteunde resources
Niet alle resourcetypen kunnen worden geïmplementeerd op abonnementsniveau. In deze sectie wordt vermeld welke resourcetypen worden ondersteund.
Gebruik Azure Blueprints voor meer informatie:
Gebruik voor Azure-beleid het volgende:
Gebruik voor toegangsbeheer:
- accessReviewScheduleDefinitions
- accessReviewScheduleSettings
- roleAssignments
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
Voor geneste sjablonen die worden geïmplementeerd in resourcegroepen, gebruikt u:
Voor het maken van nieuwe resourcegroepen gebruikt u:
Gebruik het volgende voor het beheren van uw abonnement:
- Begrotingen
- configuraties - Advisor
- lineOfCredit
- Sloten
- profiel - wijzigingsanalyse
- supportPlanTypes
- Tags
Gebruik voor bewaking:
Gebruik voor beveiliging:
- advancedThreatProtectionSettings
- waarschuwingenSuppressionRules
- assessmentMetadata
- Beoordelingen
- autoProvisioningSettings
- Verbindingslijnen
- deviceSecurityGroups
- opnameInstellingen
- prijzen
- securityContacts
- instellingen
- workspaceSettings
Andere ondersteunde typen zijn:
Bereik instellen
Als u het bereik wilt instellen op abonnement, gebruikt u:
targetScope = 'subscription'
Implementatieopdrachten
Als u wilt implementeren naar een abonnement, gebruikt u de implementatieopdrachten op abonnementsniveau.
Gebruik az deployment sub create voorAzure CLI. In het volgende voorbeeld wordt een sjabloon geïmplementeerd om een resourcegroep te maken:
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-file main.bicep \
--parameters rgName=demoResourceGroup rgLocation=centralus
Zie voor meer informatie over implementatieopdrachten en -opties voor het implementeren van ARM-sjablonen:
- Resources implementeren met ARM-sjablonen en Azure CLI
- Resources implementeren met ARM-sjablonen en Azure PowerShell
- ARM-sjablonen implementeren vanuit Cloud Shell
Locatie en naam van implementatie
Voor implementaties op abonnementsniveau moet u een locatie voor de implementatie verstrekken. De locatie van de implementatie is gescheiden van de locatie van de resources die u implementeert. De implementatielocatie geeft aan waar implementatiegegevens moeten worden opgeslagen. Voor beheergroep- en tenantimplementaties is ook een locatie vereist. Voor resourcegroepimplementaties wordt de locatie van de resourcegroep gebruikt om de implementatiegegevens op te slaan.
U kunt een naam voor de implementatie of de standaard implementatienaam gebruiken. De standaardnaam is de naam van het sjabloonbestand. Als u bijvoorbeeld een sjabloon met de naam main.json implementeert, wordt de standaard implementatienaam main gemaakt.
Voor elke implementatienaam is de locatie onveranderbaar. U kunt geen implementatie op één locatie maken wanneer er een bestaande implementatie met dezelfde naam op een andere locatie is. Als u bijvoorbeeld een abonnementsimplementatie maakt met de naam deployment1 in centralus, kunt u later geen andere implementatie maken met de naam deployment1, maar met de locatie westus. Als u de foutcode krijgt, gebruikt u een andere naam of dezelfde locatie als de vorige InvalidDeploymentLocation implementatie voor die naam.
Implementatiebereiken
Wanneer u implementeert in een abonnement, kunt u resources implementeren op:
- het doelabonnement van de bewerking
- elk abonnement in de tenant
- resourcegroepen binnen het abonnement of andere abonnementen
- de tenant voor het abonnement
Een extensieresource kan worden gericht op een ander doel dan het implementatiedoel.
De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.
Bereik tot abonnement
Als u resources wilt implementeren in het doelabonnement, voegt u deze resources toe met het resource trefwoord .
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2020-10-01' = {
...
}
Zie Resourcegroepen maken en Beleidsdefinitie toewijzen voor voorbeelden van implementatie in het abonnement.
Als u resources wilt implementeren in een abonnement dat anders is dan het abonnement van de bewerking, voegt u een module toe. Gebruik de abonnementsfunctie om de eigenschap in scope te stellen. Geef de subscriptionId eigenschap op voor de id van het abonnement dat u wilt implementeren.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Bereik naar resourcegroep
Als u resources wilt implementeren in een resourcegroep binnen het abonnement, voegt u een module toe en stelt u de eigenschap scope ervan in. Als de resourcegroep al bestaat, gebruikt u de functie resourceGroup om de bereikwaarde in te stellen. Geef de naam van de resourcegroep op.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Als de resourcegroep is gemaakt in hetzelfde Bicep-bestand, gebruikt u de symbolische naam van de resourcegroep om de bereikwaarde in te stellen. Zie Resourcegroep en resources maken voor een voorbeeld van het instellen van het bereik op de symbolische naam.
Bereik naar tenant
Als u resources wilt maken in de tenant, voegt u een module toe. Gebruik de tenantfunctie om de eigenschap ervan in scope te stellen.
De gebruiker die de sjabloon implementeert, moet de vereiste toegang hebben om te implementeren in de tenant.
Het volgende voorbeeld bevat een module die wordt geïmplementeerd in de tenant.
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
In plaats van een module te gebruiken, kunt u het bereik voor tenant() sommige resourcetypen instellen op . In het volgende voorbeeld wordt een beheergroep geïmplementeerd in de tenant.
targetScope = 'subscription'
param mgName string = 'mg-${uniqueString(newGuid())}'
// management group created at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
scope: tenant()
name: mgName
properties: {}
}
output output string = mgName
Zie Beheergroep voor meer informatie.
Resourcegroepen
Resourcegroepen maken
Als u een resourcegroep wilt maken, definieert u een resource Microsoft.Resources/resourceGroups met een naam en locatie voor de resourcegroep.
In het volgende voorbeeld wordt een lege resourcegroep gemaakt.
targetScope='subscription'
param resourceGroupName string
param resourceGroupLocation string
resource newRG 'Microsoft.Resources/resourceGroups@2021-01-01' = {
name: resourceGroupName
location: resourceGroupLocation
}
Resourcegroep en resources maken
Als u de resourcegroep wilt maken en er resources in wilt implementeren, voegt u een module toe. De module bevat de resources die in de resourcegroep moeten worden geïmplementeerd. Stel het bereik voor de module in op de symbolische naam voor de resourcegroep die u maakt. U kunt implementeren naar maximaal 800 resourcegroepen.
In het volgende voorbeeld wordt een resourcegroep gemaakt en wordt een opslagaccount geïmplementeerd in de resourcegroep. U ziet dat de eigenschap voor de module is ingesteld op . Dit is de symbolische naam scope newRG voor de resourcegroep die wordt gemaakt.
targetScope='subscription'
param resourceGroupName string
param resourceGroupLocation string
param storageName string
param storageLocation string
resource newRG 'Microsoft.Resources/resourceGroups@2021-01-01' = {
name: resourceGroupName
location: resourceGroupLocation
}
module storageAcct 'storage.bicep' = {
name: 'storageModule'
scope: newRG
params: {
storageLocation: storageLocation
storageName: storageName
}
}
In de module wordt een Bicep-bestand met de naam storage.bicep gebruikt met de volgende inhoud:
param storageLocation string
param storageName string
resource storageAcct 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: storageName
location: storageLocation
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {}
}
Azure Policy
Beleidsdefinitie toewijzen
In het volgende voorbeeld wordt een bestaande beleidsdefinitie toegewezen aan het abonnement. Als de beleidsdefinitie parameters gebruikt, geeft u deze op als een -object. Als de beleidsdefinitie geen parameters gebruikt, gebruikt u het standaard lege object.
targetScope = 'subscription'
param policyDefinitionID string
param policyName string
param policyParameters object = {}
resource policyAssign 'Microsoft.Authorization/policyAssignments@2020-09-01' = {
name: policyName
properties: {
policyDefinitionId: policyDefinitionID
parameters: policyParameters
}
}
Beleidsdefinities maken en toewijzen
U kunt een beleidsdefinitie definiëren en toewijzen in hetzelfde Bicep-bestand.
targetScope = 'subscription'
resource locationPolicy 'Microsoft.Authorization/policyDefinitions@2020-09-01' = {
name: 'locationpolicy'
properties: {
policyType: 'Custom'
parameters: {}
policyRule: {
if: {
field: 'location'
equals: 'northeurope'
}
then: {
effect: 'deny'
}
}
}
}
resource locationRestrict 'Microsoft.Authorization/policyAssignments@2020-09-01' = {
name: 'allowedLocation'
properties: {
policyDefinitionId: locationPolicy.id
}
}
Toegangsbeheer
Zie Azure-roltoewijzingen toevoegen met behulp van Azure Resource Manager sjablonen voor meer informatie Azure Resource Manager rollen.
In het volgende voorbeeld wordt een resourcegroep gemaakt, een vergrendeling toegepast en een rol toegewezen aan een principal.
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@2019-10-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
}
}
In het volgende voorbeeld ziet u de module voor het toepassen van de vergrendeling:
resource createRgLock 'Microsoft.Authorization/locks@2016-09-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
In het volgende voorbeeld ziet u de module voor het toewijzen van de rol:
@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@2020-04-01-preview' = {
name: roleNameGuid
properties: {
roleDefinitionId: roleDefinitionId
principalId: principalId
}
}
Volgende stappen
Zie voor meer informatie over andere scopes: