Включение проверки подлинности Active Directory Domain Services для общих папок Azure

Область применения: ✔️ общие папки SMB

В этой статье объясняется, как включить проверку подлинности в Active Directory Domain Services (AD DS) в учетной записи хранилища, чтобы использовать учетные данные локальной Active Directory (AD) для проверки подлинности в файловых ресурсах Azure.

Внимание

Перед включением проверки подлинности AD DS ознакомьтесь со статьей обзора AD DS и выполните необходимые предварительные требования. Если среда Active Directory охватывает несколько лесов, см. раздел Использование файлов Azure с несколькими лесами Active Directory.

Чтобы включить проверку подлинности AD DS через SMB для общих папок Azure, зарегистрируйте учетную запись хранения Azure в локальной службе AD DS, а затем задайте необходимые свойства домена в учетной записи хранения. Чтобы зарегистрировать учетную запись хранения в AD DS, создайте учетную запись компьютера (или учетную запись входа в службу), представляющую ее в AD DS. Этот процесс аналогичен созданию учетной записи, представляющей локальный Windows файловый сервер в AD DS. Если включить функцию в учетной записи хранения, она применяется ко всем новым и существующим общим папкам в учетной записи.

Модуль PowerShell AzFilesHybrid предоставляет командлеты для присоединения учетных записей хранения к локальным доменным службам AD DS и настройки DNS-серверов. Командлеты вносят необходимые изменения и позволяют включить эту функцию. Так как некоторые части командлетов взаимодействуют с локальными AD DS, ознакомьтесь с описанием того, что делают командлеты. Затем вы можете определить, насколько изменения соответствуют вашим политикам соответствия и безопасности, чтобы убедиться, что у вас есть необходимые разрешения для выполнения командлетов. Если вы не можете использовать модуль AzFilesHybrid, можно включить эту функцию , выполнив действия вручную.

Внимание

Модуль AzFilesHybrid поддерживает только шифрование AES-256 Kerberos. Если вы ранее включили функцию с помощью старой версии AzFilesHybrid (ниже версии 0.2.2), которая использовала RC4 в качестве метода шифрования по умолчанию, обновите до AES-256 немедленно. Для получения дополнительной информации см. раздел Устранение неполадок аутентификации SMB в Azure Files.

Предварительные условия

Загрузка модуля AzFilesHybrid

Скачайте и распакуйте последнюю версию модуля AzFilesHybrid.

Запустите Join-AzStorageAccount

Командлет Join-AzStorageAccount выполняет эквивалент автономного присоединения к домену для указанной учетной записи хранения. Скрипт ниже использует данный командлет для создания учетной записи компьютера в вашем домене AD. Если вы не можете использовать учетную запись компьютера, можно изменить сценарий, чтобы создать учетную запись входа в службу . Использование шифрования AES-256 с учетными записями входа в службу поддерживается начиная с AzFilesHybrid версии 0.2.5.

Внимание

Учетная запись, создаваемая Join-AzStorageAccount, представляет учетную запись хранилища в вашей AD DS. Независимо от того, регистрируете ее как учетную запись компьютера или учетную запись входа в службу, проверьте политику истечения срока действия пароля в домене AD или подразделении (OU). Срок действия паролей учетной записи входа в службу может истекать в зависимости от возраста по умолчанию, в то время как изменения паролей учетной записи компьютера управляются клиентским компьютером (по умолчанию каждые 30 дней) и не истекают в AD. Для любого типа учетной записи необходимо обновить пароль до истечения его срока действия, чтобы избежать ошибок аутентификации при доступе к общим папкам Azure. Рассмотрите возможность создания нового подразделения AD и отключения срока действия паролей на учетных записях компьютеров или учетных записях для входа в службы при необходимости. Дополнительные сведения см. в разделе часто задаваемых вопросов.

Запустите следующий скрипт в PowerShell 5.1 на устройстве, связанном с вашим локальным AD DS. Используйте локальные учетные данные AD DS, имеющие разрешения на создание учетной записи компьютера или учетной записи входа в службу в целевой AD (например, администратор домена). Чтобы следовать принципу наименьших привилегий , локальные учетные данные AD DS должны иметь следующие роли Azure.

  • Читатель в группе ресурсов, в которой находится целевое хранилище.
  • Участник учетной записи хранения, присоединенной к AD DS.

Если учетная запись, используемая для присоединения к учетной записи хранения в AD DS, является Owner или Contributor в подписке Azure, где находятся целевые ресурсы, учетная запись уже включена для выполнения соединения и не требует дополнительных назначений.

Замените значения плейсхолдеров собственными перед выполнением скрипта.

# 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 20 characters or less and has certain character restrictions.
# Certain NETBIOS restrictions might require a $SamAccountName of 15 characters or less.
# 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 without the trailing '$'>"
$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 here. 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:
# https://learn.microsoft.com/troubleshoot/azure/azure-storage/files/security/files-troubleshoot-smb-authentication#unable-to-mount-azure-file-shares-with-ad-credentials
Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose

Теперь можно продолжить подтверждение включения функции.

Вариант 2: выполнение действий по включению вручную

Если вы не можете использовать модуль PowerShell AzFilesHybrid, можно выполнить шаги вручную с помощью Active Directory PowerShell.

Внимание

Если вы уже успешно выполнили Join-AzStorageAccount скрипт, перейдите в раздел "Подтверждение включения функции ". Выполнять описанные ниже действия вручную не нужно.

Проверка среды

Сначала проверьте состояние среды.

  • Active Directory PowerShell необходимо установить, и оболочка должна работать с правами администратора.
  • Необходимо установить последнюю версию модуля Az.Storage .
  • Проверьте, есть ли учетная запись компьютера (по умолчанию) или учетная запись входа в службу, созданная с помощью имени основного субъекта службы (SPN) или имени основного участника-пользователя (UPN), например cifs/[ваше-имя-учетной-записи-хранения-здесь].file.core.windows.net. Если учетная запись не существует, создайте ее, как описано в следующем разделе.

Внимание

В этом разделе в PowerShell 5.1 необходимо запустить командлеты Windows Server Active Directory PowerShell. PowerShell 7.x и Azure Cloud Shell не работают в этом сценарии.

Создание удостоверения, представляющего учетную запись хранения в AD, вручную

Сначала создайте новый ключ Kerberos для учетной записи хранения и получите ключ доступа с помощью следующих командлетов PowerShell. Используйте этот ключ только во время установки. Его нельзя использовать для операций управления или операций с "data plane" в отношении учетной записи хранения.

# 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"}

Командлеты возвращают значение ключа. После получения ключа kerb1 создайте либо учетную запись компьютера, либо учетную запись службы в AD в вашем подразделении и используйте ключ в качестве пароля для учетной записи AD.

  1. Задайте для имени основного пользователя службы (SPN) cifs/your-storage-account-name-here.file.core.windows.net в GUI Active Directory или путем выполнения команды Setspn в командной строке Windows с правами администратора. Замените пример текста именем учетной записи хранения и <ADAccountName> именем учетной записи AD.

    Setspn -S cifs/your-storage-account-name-here.file.core.windows.net <ADAccountName>
    
  2. Если у вас есть учетная запись пользователя, измените UPN, чтобы он соответствовал SPN для объекта AD. Необходимо установить командлеты AD PowerShell и выполнить их в среде PowerShell 5.1 с повышенными привилегиями.

    Set-ADUser -Identity $UserSamAccountName -UserPrincipalName cifs/<StorageAccountName>.file.core.windows.net@<DNSRoot>
    

    Внимание

    Не синхронизируйте пользователей с недопустимыми значениями userPrincipalName (UPN). Имя участника (UPNs) не должны содержать специальные символы, такие как /, пробелы или другие неподдерживаемые символы. Попытка синхронизации пользователей с недопустимыми UPN (например, с использованием / в имени пользователя) приводит к ошибкам в Microsoft Entra Connect. Если такие идентификаторы существуют в локальном каталоге, выполните одно из следующих действий:

    • Обновите унифицированное имя пользователя до допустимого формата (например, user@domain.com).
    • Исключите пользователя из синхронизации с помощью правил фильтрации в Microsoft Entra Connect.
  3. Установите пароль учетной записи AD на значение ключа kerb1.

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

Если ваша организационная единица (ОЕ) применяет срок действия пароля, необходимо обновить пароль до истечения максимально допустимого срока действия, чтобы предотвратить сбои в проверке подлинности при доступе к общим папкам Azure. Дополнительные сведения см. в статье Об обновлении пароля удостоверения учетной записи хранения в AD.

Сохраните SID только что созданной учетной записи. Он понадобится для следующего шага. Созданное удостоверение AD, представляющее учетную запись хранения, не нужно синхронизировать с Microsoft Entra ID.

Включите функцию в вашей учетной записи хранения

Измените следующую команду, чтобы включить сведения о конфигурации для свойств домена, а затем запустите ее, чтобы включить эту функцию. 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 without the trailing '$'>" `
        -ActiveDirectoryAccountType "<your-domain-object-account-type, the value could be 'Computer' or 'User'>"

Чтобы включить шифрование AES-256, выполните следующие действия.

Внимание

Чтобы включить шифрование AES-256, объект домена, представляющий учетную запись хранения, должен быть учетной записью компьютера (по умолчанию) или учетной записью входа в службу в домене Active Directory. Если объект домена не соответствует этим требованиям, удалите его и создайте новый объект в соответствии с ними. Кроме того, необходимо иметь доступ на запись к msDS-SupportedEncryptionTypes атрибуту объекта.

Командлет, выполняемый для настройки поддержки AES-256, зависит от того, является ли объект домена, представляющий учетную запись хранения, является учетной записью компьютера или учетной записью входа в службу (учетная запись пользователя). В любом случае необходимо установить командлеты AD PowerShell и выполнить командлет в 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.

Проверка включения функции

Проверьте, включен ли AD DS в качестве источника удостоверений в учетной записи хранения с помощью следующего скрипта. Замените <resource-group-name> и <storage-account-name> собственными значениями.

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

# List the identity source for the selected storage 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 с помощью вошедшего пользователя AD, выполните Debug-AzStorageAccountAuth командлет. Этот командлет поддерживается в AzFilesHybrid версии 0.1.2+ и выше. Этот командлет работает для AD DS и Microsoft Entra, а также для аутентификации Kerberos. Он не работает для учетных записей хранения, использующих Microsoft Entra Domain Services в роли источника удостоверений. Дополнительные сведения см. в разделе Невозможно подключить общие папки Azure с учетными данными AD.

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

Отключение проверки подлинности AD DS в учетной записи хранения

Если вы хотите использовать другой источник удостоверений, отключите проверку подлинности AD DS в учетной записи хранения с помощью портала Azure, PowerShell или Azure CLI.

Если отключить этот источник удостоверений, файловые ресурсы в вашей учетной записи хранения не будут иметь доступ с учетом идентификационных данных, пока вы не включите и не настроите другой источник удостоверений.

Внимание

После отключения проверки подлинности AD DS в учетной записи хранилища рассмотрите удаление удостоверения AD DS (учетной записи компьютера или учетной записи службы), созданного для представления учетной записи хранилища в локальной AD. Если оставить учетную запись в AD DS, она остается осиротевшим объектом. Удаление не является автоматическим.

Чтобы отключить проверку подлинности AD DS в учетной записи хранения с помощью портала Azure, выполните следующие действия.

  1. Войдите на портал Azure и выберите учетную запись хранения, для которой требуется отключить проверку подлинности AD DS.
  2. В разделе Хранилище данных выберите Общие папки.
  3. Рядом с доступом на основе удостоверений выберите состояние конфигурации, которое должно быть настроено.
  4. В разделе Active Directory Domain Services (AD DS) выберите Configure.
  5. Установите флажок Disable Active Directory для этой учетной записи хранения.
  6. Нажмите Сохранить.

Следующий шаг