Habilitación de la autenticación de AD DS para recursos compartidos de archivos de Azure

En este artículo se describe el proceso para habilitar la autenticación de Active Directory Domain Services (AD DS) en la cuenta de almacenamiento con el fin de usar credenciales de Active Directory local (AD) para autenticarse en recursos compartidos de archivos de Azure.

Importante

Antes de habilitar la autenticación de AD DS, asegúrese de comprender los escenarios admitidos y los requisitos del artículo de información general y de completar los requisitos previos necesarios. Si el entorno de Active Directory abarca varios bosques, consulte Uso de Azure Files con varios bosques de Active Directory.

Para habilitar la autenticación de AD DS en SMB para los recursos compartidos de archivos de Azure, debe registrar la cuenta de almacenamiento de Azure en AD DS local y, después, establecer las propiedades de dominio necesarias en la cuenta de almacenamiento. Para registrar la cuenta de almacenamiento con AD DS, cree una cuenta de equipo (o una cuenta de inicio de sesión en el servicio) que la represente en AD DS. Este proceso se puede considerar como si se tratara de la creación de una cuenta que representa un servidor local de archivos de Windows en AD DS. Cuando la característica está habilitada en la cuenta de almacenamiento, se aplica a todos los recursos compartidos de archivos nuevos y existentes de la cuenta.

Se aplica a

Tipo de recurso compartido de archivos SMB NFS
Recursos compartidos de archivos Estándar (GPv2), LRS/ZRS Sí No
Recursos compartidos de archivos Estándar (GPv2), GRS/GZRS Sí No
Recursos compartidos de archivos Premium (FileStorage), LRS/ZRS Sí No

El módulo AzFilesHybrid de PowerShell proporciona cmdlets para implementar y configurar Azure Files. Incluye cmdlets para unir cuentas de almacenamiento de dominio a Active Directory local y configurar los servidores DNS. Los cmdlets realizan las modificaciones necesarias y habilitan la característica automáticamente. Puesto que algunas partes del cmdlet interactúan con la instancia local de AD DS, se explica lo que hacen los cmdlets, para que pueda determinar si los cambios se alinean con las directivas de cumplimiento y seguridad, y asegurarse de que tiene los permisos adecuados para ejecutar los cmdlets. Aunque se recomienda usar el módulo AzFilesHybrid, si no puede hacerlo, se proporcionan pasos manuales.

Prerrequisitos

Descarga del módulo AzFilesHybrid

  • Descargue y descomprima la última versión del módulo AzFilesHybrid. Tenga en cuenta que el cifrado Kerberos AES-256 se admite en la versión 0.2.2 y posteriores y es el método de cifrado predeterminado a partir de la versión 0.2.5. Si ha habilitado la característica con una versión de AzFilesHybrid anterior a la 0.2.2 y quiere actualizarla para que admita el cifrado Kerberos AES-256, consulte Solución de problemas de autenticación de Azure Files.
  • Instale y ejecute el módulo en un dispositivo que esté unido a un dominio de AD DS local con credenciales de AD DS que tengan permisos para crear una cuenta de equipo o una cuenta de inicio de sesión de servicio en la instancia de AD de destino (como administrador de dominio).

Ejecución de Join-AzStorageAccount

El cmdlet Join-AzStorageAccount realiza la acción equivalente a la unión a un dominio sin conexión en nombre de la cuenta de almacenamiento especificada. El script siguiente usa este cmdlet para crear una cuenta de equipo en el dominio de AD. Si, por cualquier motivo, no puede usar una cuenta de equipo, puede modificar el script para crear una cuenta de inicio de sesión de servicio en su lugar. El uso del cifrado AES-256 con cuentas de inicio de sesión de servicio se admite a partir de la versión 0.2.5 de AzFilesHybrid.

La cuenta de AD DS que crea el cmdlet representa la cuenta de almacenamiento. Si la cuenta de AD DS se crea en una unidad organizativa (OU) que aplica la expiración de contraseñas, debe actualizar la contraseña antes de su vigencia máxima. Si no actualiza la contraseña de la cuenta antes de esa vigencia, se producirán errores de autenticación al acceder a los recursos compartidos de archivos de Azure. Para saber cómo actualizar la contraseña, consulte Actualización de la contraseña de la cuenta de AD DS.

Importante

El cmdlet Join-AzStorageAccount creará una cuenta de AD para representar la cuenta de almacenamiento (recurso compartido de archivos) en AD. Puede optar por registrarla como una cuenta de equipo o una cuenta de inicio de sesión de servicio; consulte Preguntas más frecuentes para obtener más información. Las contraseñas de la cuenta de inicio de sesión de servicio pueden expirar en AD si tienen establecida una antigüedad de expiración de contraseña predeterminada en el dominio o la unidad organizativa de AD. Dado que los cambios de contraseña de la cuenta de equipo los controla el equipo cliente y no AD, no expiran en AD, aunque los equipos cliente cambian sus contraseñas de manera predeterminada cada 30 días. Para ambos tipos de cuenta, se recomienda comprobar cuál es el tiempo de expiración de la contraseña configurado y planificar la actualización de la contraseña de la identidad de la cuenta de almacenamiento de la cuenta de AD antes de la vigencia máxima de la contraseña. Puede considerar la posibilidad de crear una unidad organizativa de AD en AD y deshabilitar la directiva de expiración de contraseñas en las cuentas de equipo o las cuentas de inicio de sesión de servicio, según corresponda.

Debe ejecutar el script siguiente en PowerShell 5.1 en un dispositivo unido a un dominio de AD DS local mediante una credencial de AD DS local sincronizada con Azure AD. Para seguir el principio de privilegios mínimos, la credencial de AD DS local debe tener los siguientes roles de Azure:

  • Lector en el grupo de recursos donde se encuentra la cuenta de almacenamiento de destino.
  • Colaborador en la cuenta de almacenamiento que se va a unir a AD DS.

Nota:

Si la cuenta usada para unirse a la cuenta de almacenamiento en AD DS es un Propietario o Colaborador en la suscripción de Azure donde se encuentran los recursos de destino, entonces esa cuenta ya está habilitada para realizar la unión y no se requieren más asignaciones.

La credencial de AD DS también debe tener permisos para crear una cuenta de equipo o una cuenta de inicio de sesión de servicio en la instancia de AD de destino. Reemplace los valores de marcador de posición por los suyos propios antes de ejecutar el 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 with an Azure AD 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. 
# 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>"
# Specify the encryption algorithm used for Kerberos authentication. Using AES256 is recommended.
$EncryptionType = "<AES256|RC4|AES256,RC4>"

# 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 `
        -EncryptionType $EncryptionType

# 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

Opción 2: Realización manual de las acciones de habilitación

La mayoría de los clientes deben elegir la Opción uno que aparece arriba y usar el módulo de PowerShell AzFilesHybrid para habilitar la autenticación de AD DS con Azure Files. Sin embargo, si prefiere ejecutar los pasos manualmente mediante PowerShell de Active Directory, use los que se describen a continuación.

Importante

Si ya ha ejecutado correctamente el script Join-AzStorageAccount anterior, vaya directamente a la sección Confirmación de que la característica está habilitada. No tendrá que realizar los siguientes pasos manuales.

Comprobación del entorno

En primer lugar, compruebe el estado del entorno.

  • Compruebe si Active Directory PowerShell está instalado y si el shell se ejecuta con privilegios de administrador.
  • Asegúrese de que está instalado el módulo Az.Storage y, si no lo está, instálelo. Necesitará al menos la versión 2.0.
  • Después de completar esas comprobaciones, compruebe la instancia de AD DS para ver si hay una cuenta de equipo (predeterminada) o una cuenta de inicio de sesión en el servicio que ya se haya creado con SPN/UPN, como "cifs/nombre_de_la_cuenta_de_almacenamiento.file.core.windows.net". Si la cuenta no existe, cree una como se describe en la sección siguiente.

Importante

Los cmdlets de PowerShell de Windows Server Active Directory de esta sección deben ejecutarse en Windows PowerShell 5.1. PowerShell 7.x y Azure Cloud Shell no funcionarán en este escenario.

Creación de una identidad que represente a la cuenta de almacenamiento de AD manualmente

Para crear esta cuenta manualmente, primero cree una nueva clave Kerberos para la cuenta de almacenamiento y obtenga la clave de acceso mediante los cmdlets de PowerShell siguientes. Esta clave solo se usa durante la instalación. No se puede usar para las operaciones de control o de plano de datos en la cuenta de almacenamiento.

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

Los cmdlets anteriores deben devolver el valor de clave. Una vez que tenga la clave kerb1, cree una cuenta de servicio o una cuenta de equipo en AD en la unidad organizativa y use la clave como contraseña para la identidad de AD.

  1. Establezca el SPN en cifs/nombre_de_la_cuenta_de_almacenamiento.file.core.windows.net en la GUI de AD o mediante la ejecución del comando Setspn desde la línea de comandos de Windows como administrador (recuerde reemplazar el texto de ejemplo por el nombre de la cuenta de almacenamiento y <ADAccountName> por el nombre de la cuenta de AD):

    Setspn -S cifs/your-storage-account-name-here.file.core.windows.net <ADAccountName>
    
  2. Use PowerShell para establecer la contraseña de la cuenta de AD en el valor de la clave kerb1 (debe tener instalados los cmdlets de PowerShell de AD y ejecutar el cmdlet en PowerShell 5.1 con privilegios elevados):

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

Si la unidad organizativa impone la expiración de la contraseña, debe actualizar la contraseña antes de su vigencia máxima para evitar errores de autenticación al acceder a recursos compartidos de archivos de Azure. Vea Actualización de la contraseña de la identidad de la cuenta de almacenamiento en AD para obtener más información.

Mantenga el SID de la identidad recién creada; lo necesitará en el siguiente paso. No es preciso sincronizar la identidad que ha creado y que representa la cuenta de almacenamiento con Azure AD.

Habilitación de la característica en la cuenta de almacenamiento

Modifique el comando siguiente para incluir detalles de configuración para las propiedades de dominio en el comando siguiente y, a continuación, ejecútelo para habilitar la característica. El SID de la cuenta de almacenamiento necesario en el siguiente comando es el de la identidad que creó en su AD DS en la sección anterior. Asegúrese de proporcionar la propiedad ActiveDirectorySamAccountName sin el signo "$" final.

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

Para habilitar el cifrado AES-256, siga los pasos de esta sección. Si piensa usar el cifrado RC4, puede saltarse esta sección.

Importante

Para habilitar el cifrado AES-256, el objeto de dominio que representa la cuenta de almacenamiento debe ser una cuenta de equipo (predeterminada) o una cuenta de inicio de sesión de servicio en el dominio de AD local. Si el objeto de dominio no cumple este requisito, elimínelo y cree un nuevo objeto de dominio que lo haga.

El cmdlet que ejecutará para configurar la compatibilidad con AES-256 depende de si el objeto de dominio que representa la cuenta de almacenamiento es una cuenta de equipo o una cuenta de inicio de sesión de servicio (cuenta de usuario). En cualquier caso, debe tener instalados los cmdlets de PowerShell de AD y ejecutar el cmdlet en PowerShell 5.1 con privilegios elevados.

Para habilitar el cifrado AES-256 en una cuenta de equipo, ejecute el siguiente comando. Reemplace <domain-object-identity> y <domain-name> con sus valores.

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

Para habilitar el cifrado AES-256 en una cuenta de inicio de sesión de servicio, ejecute el siguiente comando. Reemplace <domain-object-identity> y <domain-name> con sus valores.

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

Después de ejecutar el comando anterior, reemplace <domain-object-identity> en el siguiente script por su valor y ejecute el script para actualizar la contraseña del objeto de dominio:

$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

Depuración

Si hace falta, puede ejecutar el cmdlet Debug-AzStorageAccountAuth para realizar un conjunto de comprobaciones básicas en la configuración de AD con el usuario de AD con el que ha iniciado sesión. Este cmdlet se admite en AzFilesHybrid v0.1.2+ y versiones posteriores. Para más detalles sobre las comprobaciones realizadas en este cmdlet, consulte No se puede montar recursos compartidos de archivos Azure con las credenciales de AD.

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

Confirmación de que la característica está habilitada

Puede comprobar si Active Directory está habilitado en la cuenta de almacenamiento con el siguiente 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

En caso afirmativo, la salida debería ser similar a esta:

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

Pasos siguientes

Ahora, ya ha habilitado correctamente AD DS en la cuenta de almacenamiento. Para usar la característica, debe asignar permisos de nivel de recurso compartido.