Habilitar a autenticação do AD DS para compartilhamentos de arquivo do Azure

Este artigo descreve o processo para habilitar a autenticação de AD DS (Active Directory Domain Services) na sua conta de armazenamento para usar credenciais do AD (Active Directory) local para autenticação em compartilhamentos de arquivos do Azure.

Importante

Antes de habilitar a autenticação do AD DS, certifique-se de entender os cenários e requisitos com suporte no artigo de visão geral e conclua os pré-requisitos necessários. Se o ambiente do Active Directory abranger várias florestas, consulte Usar Arquivos do Azure com várias florestas do Active Directory.

Para habilitar a autenticação do AD DS por meio do SMB para compartilhamentos de arquivos do Azure, você precisa registrar a sua conta de armazenamento do Azure no seu AD DS local e, em seguida, definir as propriedades de domínio necessárias na conta de armazenamento. Para registrar a sua conta de armazenamento no AD DS, crie uma conta de computador (ou conta de logon de serviço) que a represente no seu AD DS. Considere esse processo como se fosse criar uma conta que represente um servidor de arquivos do Windows local no seu AD DS. Quando o recurso é habilitado na conta de armazenamento, ele se aplica a todos os compartilhamentos de arquivos novos e existentes na conta.

Aplica-se a

Tipo de compartilhamento de arquivos SMB NFS
Compartilhamentos de arquivos padrão (GPv2), LRS/ZRS Yes No
Compartilhamentos de arquivos padrão (GPv2), GRS/GZRS Yes No
Compartilhamento de arquivos premium (FileStorage), LRS/ZRS Yes No

O módulo do PowerShell AzFilesHybrid fornece cmdlets para implantar e configurar Arquivos do Azure. Ele inclui cmdlets para ingressar contas de armazenamento no Active Directory local e configurar os servidores DNS. Os cmdlets fazem as modificações necessárias e habilitam o recurso. Como algumas partes dos cmdlets interagem com seu AD DS local, explicamos o que os cmdlets fazem, para que você possa determinar se as alterações estão alinhadas com suas políticas de conformidade e segurança e se você tem as permissões adequadas para executar os cmdlets. Embora seja recomendável usar o módulo AzFilesHybrid, se você não conseguir fazer isso, vamos fornecer etapas manuais.

Importante

A criptografia Kerberos AES-256 agora é o único método de criptografia compatível com o módulo AzFilesHybrid. Se preferir usar a criptografia RC4, consulte Opção dois: executar manualmente as ações de habilitação. Se você habilitou o recurso anteriormente com uma versão antiga do AzFilesHybrid (inferior à v0.2.2) que usou o RC4 como o método de criptografia padrão e deseja atualizar para dar suporte a AES-256, confira a solução de problemas de autenticação SMB de Arquivos do Azure.

Pré-requisitos

Baixar o módulo AzFilesHybrid

Baixe e descompacte a versão mais recente do módulo AzFilesHybrid.

Executar Join-AzStorageAccount

O cmdlet Join-AzStorageAccount executa o equivalente a um ingresso no domínio offline em nome da conta de armazenamento especificada. O script abaixo usa esse cmdlet para criar uma conta de computador no seu domínio do AD. Se, por qualquer motivo, você não puder usar uma conta de computador, poderá alterar o script para criar uma conta de logon de serviço. Há suporte para o uso da criptografia AES-256 com as contas de logon do serviço a partir do AzFilesHybrid versão 0.2.5.

A conta do AD DS criada pelo cmdlet representa a conta de armazenamento. Se a conta do AD DS for criada em uma UO (unidade organizacional) que impõe a expiração da senha, você deverá atualizar a senha antes da duração máxima da senha. A falha ao atualizar a senha da conta antes dessa data resulta em falhas de autenticação ao acessar compartilhamentos de arquivos do Azure. Para saber como atualizar a senha, confira Atualizar a senha da conta do AD DS.

Importante

O cmdlet Join-AzStorageAccount criará uma conta do AD para representar a conta de armazenamento (compartilhamento de arquivos) no AD. Você pode optar por se registrar como uma conta de computador ou conta de logon de serviço, confira Perguntas frequentes para obter mais detalhes. As senhas da conta de logon de serviço poderão expirar no AD se tiverem uma idade de expiração de senha padrão definida no domínio do AD ou na UO. Como as alterações de senha de conta de computador são controladas pelo computador cliente e não pelo AD, elas não expiram no AD, embora os computadores cliente alterem as respectivas senhas por padrão a cada 30 dias. Para ambos os tipos de conta, recomendamos que você verifique a duração da validade da senha configurada e planeje a Atualização da senha da sua identidade de conta de armazenamento da conta do AD antes da duração máxima da senha. Você pode considerar a criação de uma nova Unidade Organizacional no AD e a desabilitação da política de expiração de senha em contas de computador ou contas de logon de serviço adequadamente.

Você deve executar o script abaixo no PowerShell 5.1 em um dispositivo que esteja ingressado em seu domínio do AD DS local, usando as credenciais do AD DS locais que tenham permissões para criar uma conta de logon do serviço ou uma conta de computador no AD de destino (como um administrador de domínio). Para seguir o Princípio de privilégio mínimo, a credencial do AD DS local deve ter as seguintes funções do Azure:

  • Leitor no grupo de recursos em que a conta de armazenamento de destino está.
  • Colaborador na conta de armazenamento a ser ingressada no AD DS.

Se a conta usada para ingressar na conta de armazenamento no AD DS for um Proprietário ou Colaborador na assinatura do Azure em que os recursos de destino estão localizados, essa conta já estará habilitada para executar a junção e nenhuma atribuição adicional será necessária.

A credencial do AD DS também precisa ter permissões para criar uma conta de logon do serviço ou uma conta de computador no AD de destino. Substitua os valores de espaço reservado pelos seus próprios valores, antes de executar o script.

# 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

Opção dois: executar manualmente as ações de habilitação

A maioria dos clientes deve escolher a Opção um acima e usar o módulo do PowerShell AzFilesHybrid para habilitar a autenticação do AD DS com Arquivos do Azure. No entanto, se você preferir executar as etapas manualmente usando o PowerShell do Active Directory, as etapas serão descritas abaixo.

Importante

Se você já executou o script Join-AzStorageAccount acima com êxito, acesse diretamente a seção Confirmar se o recurso está habilitado. Você não precisa executar as etapas manuais a seguir.

Verificar o ambiente

Primeiro, verifique o estado do seu ambiente.

  • Verifique se o Active Directory PowerShell está instalado e se o shell está sendo executado com os privilégios do administrador.
  • Verifique se o módulo Az.Storage está instalado e instale-o se não estiver. Você precisará de pelo menos a versão 2.0.
  • Depois de concluir essas verificações, verifique o seu AD DS para ver se há uma conta de computador (padrão) ou uma conta de logon de serviço que já foi criada com SPN/UPN como "cifs/your-storage-account-name-here.file.core.windows.net". Se a conta não existir, crie uma conforme descrito na seção a seguir.

Importante

Os cmdlets do PowerShell do Windows Server Active Directory nesta seção devem ser executados no Windows PowerShell 5.1. O PowerShell 7.x e o Azure Cloud Shell não funcionarão nesse cenário.

Criar uma identidade que representa a conta de armazenamento em seu AD manualmente

Para criar essa conta manualmente, primeiro crie uma nova chave Kerberos para sua conta de armazenamento e obtenha a chave de acesso usando os cmdlets do PowerShell abaixo. Essa chave só é usada durante a instalação. Ela não pode ser usada para nenhuma operação de controle ou plano de dados na conta de armazenamento.

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

Os cmdlets devem retornar o valor da chave. Uma vez que você tenha a chave kerb1, crie uma conta de computador ou conta de serviço no AD sob sua UO, e use a chave como senha para a identidade do AD.

  1. Defina o SPN como cifs/nome-da-sua-conta-de-armazenamento-aqui.file.core.windows.net na GUI do AD ou executando o comando Setspn da linha de comando do Windows como administrador (não se esqueça de substituir o texto do exemplo pelo nome da sua conta de armazenamento e <ADAccountName> pelo nome da sua conta do AD).

    Setspn -S cifs/your-storage-account-name-here.file.core.windows.net <ADAccountName>
    
  2. Se tiver uma conta de usuário, modifique o UPN para corresponder ao SPN do objeto do AD (é necessário ter os cmdlets do AD PowerShell instalados e executar os cmdlets no PowerShell 5.1 com privilégios elevados).

    Set-ADUser -Identity $UserSamAccountName -UserPrincipalName cifs/<StorageAccountName>.file.core.windows.net@<DNSRoot>
    
  3. Defina a senha da conta do AD como o valor da chave kerb1.

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

Se sua UO impõe a expiração de senha, você deve atualizar a senha antes da duração máxima da senha para evitar falhas de autenticação ao acessar compartilhamentos de arquivos do Azure. Confira Atualizar a senha de sua identidade de conta de armazenamento no AD para obter mais detalhes.

Mantenha o SID da identidade recém-criada, pois você precisará dela para a próxima etapa. A identidade que você criou e representa a conta de armazenamento não precisa ser sincronizada com o Microsoft Entra ID.

Habilitar o recurso em sua conta de armazenamento

Modifique o comando a seguir para incluir detalhes de configuração para as propriedades de domínio no comando a seguir e, em seguida, execute-o para habilitar o recurso. O SID da conta de armazenamento necessário no comando a seguir é o SID da identidade que você criou em seu AD DS na seção anterior. Certifique-se de fornecer a propriedade ActiveDirectorySamAccountName sem o sinal '$' à direita.

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

Se quiser habilitar a criptografia AES-256, siga as etapas nesta seção. Se você planeja usar RC4, ignore esta seção.

Importante

Para habilitar a criptografia AES-256, o objeto de domínio que representa sua conta de armazenamento precisa ser uma conta de computador (padrão) ou uma conta de logon do serviço no domínio do AD local. Se ele não atender a esses requisitos, exclua-o e crie um novo com essa capacidade. Além disso, você deve ter acesso de gravação ao atributo msDS-SupportedEncryptionTypes do objeto.

O cmdlet que você executará para configurar o suporte ao AES-256 depende se o objeto de domínio que representa sua conta de armazenamento é uma conta de computador ou conta de logon de serviço (conta de usuário). De qualquer forma, você deve ter os cmdlets do AD PowerShell instalados e executar o cmdlet no PowerShell 5.1 com privilégios elevados.

Para habilitar a criptografia AES-256 em uma conta de computador, execute o comando a seguir. Substitua <domain-object-identity> e <domain-name> por seus valores.

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

Para habilitar a criptografia AES-256 em uma conta de logon de serviço, execute o comando a seguir. Substitua <domain-object-identity> e <domain-name> por seus valores.

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

Depois de executar o cmdlet acima, substitua <domain-object-identity> no seguinte script pelo seu valor e execute o script para atualizar a senha do objeto de domínio:

$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

Importante

Se você estava usando a criptografia RC4 anteriormente e atualiza a conta de armazenamento para usar o AES-256, deverá executar klist purge no cliente e, em seguida, remontar o compartilhamento de arquivos para obter novos tíquetes do Kerberos com o AES-256.

Depuração

Se necessário, você poderá executar o cmdlet Debug-AzStorageAccountAuth para realizar um conjunto de verificações básicas na configuração do AD com o usuário do AD conectado. Esse cmdlet é compatível com a versão do AzFilesHybrid v0.1.2+ e posteriores. Esse cmdlet só é aplicável à autenticação do AD DS. Ele não funciona nas contas de armazenamento habilitadas para Microsoft Entra Domain Services ou Microsoft Entra Kerberos. Para obter mais informações sobre as verificações executadas nesse cmdlet, confira Não é possível montar compartilhamentos de arquivos do Azure com as credenciais do AD.

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

Confirmar se o recurso está habilitado

Você pode verificar para confirmar se o Active Directory está habilitado na sua conta de armazenamento com o script a seguir:

# 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

Se for bem-sucedido, a saída deverá ter a seguinte aparência:

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

Próximas etapas

Agora você habilitou com êxito o AD DS na sua conta de armazenamento. Para usar o recurso, atribua permissões de nível de compartilhamento.