البرنامج التعليمي: إضافة شرط تعيين دور لتقييد الوصول إلى الكائنات الثنائية كبيرة الحجم باستخدام Azure CLI

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

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إضافة شرط إلى تعيين دور
  • تقييد الوصول إلى الكائنات الثنائية كبيرة الحجم استناداً إلى علامة فهرس blob

هام

يتوفر التحكم في الوصول المستند إلى سمة Azure (Azure ABAC) بشكل عام (GA) للتحكم في الوصول إلى Azure Blob Storage وAzure Data Lake Storage Gen2 وقوائم انتظار Azure باستخدام requestresourceenvironmentprincipal سمات و في كل من مستويات أداء حساب التخزين القياسية والمتميزة. حاليا، توجد سمة مورد بيانات تعريف الحاوية وسمة طلب قائمة كائن ثنائي كبير الحجم في PREVIEW. للحصول على معلومات حالة الميزة الكاملة ل ABAC لتخزين Azure، راجع حالة ميزات الشرط في Azure Storage.

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

المتطلبات الأساسية

للحصول على معلومات حول المتطلبات الأساسية لإضافة شروط تعيين الدور أو تحريرها، انظر الشروط المطلوبة.

الشرط

في هذا البرنامج التعليمي، يمكنك تقييد الوصول إلى الكائنات الثنائية كبيرة الحجم باستخدام علامة محددة. على سبيل المثال، يمكنك إضافة شرط إلى تعيين دور بحيث يمكن فقط قراءة Chandra الملفات باستخدام العلامة Project=Cascade.

رسم تخطيطي لتعيين الدور بشرط.

إذا حاولت Chandra قراءة كائن ثنائي كبير الحجم بدون العلامة Project=Cascade، فلا يسمح بالوصول.

رسم تخطيطي يُظهر وصول القراءة إلى الكائنات الثنائية كبيرة الحجم باستخدام علامة Project=Cascade.

إليك ما يبدو عليه الشرط في التعليمات البرمجية:

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
        AND NOT
        SubOperationMatches{'Blob.List'})
    )
    OR
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
    )
)

الخطوة 1: تسجيل الدخول إلى Azure

  1. استخدم الأمر Connect-AzAccount واتبع الإرشادات التي تظهر لتسجيل الدخول إلى الدليل في شكلمسؤول الوصول للمستخدم أو المالك.

    az login
    
  2. استخدم az account show للحصول على معرف اشتراكاتك.

    az account show
    
  3. تحديد معرف الاشتراك وتهيئة المتغير.

    subscriptionId="<subscriptionId>"
    

الخطوة الثانية: إنشاء مستخدم

  1. استخدام New-AzureADUser لإنشاء مستخدم أو العثور على مستخدم موجود. يستخدم هذا البرنامج التعليمي Chandra كمثال.

  2. تهيئة المتغير لمعرف كائن المستخدم.

    userObjectId="<userObjectId>"
    

الخطوة الثالثة: إعداد التخزين

يمكنك تخويل الوصول إلى تخزين Blob من Azure CLI إما باستخدام بيانات اعتماد Microsoft Entra أو باستخدام مفتاح الوصول إلى حساب التخزين. توضح هذه المقالة كيفية تخويل عمليات تخزين Blob باستخدام معرف Microsoft Entra. لمزيد من المعلومات، راجع التشغيل السريع: إنشاء النقط وتنزيلها وسردها باستخدام Azure CLI

  1. استخدم New-AzStorageAccount لإنشاء حساب تخزين متوافق مع ميزة فهرس النقاط. لمزيد من المعلومات، يُرجى مراجعة إدارة بيانات كبيرة الحجم لـ Azure وإيجادها باستخدام علامات فهرس البيانات كبيرة الحجم.

  2. استخدم حاوية تخزين az لإنشاء حاوية كائن ثنائي كبير الحجم جديدة داخل حساب التخزين وتعيين مستوى الوصول المجهول إلى خاص (بدون وصول مجهول).

  3. استخدام az storage blob upload لتحميل ملف نصي إلى الحاوية.

  4. إضافة علامة الفهرس الكائن الثنائي كبير الحجم التالي إلى الملف النصي. لمزيد من المعلومات، راجع استخدام علامات مؤشر كائن ثنائي كبير الحجم لإدارة والعثور على البيانات على Azure Blob Storage.

    إشعار

    تدعم الكائنات الثنائية كبيرة الحجم أيضاً القدرة على تخزين بيانات تعريف قيمة المفتاح المعرّفة من قبل المستخدم. على الرغم من أن بيانات التعريف مشابهة لعلامات فهرس البيانات كبيرة الحجم، ينبغي لك استخدام علامات فهرس البيانات كبيرة الحجم مع الشروط.

    مفتاح القيمة
    Project Cascade
  5. تحميل ملف نصي ثانٍ إلى الحاوية.

  6. إضافة علامة فهرس الكائن الثنائي كبير الحجم التالي إلى الملف النصي الثاني.

    مفتاح القيمة
    Project Baker
  7. تهيئة المتغيرات التالية بالأسماء التي استخدمتها.

    resourceGroup="<resourceGroup>"
    storageAccountName="<storageAccountName>"
    containerName="<containerName>"
    blobNameCascade="<blobNameCascade>"
    blobNameBaker="<blobNameBaker>"
    

الخطوة 4: تعيين دور بشرط

  1. تهيئة متغيرات دور قارئ بيانات تخزين الكائن الثنائي كبير الحجم.

    roleDefinitionName="Storage Blob Data Reader"
    roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
    
  2. تهيئة نطاق مجموعة الموارد.

    scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
    
  3. تهيئة الشرط.

    condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<\$key_case_sensitive\$>] StringEquals 'Cascade'))"
    

    في Bash، إذا تم تمكين توسيع المحفوظات، قد ترى رسالة bash: !: event not found بسبب علامة التعجب (!). في هذه الحالة، يمكنك تعطيل توسيع المحفوظات باستخدام الأمر set +H . لإعادة تمكين توسيع المحفوظات، استخدم set -H .

    في Bash علامة الدولار ($) له معنى خاص للتوسع. في PowerShell، إذا كانت حالتك تتضمن علامة الدولار ($)، يجب أن تسبقها بعلامة خلفية (\). على سبيل المثال، يستخدم هذا الشرط علامات الدولار لتحديد اسم مفتاح العلامة. لمزيد من المعلومات حول قواعد علامات الاقتباس في Bash، راجع علامات الاقتباس المزدوجة.

  4. تهيئة إصدار الشرط والوصف.

    conditionVersion="2.0"
    description="Read access to blobs with the tag Project=Cascade"
    
  5. استخدام az role assignment create لتعيين دور قارئ بيانات الكائن الثنائي كبير الحجم التخزين بشرط المستخدم في نطاق مجموعة موارد.

    az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersion
    

    فيما يلي مثال على الإخراج:

    {
      "canDelegate": null,
      "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))",
      "conditionVersion": "2.0",
      "description": "Read access to blobs with the tag Project=Cascade",
      "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
      "name": "{roleAssignmentId}",
      "principalId": "{userObjectId}",
      "principalType": "User",
      "resourceGroup": "{resourceGroup}",
      "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
      "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

الخطوة 5: (اختياري) عرض الشرط في مدخل Azure

  1. افتح مجموعة الموارد في مدخل Azure.

  2. حدد Access control (IAM).

  3. في علامة التبويب تعيينات الدور، ابحث عن تعيين الدور.

  4. في العمود Condition ، حدد View/Edit لعرض الشرط.

لقطة شاشة لإضافة شرط تعيين الدور في مدخل Azure.

الخطوة السادسة: اختبار الشرط

  1. افتح نافذة أوامر جديدة.

  2. استخدام az login لتسجيل الدخول في صورة Chandra.

    az login
    
  3. تهيئة المتغيرات التالية بالأسماء التي استخدمتها.

    storageAccountName="<storageAccountName>"
    containerName="<containerName>"
    blobNameBaker="<blobNameBaker>"
    blobNameCascade="<blobNameCascade>"
    
  4. استخدام az storage blob show لمحاولة قراءة خصائص الملف مشروع Baker.

    az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode login
    

    وفيما يلي مثالاً لهذا الإخراج. لاحظ أنه لا يمكنك قراءة الملف بسبب الشرط الذي أضفته.

    You do not have the required permissions needed to perform this operation.
    Depending on your operation, you may need to be assigned one of the following roles:
        "Storage Blob Data Contributor"
        "Storage Blob Data Reader"
        "Storage Queue Data Contributor"
        "Storage Queue Data Reader"
    
    If you want to use the old authentication method and allow querying for the right account key, please use the "--auth-mode" parameter and "key" value.
    
  5. قراءة خصائص الملف لمشروع تتالي.

    az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode login 
    

    وفيما يلي مثالاً لهذا الإخراج. لاحظ أنه يمكنك قراءة خصائص الملف لأنه يحتوي على العلامة Project=Cascade.

    {
      "container": "<containerName>",
      "content": "",
      "deleted": false,
      "encryptedMetadata": null,
      "encryptionKeySha256": null,
      "encryptionScope": null,
      "isAppendBlobSealed": null,
      "isCurrentVersion": null,
      "lastAccessedOn": null,
      "metadata": {},
      "name": "<blobNameCascade>",
      "objectReplicationDestinationPolicy": null,
      "objectReplicationSourceProperties": [],
      "properties": {
        "appendBlobCommittedBlockCount": null,
        "blobTier": "Hot",
        "blobTierChangeTime": null,
        "blobTierInferred": true,
        "blobType": "BlockBlob",
        "contentLength": 7,
        "contentRange": null,
    
      ...
    
    }
    

الخطوة 7: (اختياري) تحرير الشرط

  1. في نافذة PowerShell الأخرى، استخدم Get-AzRoleAssignment للحصول على تعيين للدور الذي أضفته.

    az role assignment list --assignee $userObjectId --resource-group $resourceGroup
    

    الإخراج مشابه للنص التالي:

    [
      {
        "canDelegate": null,
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))",
        "conditionVersion": "2.0",
        "description": "Read access to blobs with the tag Project=Cascade",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{userObjectId}",
        "principalName": "chandra@contoso.com",
        "principalType": "User",
        "resourceGroup": "{resourceGroup}",
        "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "roleDefinitionName": "Storage Blob Data Reader",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}",
        "type": "Microsoft.Authorization/roleAssignments"
      }
    ]
    
  2. إنشاء ملف JSON بالتنسيق التالي وتحديثcondition وdescriptionخصائص.

    {
        "canDelegate": null,
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Baker'))",
        "conditionVersion": "2.0",
        "description": "Read access to blobs with the tag Project=Cascade or Project=Baker",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{userObjectId}",
        "principalName": "chandra@contoso.com",
        "principalType": "User",
        "resourceGroup": "{resourceGroup}",
        "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "roleDefinitionName": "Storage Blob Data Reader",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}",
        "type": "Microsoft.Authorization/roleAssignments"
    }
    
  3. استخدم Set-AzRoleAssignment لتحديث شرط تعيين الدور.

    az role assignment update --role-assignment "./path/roleassignment.json"
    

الخطوة الثامنة: حذف الموارد

  1. استخدم Remove-AzRoleAssignment لإزالة تعيين الدور والشرط الذي أضفته.

    az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroup
    
  2. حذف حساب التخزين الذي أنشأته.

  3. حذف المستخدم الذي أنشأته.

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