مشاركة عبر


حدد نطاق موارد الامتداد في عضلة 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 . في خاصية 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@2025-06-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@2025-06-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 والاشتراك مسموح بها فقط على الوحدات. هذه الخصائص غير مسموح بها على الموارد الفردية. استخدم الوحدات إذا كنت تريد نشر مورد توسعة مع تعيين النطاق لمورد في مجموعة موارد مختلفة.

يوضح المثال التالي كيفية تطبيق قفل على حساب تخزين موجود في مجموعة موارد مختلفة.

  • main.beyesp:

    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-05-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.'
      }
    }
    

الخطوات التالية

للحصول على قائمة كاملة بأنواع موارد الملحقات، راجع أنواع الموارد التي توسع قدرات الموارد الأخرى.