تعيين نطاق لموارد الملحقات في لغة Bicep

مورد الامتداد هو مورد يقوم بتعديل مورد آخر. على سبيل المثال، يمكنك تعيين دور لمورد من الموارد. تعيين الدور هو نوع مورد ملحق.

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

توضح هذه المقالة كيفية تعيين نطاق لنوع من أنواع موارد الملحق عند نشرها باستخدام ملف Bicep. كما تشرح خاصية النطاق المتوفرة لموارد الملحق عند تطبيقها على أحد الموارد.

ملاحظة

لا تتوفر خاصية النطاق سوى لأنواع موارد الملحق. ولتحديد نطاق مختلف لأحد أنواع الموارد لا من أنواع الملحقات، استخدم الوحدة النمطية.

موارد التدريب

إذا كنت تفضل معرفة المزيد حول موارد الملحقات من خلال إرشادات عملية، راجع توزيع موارد الملحقات والموارد التابعة باستخدام Bicep.

التطبيق في نطاق التوزيع

لتطبيق نوع مورد ملحق ما في نطاق التوزيع الهدف، أضف المورد إلى القالب كما تفعل مع أي نوع مورد آخر. وتكون النطاقات المتوفرة هي: مجموعة الموارد، والاشتراك، ومجموعة الإدارة، والمستأجر. مع العلم أنه يجب أن يدعم نطاق التوزيع نوع المورد.

عند التوزيع إلى مجموعة موارد، يضيف القالب التالي قفلاً إلى مجموعة الموارد تلك.

resource createRgLock 'Microsoft.Authorization/locks@2016-09-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@2020-04-01-preview' = {
  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@2019-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
  properties: {
    roleDefinitionId: role[builtInRoleType]
    principalId: principalId
  }
  scope: demoStorageAcct
}

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

resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2021-04-01' existing = {
  name: 'examplestore'
}

resource createStorageLock 'Microsoft.Authorization/locks@2016-09-01' = {
  name: 'storeLock'
  scope: demoStorageAcct
  properties: {
    level: 'CanNotDelete'
    notes: 'Storage account should not be deleted.'
  }
}

تنطبق المتطلبات نفسها على موارد الملحقات مثل الموارد الأخرى عند استهداف نطاق مختلف عن النطاق المستهدف للتوزيع. للتعرف على المزيد حول التوزيع إلى أكثر من نطاق، راجع:

يسمح بخصائص resourceGroup والاشتراك فقط على الوحدات النمطية. هذه الخصائص غير مسموح بها على الموارد الفردية. استخدم الوحدات النمطية إذا كنت تريد نشر مورد ملحق مع تعيين النطاق لمورد في مجموعة موارد مختلفة.

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

  • 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@2021-09-01' existing = {
      name: storageAccountName
    }
    
    resource storeLock 'Microsoft.Authorization/locks@2017-04-01' = {
      scope: storage
      name: 'storeLock'
      properties: {
        level: 'CanNotDelete'
        notes: 'Storage account should not be deleted.'
      }
    }
    

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

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