استخدام PowerShell لإدارة قوائم التحكم في الوصول في Azure Data Lake Storage Gen2

توضح لك هذه المقالة كيفية استخدام PowerShell للحصول على قوائم التحكم في الوصول الخاصة بالدلائل والملفات وتعيينها وتحديثها.

يتوفر توريث قائمة التحكم بالوصول بالفعل للعناصر التابعة الجديدة التي تم إنشاؤها ضمن الدليل الأصل. ولكن يمكنك أيضًا إضافة قوائم التحكم في الوصول وتحديثها وإزالتها بشكل متكرر على العناصر التابعة الموجودة في دليل أصل دون الحاجة إلى إجراء هذه التغييرات بشكل فردي لكل عنصر تابع.

تقديم ملاحظات للمرجع |

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

  • اشتراك Azure. لمزيد من المعلومات، راجع الحصول على التجربة المجانية من Azure.

  • حساب تخزين يحتوي على مساحة اسماء هرمية (HNS) ممكّنة. اتبع هذه الإرشادات لإنشاء واحدة.

  • إصدار Azure CLI 2.6.0 أو أعلى.

  • أحد أذونات الأمان التالية:

    • أساس أمان معرف Microsoft Entra تم توفيره تم تعيينه لدور "مالك بيانات كائن ثنائي كبير الحجم للتخزين"، تم تحديد نطاقه للحاوية الهدف أو حساب التخزين أو مجموعة الموارد الأصل أو الاشتراك.

    • امتلاك مستخدم للحاوية أو الدليل المستهدف الذي تخطط لتطبيق إعدادات قائمة التحكم بالوصول عليه. لتعيين ACLs بشكل متكرر، يشمل ذلك جميع العناصر الفرعية في الحاوية أو الدليل الهدف.

    • مفتاح حساب التخزين.

ثبّت وحدة PowerShell النمطية

  1. تحقق أن إصدار PowerShell المثبت5.1 أو أحدث منه باستخدام الأمر التالي.

    echo $PSVersionTable.PSVersion.ToString()
    

    لترقية إصدار PowerShell خاصتك، راجع ترقية Windows PowerShell الحالية

  2. ثبّت وحدة Az.Storage.

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    لمزيد من المعلومات بشأن طريقة تثبيت وحدات PowerShell النمطية، يرجى الاطلاع علىتثبيت الوحدة النمطية Azure PowerShell

الاتصال بالحساب

حدّد الطريقة التي تريد أن تحصل بها الأوامر على تخويل لحساب التخزين.

الخيار 1: الحصول على التخويل باستخدام معرف Microsoft Entra

إشعار

إذا كنت تستخدم معرف Microsoft Entra لتخويل الوصول، فتأكد من تعيين دور مالك بيانات Storage Blob لكيان الأمان الخاص بك. لمعرفة المزيد عن كيفية تطبيق أذونات قائمة التحكم بالوصول وتأثيرات تغييرها، راجع نموذج التحكم بالوصول في Azure Data Lake Storage Gen2.

باستخدام هذا النهج، يضمن النظام أن حساب المستخدم الخاص بك لديه تعيينات التحكم في الوصول المستندة إلى دور Azure (Azure RBAC) المناسبة وأذونات الوصول إلى ACL.

  1. افتح نافذة أوامر Windows PowerShell، ثم سجّل الدخول إلى اشتراك Azure باستخدام Connect-AzAccount الأمر واتبع الإرشادات التي تظهر على الشاشة.

    Connect-AzAccount
    
  2. إن كانت هويتك مقترنة بأكثر من اشتراك واحد، فحدد اشتراكك النشط لاشتراك حساب التخزين الذي تريد إنشاء الدلائل فيه وإدارتها. في هذا المثال، استبدل قيمة العنصر النائب <subscription-id> بمعرف اشتراكك.

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. ادخل على سياق حساب التخزين.

    $ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
    

الخيار 2: الحصول على تخويل باستخدام مفتاح حساب التخزين

باستخدام هذا النهج، لا يتحقق النظام من أذونات Azure RBAC أو ACL. احصل على سياق حساب التخزين باللجوء إلى مفتاح حساب.

$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'

الحصول على قوائم التحكم في الوصول

احصل على قائمة التحكم بالوصول لدليل أو ملف باستخدام Get-AzDataLakeGen2Itemcmdlet.

يحصل هذا المثال على ACL للدليل الجذر للحاوية ثم يطبع ACL إلى وحدة التحكم.

$filesystemName = "my-file-system"
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL

يحصل هذا المثال على قائمة التحكم بالوصول لدليل، ثم يطبع قائمة التحكم بالوصول إلى وحدة التحكم.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL

يحصل هذا المثال على ACL لملف ثم يطبع ACL إلى وحدة التحكم.

$filePath = "my-directory/upload.txt"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL

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

Get ACL output for directory

في هذا المثال، قام المستخدم المالك بقراءة أذونات القراءة والكتابة والتنفيذ. المجموعة المالكة لديها أذونات قراءة وتنفيذ فقط. لمزيد من المعلومات حول قوائم التحكم في الوصول، راجع التحكم في الوصول في Azure Data Lake Storage Gen2.

تعيين قوائم التحكم في الوصول

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

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

يوضح لك هذا القسم كيفية:

  • تعيين قائمة تحكم بالوصول
  • تعيين قوائم التحكم في الوصول بشكل متكرر

تعيين قائمة تحكم بالوصول

Set-AzDataLakeGen2ItemAclObject استخدم cmdlet لإنشاء قائمة التحكم بالوصول (ACL) للمستخدم المالك أو المجموعة المالكة أو المستخدمين الآخرين. ثم استخدم Update-AzDataLakeGen2Item cmdlet لتثبيت قائمة التحكم بالوصول.

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

$filesystemName = "my-file-system"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Acl $acl
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL

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

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL

إشعار

إذا كنت تريد تعيين إدخال ACL افتراضي ، فاستخدم المعلمة -DefaultScope عند تشغيل الأمر Set-AzDataLakeGen2ItemAclObject . على سبيل المثال: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.

يعين هذا المثال قائمة التحكم بالوصول (ACL) على ملف للمستخدم المالك أو المجموعة المالكة أو المستخدمين الآخرين، ثم يطبع ACL إلى وحدة التحكم.

$filesystemName = "my-file-system"
$filePath = "my-directory/upload.txt"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "-wx" -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath -Acl $acl
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL

إشعار

لتعيين قائمة التحكم بالوصول (ACL) لمجموعة أو مستخدم معين أو كيان خدمة أو هوية مدارة، استخدم معرفات الكائنات الخاصة بهم. على سبيل المثال، لتعيين ACL لمجموعة، استخدم group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. لتعيين قائمة التحكم بالوصول (ACL) لمستخدم، استخدم user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

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

Get ACL output for file

في هذا المثال، يكون لدى المستخدم المالك والمجموعة المالكة أذونات القراءة والكتابة فقط. يكون لجميع المستخدمين الآخرين أذونات الكتابة والتنفيذ. لمزيد من المعلومات حول قوائم التحكم في الوصول، راجع التحكم في الوصول في Azure Data Lake Storage Gen2.

تعيين قوائم التحكم في الوصول بشكل متكرر

قم بتعيين ACLs بشكل متكرر باستخدام الأمر Set-AzDataLakeGen2AclRecursive .

يُعين هذا المثال قائمة التحكم بالوصول لدليل يُسمى my-parent-directory. تمنح هذه الإدخالات المستخدم المالك أذونات القراءة والكتابة والتنفيذ، وتمنح المجموعة المالكة أذونات القراءة والتنفيذ فقط، ولا تمنح جميع الآخرين أي وصول. يعطي إدخال قائمة التحكم في الوصول الأخير في هذا المثال مستخدما معينا لديه معرف الكائن "xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx.

$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission r-x -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "---" -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission r-x -InputObject $acl

Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl

إشعار

إذا كنت تريد تعيين إدخال ACL افتراضي ، فاستخدم المعلمة -DefaultScope عند تشغيل الأمر Set-AzDataLakeGen2ItemAclObject . على سبيل المثال: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.

للاطلاع على مثال يقوم بتعيين قوائم التحكم بالوصول بشكل متكرر على دفعات عن طريق تحديد حجم دفعة، راجع مقالة المرجع Set-AzDataLakeGen2AclRecursive .

تحديث قوائم التحكم في الوصول

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

يوضح لك هذا القسم كيفية:

  • تحديث قائمة التحكم بالوصول
  • تحديث قوائم التحكم في الوصول بشكل متكرر

تحديث قائمة التحكم بالوصول

أولاً، احصل على قائمة التحكم بالوصول. ثم استخدم Set-AzDataLakeGen2ItemAclObject cmdlet لإضافة إدخال ACL أو تحديثه. Update-AzDataLakeGen2Item استخدم cmdlet لتثبيت ACL.

ينشئ هذا المثال أو يحدث قائمة التحكم بالوصول على دليل لمستخدم.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = (Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname).ACL
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl

إشعار

إذا كنت تريد تحديث إدخال ACL افتراضي ، فاستخدم المعلمة -DefaultScope عند تشغيل الأمر Set-AzDataLakeGen2ItemAclObject . على سبيل المثال: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -DefaultScope.

تحديث قوائم التحكم في الوصول بشكل متكرر

تحديث قوائم التحكم بالوصول بشكل متكرر باستخدام Update-AzDataLakeGen2AclRecursive cmdlet.

يقوم هذا المثال بتحديث إدخال قائمة التحكم في الوصول بإذن كتابة.

$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission rwx

Update-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl

إشعار

لتعيين قائمة التحكم بالوصول (ACL) لمجموعة أو مستخدم معين أو كيان خدمة أو هوية مدارة، استخدم معرفات الكائنات الخاصة بهم. على سبيل المثال، لتعيين ACL لمجموعة، استخدم group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. لتعيين قائمة التحكم بالوصول (ACL) لمستخدم، استخدم user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

للاطلاع على مثال يقوم بتحديث قوائم التحكم بالوصول بشكل متكرر على دفعات عن طريق تحديد حجم دفعة، راجع مقالة مرجع Update-AzDataLakeGen2AclRecursive .

إزالة إدخالات قائمة التحكم بالوصول

يوضح لك هذا القسم كيفية:

  • إزالة إدخال ACL
  • إزالة إدخالات قائمة التحكم في الوصول بشكل متكرر

إزالة إدخال ACL

يزيل هذا المثال إدخالاً من قائمة التحكم بالوصول الموجودة.

$id = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Create the new ACL object.
[Collections.Generic.List[System.Object]]$aclnew =$acl

foreach ($a in $aclnew)
{
    if ($a.AccessControlType -eq "User" -and $a.DefaultScope -eq $false -and $a.EntityId -eq $id)
    {
        $aclnew.Remove($a);
        break;
    }
}
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $aclnew

إزالة إدخالات قائمة التحكم في الوصول بشكل متكرر

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

قم بإزالة إدخالات ACL باستخدام الأمر Remove-AzDataLakeGen2AclRecursive .

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

$filesystemName = "my-container"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---"

Remove-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName  -Acl $acl

إشعار

إذا كنت تريد إزالة إدخال ACL افتراضي ، فاستخدم المعلمة -DefaultScope عند تشغيل الأمر Set-AzDataLakeGen2ItemAclObject . على سبيل المثال: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope.

لمشاهدة مثال يزيل قوائم التحكم بالوصول بشكل متكرر على دفعات عن طريق تحديد حجم دفعة، راجع مقالة المرجع Remove-AzDataLakeGen2AclRecursive .

التعافي من حالات الفشل

قد تواجه أخطاء وقت التشغيل أو الأذونات عند تعديل قوائم التحكم بالوصول بشكل متكرر.

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

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

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$result
$result.FailedEntries | ft

استنادًا إلى إخراج الجدول، يمكنك إصلاح أية أخطاء في الأذونات، ثم استئناف التنفيذ باستخدام الرمز المميز للمتابعة.

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinuationToken $result.ContinuationToken
$result

للاطلاع على مثال يقوم بتعيين قوائم التحكم بالوصول بشكل متكرر على دفعات عن طريق تحديد حجم دفعة، راجع مقالة المرجع Set-AzDataLakeGen2AclRecursive .

إذا كنت تريد أن تكتمل العملية دون انقطاع بسبب أخطاء الأذونات، فيمكنك تحديد ذلك.

يستخدم هذا المثال المعلمة ContinueOnFailure بحيث يستمر التنفيذ حتى إذا واجهت العملية خطأ في الإذن.

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinueOnFailure

echo "[Result Summary]"
echo "TotalDirectoriesSuccessfulCount: `t$($result.TotalFilesSuccessfulCount)"
echo "TotalFilesSuccessfulCount: `t`t`t$($result.TotalDirectoriesSuccessfulCount)"
echo "TotalFailureCount: `t`t`t`t`t$($result.TotalFailureCount)"
echo "FailedEntries:"$($result.FailedEntries | ft)

للاطلاع على مثال يقوم بتعيين قوائم التحكم بالوصول بشكل متكرر على دفعات عن طريق تحديد حجم دفعة، راجع مقالة المرجع Set-AzDataLakeGen2AclRecursive .

أفضل الممارسات

يوفر لك هذا القسم بعض إرشادات أفضل الممارسات لإعداد قوائم التحكم بالوصول بشكل متكرر.

التعامل مع أخطاء وقت التشغيل

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

معالجة أخطاء الأذونات (403)

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

بيانات الاعتماد

نوصي بتوفير أساس أمان Microsoft Entra الذي تم تعيينه لدور Storage Blob Data Owner في نطاق حساب التخزين الهدف أو الحاوية.

الأداء

لتقليل زمن الانتقال، نوصي بتشغيل عملية ACL المتكررة في جهاز Azure Virtual Machine (VM) الموجود في نفس منطقة حساب التخزين خاصتك.

حدود ACL

الحد الأقصى لعدد قوائم التحكم في الوصول التي يمكنك تطبيقها على دليل أو ملف هو 32 قائمة تحكم بالوصول و32 قائمة تحكم بالوصول افتراضية. لمزيد من المعلومات، راجع التحكم في الوصول في Azure Data Lake Storage Gen2.

(راجع أيضًا )