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

Este artigo descreve o processo para habilitar a autenticação dos Serviços de Domínio Ative Directory (AD DS) em sua conta de armazenamento para usar credenciais do Ative Directory (AD) local para autenticação em compartilhamentos de arquivos do Azure.

Importante

Antes de habilitar a autenticação do AD DS, entenda os cenários e requisitos suportados no artigo de visão geral e conclua os pré-requisitos necessários. Se o seu ambiente do Ative Directory abranger várias florestas, consulte Usar arquivos do Azure com várias florestas do Ative Directory.

Para habilitar a autenticação do AD DS no SMB para compartilhamentos de arquivos do Azure, você precisa registrar sua conta de armazenamento do Azure com o AD DS local e, em seguida, definir as propriedades de domínio necessárias na conta de armazenamento. Para registar a sua conta de armazenamento no AD DS, crie uma conta de computador (ou uma conta de início de sessão de serviço) que a represente no AD DS. Pense nesse processo como se fosse como criar uma conta representando um servidor de arquivos do Windows local no 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 partilhas de ficheiros SMB NFS
Partilhas de ficheiros Standard (GPv2), LRS/ZRS Yes No
Partilhas de ficheiros Standard (GPv2), GRS/GZRS Yes No
Partilhas de ficheiros Premium (FileStorage), LRS/ZRS Yes No

O módulo AzFilesHybrid PowerShell fornece cmdlets para implantar e configurar Arquivos do Azure. Inclui cmdlets para associar contas de armazenamento de domínio ao Ative Directory local e configurar os servidores DNS. Os cmdlets fazem as modificações necessárias e habilitam o recurso para você. Como algumas partes dos cmdlets interagem com o 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 garantir que você tenha as permissões adequadas para executar os cmdlets. Embora recomendemos o uso do módulo AzFilesHybrid, se você não conseguir fazê-lo, fornecemos etapas manuais.

Importante

A encriptação Kerberos AES-256 é agora o único método de encriptação suportado pelo módulo AzFilesHybrid. Se preferir usar a encriptação RC4, consulte Opção dois: Executar manualmente as ações de ativação. Se você habilitou anteriormente o recurso com uma versão antiga do AzFilesHybrid (abaixo da v0.2.2) que usava RC4 como o método de criptografia padrão e deseja atualizar para oferecer suporte a AES-256, consulte solucionar problemas de autenticação SMB dos Arquivos do Azure.

Pré-requisitos

  • Se não tiver o .NET Framework 4.7.2 ou superior instalado, instale-o agora. É necessário que o módulo AzFilesHybrid seja importado com êxito.
  • Verifique se você tem o Azure PowerShell (módulo Az) e o Az.Storage instalados. Você deve ter pelo menos Az.PowerShell 2.8.0+ e Az.Storage 4.3.0+ para usar AzFilesHybrid.
  • Instale o módulo PowerShell do Ative Directory.

Baixar AzFilesHybrid module

Transfira e deszipe a versão mais recente do módulo AzFilesHybrid.

Executar Join-AzStorageAccount

O Join-AzStorageAccount cmdlet executa o equivalente a uma associação de domínio offline em nome da conta de armazenamento especificada. O script abaixo usa esse cmdlet para criar uma conta de computador no 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. O uso da criptografia AES-256 com contas de logon de serviço é suportado a partir da versão 0.2.5 do AzFilesHybrid.

A conta do AD DS criada pelo cmdlet representa a conta de armazenamento. Se a conta do AD DS for criada em uma unidade organizacional (UO) que impõe a expiração da senha, você deverá atualizá-la antes da idade 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, consulte Atualizar senha da conta do AD DS.

Importante

O Join-AzStorageAccount cmdlet 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, consulte Perguntas frequentes para obter detalhes. As palavras-passe da conta de início de sessão do serviço podem expirar no AD se tiverem uma idade de expiração de palavra-passe predefinida no domínio ou UO do AD. Como as alterações de senha da conta de computador são conduzidas pela máquina cliente e não pelo AD, elas não expiram no AD, embora os computadores clientes alterem suas senhas por padrão a cada 30 dias. Para ambos os tipos de conta, recomendamos que verifique a idade de expiração da palavra-passe configurada e planeie atualizar a palavra-passe da identidade da conta de armazenamento da conta AD antes da idade máxima da palavra-passe. Você pode considerar a criação de uma nova Unidade Organizacional do AD no AD e desabilitar a diretiva de expiração de senha em contas de computador ou contas de logon de serviço de acordo.

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

  • Leitor no grupo de recursos onde a conta de armazenamento de destino está localizada.
  • Colaborador na conta de armazenamento a ser associada ao 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 onde os recursos de destino estão localizados, essa conta já está habilitada para executar a associação e nenhuma atribuição adicional é necessária.

A credencial do AD DS também deve ter permissões para criar uma conta de computador ou uma conta de logon de serviço no AD de destino. Substitua os valores de espaço reservado pelos seus próprios 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 ativação

A maioria dos clientes deve escolher a Opção um acima e usar o módulo AzFilesHybrid PowerShell 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 Ative Directory, as etapas são descritas aqui.

Importante

Se você já executou o script acima com êxito, vá diretamente para a seção Confirmar se o Join-AzStorageAccount recurso está habilitado. Não é necessário executar as seguintes etapas manuais.

Verifique o ambiente

Primeiro, verifique o estado do seu ambiente.

  • Verifique se o PowerShell do Ative Directory está instalado e se o shell está sendo executado com privilégios de administrador.
  • Certifique-se de que 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 AD DS para ver se há uma conta de computador (padrão) ou uma conta de logon de serviço que já tenha sido 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 Ative Directory do Windows Server nesta seção devem ser executados no Windows PowerShell 5.1. O PowerShell 7.x e o Azure Cloud Shell não funcionarão neste cenário.

Crie uma identidade que represente a conta de armazenamento no 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. Ele não pode ser usado para qualquer controle ou operações de 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. Depois de ter a chave kerb1, crie uma conta de computador ou de serviço no AD sob sua UO e use a chave como a senha para a identidade do AD.

  1. Defina o SPN como cifs/your-storage-account-name-here.file.core.windows.net na GUI do AD ou executando o comando a partir da linha de comando do Windows como administrador (lembre-se de substituir o Setspn texto de exemplo pelo nome da conta de armazenamento e <ADAccountName> pelo nome da conta do AD).

    Setspn -S cifs/your-storage-account-name-here.file.core.windows.net <ADAccountName>
    
  2. Se você tiver uma conta de usuário, modifique o UPN para corresponder ao SPN do objeto AD (você deve ter 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 com o valor da chave kerb1.

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

Se sua UO impor a expiração da senha, você deverá atualizá-la antes da idade máxima da senha para evitar falhas de autenticação ao acessar compartilhamentos de arquivos do Azure. Consulte Atualizar a palavra-passe da identidade da sua conta de armazenamento no AD para obter detalhes.

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

Ativar o recurso em sua conta de armazenamento

Modifique o comando a seguir para incluir detalhes de configuração para as propriedades do domínio no comando a seguir e execute-o para habilitar o recurso. O SID da conta de armazenamento necessário no comando a seguir é o SID da identidade criada no 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'>"

Para ativar a encriptação AES-256, siga os passos nesta secção. Se planeia utilizar encriptação RC4, ignore esta secção.

Importante

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

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

Para ativar a encriptação AES-256 numa conta de computador, execute o seguinte comando. Substitua <domain-object-identity> e <domain-name> pelos 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 seguinte comando. Substitua <domain-object-identity> e <domain-name> pelos seus valores.

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

Depois de executar o cmdlet acima, substitua <domain-object-identity> o seguinte script pelo seu valor e, em seguida, 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 anteriormente a criptografia RC4 e atualizar a conta de armazenamento para usar AES-256, você deve executar klist purge no cliente e, em seguida, remontar o compartilhamento de arquivos para obter novos tíquetes Kerberos com AES-256.

Depuração

Se necessário, você pode executar o cmdlet para realizar um conjunto de verificações básicas na configuração do AD com o Debug-AzStorageAccountAuth usuário do AD conectado. Este cmdlet é suportado na versão AzFilesHybrid v0.1.2+ e superior. Este cmdlet só é aplicável para autenticação do AD DS. Ele não funciona para os Serviços de Domínio Microsoft Entra ou contas de armazenamento habilitadas para Microsoft Entra Kerberos. Para obter mais informações sobre as verificações realizadas neste cmdlet, consulte Não é possível montar compartilhamentos de arquivos do Azure com credenciais do AD.

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

Confirme se o recurso está ativado

Você pode verificar se o Ative Directory está habilitado em sua conta de armazenamento com o seguinte script:

# 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-sucedida, a saída deve ter esta aparência:

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

Próximos passos

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