تمكين مصادقة خدمات مجال Active Directory لمشاركات ملفات Azure

توضح هذه المقالة عملية تمكين مصادقة خدمات مجال Active Directory (AD DS) على حساب التخزين الخاص بك من أجل استخدام بيانات اعتماد Active Directory محلي (AD) للمصادقة على مشاركات ملفات Azure.

هام

قبل تمكين مصادقة AD DS، تأكد من فهم السيناريوهات والمتطلبات المدعومة في مقالة النظرة العامة واستكمل المتطلبات الأساسيةالضرورية. إذا كانت بيئة Active Directory تمتد عبر غابات متعددة، فشاهد استخدام ملفات Azure مع غابات Active Directory متعددة.

لتمكين مصادقة AD DS عبر SMB لمشاركات ملفات Azure، تحتاج إلى تسجيل حساب تخزين Azure الخاص بك مع AD DS المحلي ثم تعيين خصائص المجال المطلوبة على حساب التخزين. لتسجيل حساب التخزين الخاص بك مع AD DS، يمكنك إنشاء حساب كمبيوتر (أو حساب تسجيل دخول الخدمة) يمثله في AD DS الخاص بك. فكر في هذه العملية كما لو كانت مثل إنشاء حساب يمثل خادم ملفات Windows محليا في AD DS الخاص بك. عندما يتم تمكين الميزة في حساب التخزين، فإنها تنطبق على جميع مشاركات الملفات الجديدة والحالية في الحساب.

ينطبق على

نوع مشاركة الملف SMB NFS
مشاركات الملفات القياسية (GPv2)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) ‏‏نعم‬ لا
مشاركات الملفات القياسية (GPv2)، حساب تخزين مكرر جغرافي (GRS) أو حساب تخزين مكرر للمنطقة الجغرافية (GZRS) ‏‏نعم‬ لا
مشاركات الملفات المدفوعة (FileStorage)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) ‏‏نعم‬ لا

توفر الوحدة النمطية AzFilesHybrid PowerShell أوامر cmdlets لنشر ملفات Azure وتكوينها. يتضمن أوامر cmdlets للمجال الذي ينضم إلى حسابات التخزين إلى Active Directory محلي وتكوين خوادم DNS الخاصة بك. تقوم أوامر cmdlets بإجراء التعديلات اللازمة وتمكين الميزة لك. نظرا لأن بعض أجزاء cmdlets تتفاعل مع AD DS المحلي الخاص بك، فإننا نشرح ما تفعله أوامر cmdlets، حتى تتمكن من تحديد ما إذا كانت التغييرات تتوافق مع نهج التوافق والأمان الخاصة بك، والتأكد من أن لديك الأذونات المناسبة لتنفيذ أوامر cmdlets. على الرغم من أننا نوصي باستخدام الوحدة النمطية AzFilesHybrid، إذا لم تتمكن من القيام بذلك، فإننا نقدم خطوات يدوية.

هام

تشفير AES-256 Kerberos هو الآن أسلوب التشفير الوحيد الذي تدعمه الوحدة النمطية AzFilesHybrid. إذا كنت تفضل استخدام تشفير RC4، فشاهد الخيار الثاني: تنفيذ إجراءات التمكين يدويا. إذا قمت مسبقا بتمكين الميزة باستخدام إصدار AzFilesHybrid القديم (أقل من v0.2.2) الذي استخدم RC4 كطريقة تشفير افتراضية وتريد التحديث لدعم AES-256، فراجع استكشاف أخطاء مصادقة Azure Files SMB وإصلاحها.

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

تنزيل الوحدة النمطية AzFilesHybrid

قم بتنزيل أحدث إصدار من الوحدة النمطية AzFilesHybrid وفك ضغطه.

قم بتشغيل Join-AzStorageAccount

يؤدي الأمر Join-AzStorageAccount ما يعادل الانضمام إلى مجال دون اتصال نيابة عن حساب التخزين المحدد. يستخدم البرنامج النصي أدناه هذا cmdlet لإنشاء حساب كمبيوتر في مجال AD الخاص بك. إذا لم تتمكن من استخدام حساب كمبيوتر لأي سبب من الأسباب، يمكنك تغيير البرنامج النصي لإنشاء حساب تسجيل دخول الخدمة بدلاً من ذلك. يتم دعم استخدام تشفير AES-256 مع حسابات تسجيل الدخول إلى الخدمة بدءا من AzFilesHybrid الإصدار 0.2.5.

يمثل حساب AD DS الذي تم إنشاؤه بواسطة الأمر cmdlet حساب التخزين. إذا تم إنشاء حساب AD DS ضمن وحدة تنظيمية (OU) تفرض انتهاء صلاحية كلمة المرور، فيجب عليك تحديث كلمة المرور قبل الحد الأقصى لعمر كلمة المرور. يؤدي الفشل في تحديث كلمة مرور الحساب قبل هذا التاريخ إلى فشل المصادقة عند الوصول إلى مشاركات ملف Azure. لمعرفة كيفية تحديث كلمة المرور، راجع تحديث كلمة مرور حساب AD DS.

هام

سيُنشئ Join-AzStorageAccountالأمر cmdlet حساب AD لتمثيل حساب التخزين (مشاركة الملف) في AD. يمكنك اختيار التسجيل كحساب كمبيوتر أو حساب تسجيل دخول خدمة، راجع الأسئلة المتداولة للحصول على التفاصيل. يمكن أن تنتهي صلاحية كلمات مرور حساب تسجيل الدخول إلى الخدمة في AD إذا كان لديها عمر انتهاء صلاحية كلمة مرور افتراضي تم تعيينه على مجال AD أو الوحدة التنظيمية. نظرا لأن تغييرات كلمة مرور حساب الكمبيوتر مدفوعة بواسطة جهاز العميل وليس AD، فإنها لا تنتهي صلاحيتها في AD، على الرغم من أن أجهزة الكمبيوتر العميلة تغير كلمات المرور الخاصة بها بشكل افتراضي كل 30 يوما. لكلا نوعي الحسابين، نوصيك بالتحقق من عمر انتهاء صلاحية كلمة المرور الذي تم تكوينه ف والتخطيط لتحديث كلمة مرور هوية حساب التخزين لحساب AD قبل الحد الأقصى لعمر كلمة المرور. يمكنك التفكير في إنشاء وحدة تنظيمية جديدة لـ AD في AD وتعطيل نهج انتهاء صلاحية كلمة المرور على حسابات الكمبيوتر أو حسابات تسجيل الدخول إلى الخدمة وفقاً لذلك.

يجب تشغيل البرنامج النصي أدناه في PowerShell 5.1 على جهاز منضم إلى مجال AD DS المحلي، باستخدام بيانات اعتماد AD DS المحلية التي لديها أذونات لإنشاء حساب كمبيوتر أو حساب تسجيل دخول الخدمة في AD الهدف (مثل مسؤول المجال). لاتباع مبدأ الامتياز الأقل، يجب أن يكون لبيانات اعتماد AD DS المحلية أدوار Azure التالية:

  • قارئ على مجموعة الموارد حيث يوجد حساب التخزين الهدف.
  • المساهم في حساب التخزين الذي سيتم ضمه إلى AD DS.

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

يجب أن يكون لبيانات اعتماد AD DS أيضا أذونات لإنشاء حساب كمبيوتر أو حساب تسجيل دخول خدمة في AD الهدف. استبدل قيم العنصر النائب بقيمك قبل تنفيذ البرنامج النصي.

# Change the execution policy to unblock importing AzFilesHybrid.psm1 module
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

# Navigate to where AzFilesHybrid is unzipped and stored and run to copy the files into your path
.\CopyToPSPath.ps1 

# Import AzFilesHybrid module
Import-Module -Name AzFilesHybrid

# Login to Azure using a credential that has either storage account owner or contributor Azure role 
# assignment. If you are logging into an Azure environment other than Public (ex. AzureUSGovernment) 
# you will need to specify that.
# See https://learn.microsoft.com/azure/azure-government/documentation-government-get-started-connect-with-ps
# for more information.
Connect-AzAccount

# Define parameters
# $StorageAccountName is the name of an existing storage account that you want to join to AD
# $SamAccountName is the name of the to-be-created AD object, which is used by AD as the logon name 
# for the object. It must be 15 characters or less and has certain character restrictions.
# Make sure that you provide the SamAccountName without the trailing '$' sign.
# See https://learn.microsoft.com/windows/win32/adschema/a-samaccountname for more information.
$SubscriptionId = "<your-subscription-id-here>"
$ResourceGroupName = "<resource-group-name-here>"
$StorageAccountName = "<storage-account-name-here>"
$SamAccountName = "<sam-account-name-here>"
$DomainAccountType = "<ComputerAccount|ServiceLogonAccount>" # Default is set as ComputerAccount
# If you don't provide the OU name as an input parameter, the AD identity that represents the 
# storage account is created under the root directory.
$OuDistinguishedName = "<ou-distinguishedname-here>"
# Encryption method is AES-256 Kerberos.

# Select the target subscription for the current session
Select-AzSubscription -SubscriptionId $SubscriptionId 

# Register the target storage account with your active directory environment under the target OU 
# (for example: specify the OU with Name as "UserAccounts" or DistinguishedName as 
# "OU=UserAccounts,DC=CONTOSO,DC=COM"). You can use this PowerShell cmdlet: Get-ADOrganizationalUnit 
# to find the Name and DistinguishedName of your target OU. If you are using the OU Name, specify it 
# with -OrganizationalUnitName as shown below. If you are using the OU DistinguishedName, you can set it 
# with -OrganizationalUnitDistinguishedName. You can choose to provide one of the two names to specify 
# the target OU. You can choose to create the identity that represents the storage account as either a 
# Service Logon Account or Computer Account (default parameter value), depending on your AD permissions 
# and preference. Run Get-Help Join-AzStorageAccountForAuth for more details on this cmdlet.

Join-AzStorageAccount `
        -ResourceGroupName $ResourceGroupName `
        -StorageAccountName $StorageAccountName `
        -SamAccountName $SamAccountName `
        -DomainAccountType $DomainAccountType `
        -OrganizationalUnitDistinguishedName $OuDistinguishedName

# You can run the Debug-AzStorageAccountAuth cmdlet to conduct a set of basic checks on your AD configuration 
# with the logged on AD user. This cmdlet is supported on AzFilesHybrid v0.1.2+ version. For more details on 
# the checks performed in this cmdlet, see Azure Files Windows troubleshooting guide.
Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose

الخيار الثاني: تنفيذ إجراءات التمكين يدوياً

يجب على معظم العملاء اختيار الخيار الأول أعلاه واستخدام الوحدة النمطية AzFilesHybrid PowerShell لتمكين مصادقة AD DS مع ملفات Azure. ومع ذلك، إذا كنت تفضل تنفيذ الخطوات يدويا باستخدام Active Directory PowerShell، يتم توضيح الخطوات هنا.

هام

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

التحقق من البيئة

أولا، تحقق من حالة البيئة الخاصة بك.

  • تحقق مما إذا كان Active Directory PowerShell مثبتا، وما إذا كان يتم تنفيذ shell بامتيازات المسؤول.
  • تأكد من تثبيت الوحدة النمطية Az.Storage، وقم بتثبيتها إذا لم تكن كذلك. ستحتاج إلى الإصدار 2.0 على الأقل.
  • بعد إكمال هذه الفحوصات، تحقق من AD DS لمعرفة ما إذا كان هناك حساب كمبيوتر (افتراضي) أو حساب تسجيل دخول للخدمة تم إنشاؤه بالفعل باستخدام SPN/UPN مثل "cifs/your-storage-account-name-here.file.core.windows.net". إذا لم يكن الحساب موجوداً، فأنشئ حساباً كما هو موضح في القسم التالي.

هام

يجب تشغيل Active Directory محلي PowerShell cmdlets في هذا القسم في Windows PowerShell 5.1. لن يعمل PowerShell 7.x و Azure Shell للسحابة في هذا السيناريو.

قم بإنشاء هوية تمثل حساب التخزين في AD الخاص بك يدوياً

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

# Create the Kerberos key on the storage account and get the Kerb1 key as the password for the AD identity 
# to represent the storage account
$ResourceGroupName = "<resource-group-name-here>"
$StorageAccountName = "<storage-account-name-here>"

New-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -KeyName kerb1
Get-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -ListKerbKey | where-object{$_.Keyname -contains "kerb1"}

يجب أن ترجع أوامر cmdlets قيمة المفتاح. بمجرد أن يكون لديك مفتاح kerb1، قم بإنشاء حساب كمبيوتر أو حساب خدمة في AD ضمن الوحدة التنظيمية الخاصة بك، واستخدم المفتاح ككلمة مرور لهوية AD.

  1. قم بتعيين SPN إلى cifs/your-storage-account-name-here.file.core.windows.net إما في AD GUI أو عن طريق تشغيل Setspn الأمر من سطر أوامر Windows كمسؤول (تذكر استبدال نص المثال باسم حساب التخزين الخاص بك واسم <ADAccountName> حساب AD الخاص بك).

    Setspn -S cifs/your-storage-account-name-here.file.core.windows.net <ADAccountName>
    
  2. إذا كان لديك حساب مستخدم، فعدل UPN لمطابقة SPN لكائن AD (يجب أن يكون لديك AD PowerShell cmdlets مثبتة وتنفيذ cmdlets في PowerShell 5.1 بامتيازات مرتفعة).

    Set-ADUser -Identity $UserSamAccountName -UserPrincipalName cifs/<StorageAccountName>.file.core.windows.net@<DNSRoot>
    
  3. تعيين كلمة مرور حساب AD إلى قيمة مفتاح kerb1.

    Set-ADAccountPassword -Identity servername$ -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "kerb1_key_value_here" -Force)
    

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

احتفظ بـ SID للهوية المنشأة حديثاً، ستحتاج إليها للخطوة التالية. لا تحتاج الهوية التي قمت بإنشائها والتي تمثل حساب التخزين إلى مزامنتها مع معرف Microsoft Entra.

قم بتمكين الميزة على حساب التخزين الخاص بك

قم بتعديل الأمر التالي لتضمين تفاصيل التكوين لخصائص المجال في الأمر التالي، ثم قم بتشغيله لتمكين الميزة. معرف SID لحساب التخزين المطلوب في الأمر التالي هو معرف الأمان (SID) للهوية التي قمت بإنشائها في AD DS في القسم السابق. تأكد من توفير الخاصية ActiveDirectorySamAccountName دون علامة '$' اللاحقة.

# Set the feature flag on the target storage account and provide the required AD domain information
Set-AzStorageAccount `
        -ResourceGroupName "<your-resource-group-name>" `
        -Name "<your-storage-account-name>" `
        -EnableActiveDirectoryDomainServicesForFile $true `
        -ActiveDirectoryDomainName "<your-domain-dns-root>" `
        -ActiveDirectoryNetBiosDomainName "<your-domain-dns-root>" `
        -ActiveDirectoryForestName "<your-forest-name>" `
        -ActiveDirectoryDomainGuid "<your-guid>" `
        -ActiveDirectoryDomainsid "<your-domain-sid>" `
        -ActiveDirectoryAzureStorageSid "<your-storage-account-sid>" `
        -ActiveDirectorySamAccountName "<your-domain-object-sam-account-name>" `
        -ActiveDirectoryAccountType "<your-domain-object-account-type, the value could be 'Computer' or 'User'>"

لتمكين تشفير AES-256، اتبع الخطوات الواردة في هذا القسم. إذا كنت تخطط لاستخدام تشفير RC4، فتخط هذا القسم.

هام

لتمكين تشفير AES-256، يجب أن يكون كائن المجال الذي يمثل حساب التخزين الخاص بك حساب كمبيوتر (افتراضي) أو حساب تسجيل دخول الخدمة في مجال AD المحلي. إذا كان عنصر المجال الخاص بك لا يفي بهذا المطلب، فاحذفه وأنشئ عنصر مجال جديداً يلبي هذا المطلب. أيضا، يجب أن يكون لديك حق الوصول للكتابة إلى سمة msDS-SupportedEncryptionTypes الكائن.

يعتمد cmdlet الذي ستقوم بتشغيله لتكوين دعم AES-256 على ما إذا كان عنصر المجال الذي يمثل حساب التخزين الخاص بك هو حساب كمبيوتر أو حساب تسجيل دخول الخدمة (حساب المستخدم). في كلتا الحالتين، يجب أن يكون لديك AD PowerShell cmdlets مثبتة وتنفيذ cmdlet في PowerShell 5.1 مع امتيازات مرتفعة.

لتمكين تشفير AES-256 على حساب كمبيوتر، قم بتشغيل الأمر التالي. الاستبدال <domain-object-identity> و<domain-name> وكذلك من خلال القيم الخاصة بك.

Set-ADComputer -Identity <domain-object-identity> -Server <domain-name> -KerberosEncryptionType "AES256"

لتمكين تشفير AES-256 على حساب تسجيل دخول الخدمة، قم بتشغيل الأمر التالي. الاستبدال <domain-object-identity> و<domain-name> وكذلك من خلال القيم الخاصة بك.

Set-ADUser -Identity <domain-object-identity> -Server <domain-name> -KerberosEncryptionType "AES256"

بعد تشغيل الأمر أعلاه، استبدل <domain-object-identity> في البرنامج النصي التالي بالقيمة الخاصة بك، ثم قم بتشغيل البرنامج النصي لتحديث كلمة مرور عنصر المجال:

$KeyName = "kerb1" # Could be either the first or second kerberos key, this script assumes we're refreshing the first
$KerbKeys = New-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -KeyName $KeyName
$KerbKey = $KerbKeys.keys | Where-Object {$_.KeyName -eq $KeyName} | Select-Object -ExpandProperty Value
$NewPassword = ConvertTo-SecureString -String $KerbKey -AsPlainText -Force

Set-ADAccountPassword -Identity <domain-object-identity> -Reset -NewPassword $NewPassword

هام

إذا كنت تستخدم تشفير RC4 مسبقا وقمت بتحديث حساب التخزين لاستخدام AES-256، يجب تشغيل klist purge على العميل ثم إعادة تحميل مشاركة الملف للحصول على تذاكر Kerberos جديدة مع AES-256.

التصحيح

إذا لزم الأمر، يمكنك تشغيل Debug-AzStorageAccountAuth cmdlet لإجراء مجموعة من الفحوصات الأساسية على تكوين AD الخاص بك مع مستخدم AD المسجل. يتم دعم أمر cmdlet هذا على إصدار AzFilesHybrid v0.1.2+ والإصدارات الأحدث. ينطبق الأمر cmdlet هذا فقط على مصادقة AD DS. لا يعمل مع Microsoft Entra Domain Services أو حسابات التخزين الممكنة ل Microsoft Entra Kerberos. لمزيد من المعلومات حول عمليات التحقق التي تم إجراؤها في cmdlet هذا، راجع تعذر تحميل مشاركات ملفات Azure باستخدام بيانات اعتماد AD.

Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose

التأكد من تمكين الميزة

يمكنك التحقق للتأكد مما إذا كان Active Directory ممكنا على حساب التخزين الخاص بك باستخدام البرنامج النصي التالي:

# Get the target storage account
$storageaccount = Get-AzStorageAccount `
        -ResourceGroupName "<your-resource-group-name-here>" `
        -Name "<your-storage-account-name-here>"

# List the directory service of the selected service account
$storageAccount.AzureFilesIdentityBasedAuth.DirectoryServiceOptions

# List the directory domain information if the storage account has enabled AD DS authentication for file shares
$storageAccount.AzureFilesIdentityBasedAuth.ActiveDirectoryProperties

إذا نجحت، يجب أن يبدو الإخراج كما يلي:

DomainName:<yourDomainHere>
NetBiosDomainName:<yourNetBiosDomainNameHere>
ForestName:<yourForestNameHere>
DomainGuid:<yourGUIDHere>
DomainSid:<yourSIDHere>
AzureStorageID:<yourStorageSIDHere>

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

لقد قمت الآن بتمكين AD DS بنجاح على حساب التخزين الخاص بك. لاستخدام الميزة، يجب تعيين أذونات على مستوى المشاركة.