Ustawianie zakresu dla zasobów rozszerzeń w usłudze Bicep
Zasób rozszerzenia to zasób, który modyfikuje inny zasób. Na przykład można przypisać rolę do zasobu. Przypisanie roli jest typem zasobu rozszerzenia.
Aby uzyskać pełną listę typów zasobów rozszerzeń, zobacz Typy zasobów, które rozszerzają możliwości innych zasobów.
W tym artykule pokazano, jak ustawić zakres dla typu zasobu rozszerzenia podczas wdrażania z plikiem Bicep. Opisuje on właściwość zakresu, która jest dostępna dla zasobów rozszerzeń podczas stosowania do zasobu.
Uwaga
Właściwość zakresu jest dostępna tylko dla typów zasobów rozszerzeń. Aby określić inny zakres dla typu zasobu, który nie jest typem rozszerzenia, użyj modułu.
Zasoby szkoleniowe
Jeśli wolisz dowiedzieć się więcej o zasobach rozszerzeń za pomocą szczegółowych wskazówek, zobacz Wdrażanie zasobów podrzędnych i zasobów rozszerzeń przy użyciu Bicep.
Stosowanie w zakresie wdrożenia
Aby zastosować typ zasobu rozszerzenia w docelowym zakresie wdrożenia, dodaj zasób do szablonu tak, jak w przypadku dowolnego innego typu zasobu. Dostępne zakresy to grupa zasobów, subskrypcja, grupa zarządzania i dzierżawa. Zakres wdrożenia musi obsługiwać typ zasobu.
Po wdrożeniu w grupie zasobów poniższy szablon dodaje blokadę do tej grupy zasobów.
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 przypisano rolę do subskrypcji, w ramach których została wdrożona.
targetScope = 'subscription'
@description('The principal to assign the role to')
param principalId string
@allowed([
'Owner'
'Contributor'
'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string
var role = {
Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
resource roleAssignSub 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
}
Zastosuj do zasobu
Aby zastosować zasób rozszerzenia do zasobu, użyj scope
właściwości . We właściwości zakresu odwołaj się do zasobu, do którego dodajesz rozszerzenie. Odwołujesz się do zasobu, podając symboliczną nazwę zasobu. Właściwość zakresu jest właściwością główną dla typu zasobu rozszerzenia.
Poniższy przykład tworzy konto magazynu i stosuje do niego rolę.
@description('The principal to assign the role to')
param principalId string
@allowed([
'Owner'
'Contributor'
'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string
param location string = resourceGroup().location
var role = {
Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
var uniqueStorageName = 'storage${uniqueString(resourceGroup().id)}'
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {}
}
resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
scope: demoStorageAcct
}
Zasób rozszerzenia można zastosować do istniejącego zasobu. W poniższym przykładzie dodano blokadę do istniejącego konta magazynu.
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: 'examplestore'
}
resource createStorageLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'storeLock'
scope: demoStorageAcct
properties: {
level: 'CanNotDelete'
notes: 'Storage account should not be deleted.'
}
}
Te same wymagania dotyczą zasobów rozszerzeń co inny zasób w przypadku określania zakresu innego niż docelowy zakres wdrożenia. Aby dowiedzieć się więcej o wdrażaniu w więcej niż jednym zakresie, zobacz:
Właściwości resourceGroup i subscription są dozwolone tylko w modułach. Te właściwości nie są dozwolone dla poszczególnych zasobów. Użyj modułów, jeśli chcesz wdrożyć zasób rozszerzenia z zakresem ustawionym na zasób w innej grupie zasobów.
W poniższym przykładzie pokazano, jak zastosować blokadę na koncie magazynu, które znajduje się w innej grupie zasobów.
main.bicep:
param resourceGroup2Name string param storageAccountName string module applyStoreLock './storageLock.bicep' = { name: 'addStorageLock' scope: resourceGroup(resourceGroup2Name) params: { storageAccountName: storageAccountName } }
storageLock.bicep:
param storageAccountName string resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' existing = { name: storageAccountName } resource storeLock 'Microsoft.Authorization/locks@2020-05-01' = { scope: storage name: 'storeLock' properties: { level: 'CanNotDelete' notes: 'Storage account should not be deleted.' } }
Następne kroki
Aby uzyskać pełną listę typów zasobów rozszerzeń, zobacz Typy zasobów, które rozszerzają możliwości innych zasobów.