Wdrożenia subskrypcji z plikami Bicep
Aby uprościć zarządzanie zasobami, możesz wdrażać zasoby na poziomie subskrypcji platformy Azure. Możesz na przykład wdrożyć zasady i kontrolę dostępu opartą na rolach platformy Azure (RBAC) do subskrypcji, która będzie stosowana w ramach subskrypcji.
W tym artykule opisano sposób ustawiania zakresu wdrożenia na subskrypcję w pliku Bicep.
Uwaga
W ramach wdrożenia na poziomie subskrypcji można wdrożyć 800 różnych grup zasobów.
Zasoby szkoleniowe
Jeśli wolisz dowiedzieć się więcej o zakresach wdrażania za pomocą szczegółowych wskazówek, zobacz Wdrażanie zasobów w subskrypcjach, grupach zarządzania i dzierżawach przy użyciu Bicep.
Obsługiwane zasoby
Nie wszystkie typy zasobów można wdrożyć na poziomie subskrypcji. Ta sekcja zawiera listę obsługiwanych typów zasobów.
W przypadku usługi Azure Blueprints użyj:
W przypadku zasad platformy Azure użyj:
W przypadku kontroli dostępu użyj:
- accessReviewScheduleDefinitions
- accessReviewSchedule Ustawienia
- rolePrzypisania
- roleAssignmentScheduleRequests
- roleDefinitions
- roleEligibilityScheduleRequests
- roleManagementPolicyAssignments
W przypadku szablonów zagnieżdżonych wdrażanych w grupach zasobów użyj:
Aby utworzyć nowe grupy zasobów, użyj:
Do zarządzania subskrypcją użyj:
Do monitorowania użyj:
W przypadku zabezpieczeń użyj:
- advancedThreatProtection Ustawienia
- alertsSuppressionRules
- assessmentMetadata
- Oceny
- autoprovisioning Ustawienia
- Złącza
- deviceSecurityGroups
- pozyskiwanie Ustawienia
- cennik
- securityContacts
- Ustawienia
- obszar roboczy Ustawienia
Inne obsługiwane typy to:
Ustawianie zakresu
Aby ustawić zakres na subskrypcję, użyj:
targetScope = 'subscription'
Polecenia wdrażania
Aby wdrożyć w subskrypcji, użyj poleceń wdrażania na poziomie subskrypcji.
W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia az deployment sub create. Poniższy przykład umożliwia wdrożenie szablonu w celu utworzenia grupy zasobów:
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-file main.bicep \
--parameters rgName=demoResourceGroup rgLocation=centralus
Aby uzyskać bardziej szczegółowe informacje o poleceniach wdrażania i opcjach wdrażania szablonów usługi ARM, zobacz:
- Wdrażanie zasobów przy użyciu szablonów usługi ARM i interfejsu wiersza polecenia platformy Azure
- Wdrażanie zasobów przy użyciu szablonów usługi ARM i programu Azure PowerShell
- Wdrażanie szablonów usługi ARM z poziomu usługi Cloud Shell
Lokalizacja i nazwa wdrożenia
W przypadku wdrożeń na poziomie subskrypcji należy podać lokalizację wdrożenia. Lokalizacja wdrożenia jest oddzielona od lokalizacji wdrażanych zasobów. Lokalizacja wdrożenia określa miejsce przechowywania danych wdrożenia. Wdrożenia grupy zarządzania i dzierżawy również wymagają lokalizacji. W przypadku wdrożeń grup zasobów lokalizacja grupy zasobów jest używana do przechowywania danych wdrożenia.
Możesz podać nazwę wdrożenia lub użyć domyślnej nazwy wdrożenia. Domyślna nazwa to nazwa pliku szablonu. Na przykład wdrożenie szablonu o nazwie main.json powoduje utworzenie domyślnej nazwy wdrożenia głównego.
Dla każdej nazwy wdrożenia lokalizacja jest niezmienna. Nie można utworzyć wdrożenia w jednej lokalizacji, gdy istnieje wdrożenie o tej samej nazwie w innej lokalizacji. Jeśli na przykład utworzysz wdrożenie subskrypcji o nazwie deployment1 w centralus, nie można później utworzyć innego wdrożenia z nazwą deployment1, ale lokalizacją westus. Jeśli zostanie wyświetlony kod InvalidDeploymentLocation
błędu , użyj innej nazwy lub tej samej lokalizacji co poprzednie wdrożenie dla tej nazwy.
Zakresy wdrażania
Podczas wdrażania w ramach subskrypcji można wdrożyć zasoby w:
- subskrypcja docelowa z operacji
- dowolna subskrypcja w dzierżawie
- grupy zasobów w ramach subskrypcji lub innych subskrypcji
- dzierżawa subskrypcji
Zasób rozszerzenia może być o określonym zakresie dla miejsca docelowego, który różni się od docelowego wdrożenia.
Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.
Zakres subskrypcji
Aby wdrożyć zasoby w subskrypcji docelowej, dodaj te zasoby za pomocą słowa kluczowego resource
.
targetScope = 'subscription'
// resource group created in target subscription
resource exampleResource 'Microsoft.Resources/resourceGroups@2024-03-01' = {
...
}
Aby zapoznać się z przykładami wdrażania w subskrypcji, zobacz Tworzenie grup zasobów za pomocą Bicep i Przypisywanie definicji zasad.
Aby wdrożyć zasoby w subskrypcji innej niż subskrypcja z operacji, dodaj moduł. Użyj funkcji subscription, aby ustawić scope
właściwość . subscriptionId
Podaj właściwość identyfikatora subskrypcji, do której chcesz wdrożyć.
targetScope = 'subscription'
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToDifferentSub'
scope: subscription(otherSubscriptionID)
}
Zakres do grupy zasobów
Aby wdrożyć zasoby w grupie zasobów w ramach subskrypcji, dodaj moduł i ustaw jego scope
właściwość. Jeśli grupa zasobów już istnieje, użyj funkcji resourceGroup, aby ustawić wartość zakresu. Podaj nazwę grupy zasobów.
targetScope = 'subscription'
param resourceGroupName string
module exampleModule 'module.bicep' = {
name: 'exampleModule'
scope: resourceGroup(resourceGroupName)
}
Jeśli grupa zasobów zostanie utworzona w tym samym pliku Bicep, użyj symbolicznej nazwy grupy zasobów, aby ustawić wartość zakresu. Aby zapoznać się z przykładem ustawienia zakresu na nazwę symboliczną, zobacz Create resource group with Bicep (Tworzenie grupy zasobów przy użyciu Bicep).
Zakres do dzierżawy
Aby utworzyć zasoby w dzierżawie, dodaj moduł. Użyj funkcji dzierżawy, aby ustawić jej scope
właściwość.
Użytkownik wdrażający szablon musi mieć wymagany dostęp do wdrożenia w dzierżawie.
Poniższy przykład obejmuje moduł wdrożony w dzierżawie.
targetScope = 'subscription'
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
Zamiast używać modułu, można ustawić zakres na tenant()
dla niektórych typów zasobów. Poniższy przykład umożliwia wdrożenie grupy zarządzania w dzierżawie.
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
Aby uzyskać więcej informacji, zobacz Grupa zarządzania.
Grupy zasobów
Aby uzyskać informacje na temat tworzenia grup zasobów, zobacz Create resource group with Bicep (Tworzenie grupy zasobów za pomocą Bicep).
Azure Policy
Przypisywanie definicji zasad
Poniższy przykład przypisuje istniejącą definicję zasad do subskrypcji. Jeśli definicja zasad przyjmuje parametry, podaj je jako obiekt. Jeśli definicja zasad nie bierze parametrów, użyj domyślnego pustego obiektu.
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
}
}
Tworzenie i przypisywanie definicji zasad
Definicję zasad można zdefiniować i przypisać w tym samym pliku 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
}
}
Kontrola dostępu
Aby dowiedzieć się więcej na temat przypisywania ról, zobacz Dodawanie przypisań ról platformy Azure przy użyciu szablonów usługi Azure Resource Manager.
Poniższy przykład tworzy grupę zasobów, stosuje do niej blokadę i przypisuje rolę do podmiotu zabezpieczeń.
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
}
}
W poniższym przykładzie pokazano moduł do zastosowania blokady:
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
W następnym przykładzie pokazano moduł umożliwiający przypisanie roli:
@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
}
}
Następne kroki
Aby dowiedzieć się więcej o innych zakresach, zobacz: