Задание области для ресурсов расширения в Bicep
Ресурс расширения – это ресурс, который изменяет другой ресурс. Например, можно назначить роль для ресурса. Назначение роли является типом ресурса расширения.
Полный список типов ресурсов расширения см. в статье Типы ресурсов, расширяющие возможности других ресурсов.
В этой статье описано, как определить область для типа ресурса расширения при развертывании с использованием файла Bicep. Шаблон определяет свойство области, которое доступно для ресурсов расширения при применении к ресурсу.
Примечание
Свойство области доступно только для типов ресурсов расширения. Чтобы задать другую область для типа ресурса, который не является типом расширения, используйте модуль.
Учебные ресурсы
Подробные сведения о ресурсах расширения и практические инструкции см. в пошаговом руководстве Развертывание дочерних ресурсов и ресурсов расширений с помощью Bicep.
Применение области развертывания
Чтобы применить тип ресурса расширения в целевой области развертывания, ресурс необходимо добавить в свой шаблон, так следует поступать с любым другим типом ресурса. Доступные области: группа ресурсов, подписка, группа управления и клиент. Область развертывания должна поддерживать тип ресурса.
При развертывании в группе ресурсов следующий шаблон добавляет блокировку в эту группу ресурсов.
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
В следующем примере роль назначается подписке, в которой она развернута.
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
}
}
Применение к ресурсу
Чтобы применить ресурс расширения к ресурсу, используйте свойство scope
. В свойстве области укажите ресурс, к которому вы добавляете расширение. Чтобы указать ресурс, укажите для него символьное имя. Свойство области является корневым свойством для типа ресурса расширения.
В следующем примере создается учетная запись хранения, и для нее назначается роль.
@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
}
Ресурс расширения можно применить к существующему ресурсу. В следующем примере добавляется блокировка в существующую учетную запись хранения.
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.'
}
}
К ресурсам расширений применяются те же требования, что и к другим ресурсам, если они нацелены на область, которая отличается от целевой области развертывания. Сведения о развертывании в нескольких областях см. в следующих разделах:
- Развертывания групп ресурсов
- Развертывания подписок
- Развертывания групп управления
- Развертывания клиентов
Свойства resourceGroup и subscription разрешены только в модулях. Эти свойства запрещены для отдельных ресурсов. Используйте модули, если нужно развернуть ресурс расширения с заданной областью ресурса в другой группе ресурсов.
В следующем примере показано, как применить блокировку к учетной записи хранения, которая находится в другой группе ресурсов.
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.' } }
Дальнейшие действия
Полный список типов ресурсов расширения см. в статье Типы ресурсов, расширяющие возможности других ресурсов.