Cuando se trata de gestionar y manipular datos en Azure, el uso de una cuenta de almacenamiento es fundamental. Azure Storage ofrece una amplia gama de características y funcionalidades para almacenar diversos tipos de datos de manera segura y escalable. Uno de los aspectos importantes de la gestión de una cuenta de almacenamiento es el uso del User Delegate.
¿Qué es el User Delegate en una Storage Account?
El User Delegate es una característica que permite delegar temporalmente el acceso a una cuenta de almacenamiento de Azure sin la necesidad de compartir las claves de acceso de la cuenta. En lugar de eso, se genera un token de firma de acceso compartido (SAS) de manera dinámica, lo que proporciona un método más seguro para conceder acceso a recursos específicos dentro de la cuenta de almacenamiento.
Cuando se utiliza el User Delegate, se delega temporalmente la capacidad de generar un SAS a una identidad de servicio, como una aplicación o un usuario, a través de un proceso de autenticación seguro.
Crear un SAS Token User Delegate a través del Portal de Azure:
- Ve a Azure Portal y accede a tu cuenta.
- Busca y selecciona la cuenta de almacenamiento (Storage Account) que deseas utilizar.
- En el menú lateral izquierdo, busca y selecciona «Shared access signature».
- En la pestaña «Generate SAS and connection string», selecciona el tiempo de expiración y los permisos necesarios (lectura, escritura, etc.).
- Selecciona «User Delegation Key».
- Haz clic en el botón «Generate SAS and connection string» para generar el token SAS User Delegate.
- Copia y guarda el token SAS generado para su uso en tus aplicaciones o scripts.
Ejemplo Práctico 1: Transferencia de Archivos a un Blob utilizando User Delegate
Ahora, vamos a entender cómo se utiliza el User Delegate en un script PowerShell para transferir un archivo a un blob dentro de una cuenta de almacenamiento de Azure.
# Define las credenciales de la identidad de servicio (Service Principal)
$clientId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$clientSecret = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$tenantId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$subscriptionId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
# Autentica con el Service Principal
$secureClientSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $clientId, $secureClientSecret
Connect-AzAccount -ServicePrincipal -Credential $cred -Tenant $tenantId
Set-AzContext -Subscription $subscriptionId | Out-Null
# Define el nombre de la cuenta de almacenamiento de Azure
$storageAccountName = "Redorbita"
# Define el nombre del contenedor dentro de la cuenta de almacenamiento
$containerName = "backup"
# Define el nombre del blob dentro del contenedor
$blobName = "test00002.txt"
# Define el SAS manualmente
$sasToken = ""
# Crea el contexto de almacenamiento con el SAS proporcionado manualmente
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
# Ruta local del archivo que se transferirá al blob
$localFilePath = "C:\Users\rokitoh\test00001.txt"
# Sube el archivo al blob
Set-AzStorageBlobContent -File $localFilePath -Container $containerName -Blob $blobName -Context $storageContext
Write-Host "El archivo se ha transferido exitosamente al blob."
En este script:
- Se definen las credenciales del Service Principal, que incluyen el Client ID, el Client Secret, el Tenant ID y el Subscription ID.
- Se autentica con Azure utilizando estas credenciales.
- Se define el nombre de la cuenta de almacenamiento, el contenedor y el blob donde se va a cargar el archivo.
- Se define el SAS manualmente (este paso sería reemplazado por la generación dinámica del SAS utilizando User Delegate).
- Se crea el contexto de almacenamiento utilizando el SAS proporcionado.
- Se especifica la ruta del archivo local que se transferirá al blob.
- Finalmente, se carga el archivo al blob utilizando
Set-AzStorageBlobContent
.
Ejemplo Práctico 2: Transferencia de Archivos a un Blob utilizando User Delegate
Ahora, vamos a entender cómo se utiliza el User Delegate en un script PowerShell para transferir un archivo a un blob dentro de una cuenta de almacenamiento de Azure.
Este script se encarga de transferir un archivo a un blob dentro de una cuenta de almacenamiento de Azure utilizando una firma de acceso compartido (SAS) generada dinámicamente con un usuario delegado. Ahora, vamos a detallar cada parte del script:
# Define las credenciales de la identidad de servicio (Service Principal)
$clientId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$clientSecret = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$tenantId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$subscriptionId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
# Autentica con el Service Principal
$secureClientSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $clientId, $secureClientSecret
Connect-AzAccount -ServicePrincipal -Credential $cred -Tenant $tenantId -Subscription $subscriptionId | Out-Null
# Define los parámetros para generar la firma de acceso compartido (SAS) con el usuario delegado
$storageAccountName = "RedOrbita"
$containerName = "backup"
$blobName = "test00001.txt"
$ResourceGroup = "RG-RedOrbita"
$expiry = (Get-Date).AddHours(1) # SAS válida por 1 hora
# Ruta local del archivo que se transferirá al blob
$localFilePath = "C:\Users\jrodrigue319\test00001.txt"
# Genera la firma de acceso compartido (SAS) con el usuario delegado para el blob
$sasToken = New-AzStorageBlobSASToken -Context (New-AzStorageContext -StorageAccountName $storageAccountName) `
-Container $containerName -Blob $blobName -Permission racwd -ExpiryTime $expiry -FullUri
# Muestra la URL completa con la SAS para el blob
Write-Host "URL del blob con SAS: $sasToken"
# Sube el archivo al blob utilizando la URL de SAS generada
Invoke-WebRequest -Uri $sasToken -Method Put -Headers @{"x-ms-blob-type"="BlockBlob"} -InFile $localFilePath
Write-Host "El archivo se ha transferido exitosamente al blob."
- Definición de credenciales y autenticación:
- Se definen las credenciales necesarias para autenticarse en Azure utilizando un Service Principal.
- Luego, se utiliza
Connect-AzAccount
para autenticarse en Azure con las credenciales proporcionadas.
- Definición de parámetros de generación de SAS:
- Se definen los parámetros necesarios para generar la firma de acceso compartido (SAS) con el usuario delegado. Estos incluyen el nombre de la cuenta de almacenamiento, el nombre del contenedor, el nombre del blob y el tiempo de expiración de la SAS.
- Generación de la SAS:
- Utilizando
New-AzStorageBlobSASToken
, se genera la firma de acceso compartido (SAS) para el blob especificado.
- Utilizando
- Transferencia de archivo al blob:
- Se utiliza
Invoke-WebRequest
para realizar una solicitud HTTP PUT y subir el archivo al blob utilizando la URL generada de la SAS.
- Se utiliza
- Mensaje de confirmación:
- Al final del script, se muestra un mensaje indicando que el archivo se ha transferido exitosamente al blob.
Este ejemplo ilustra cómo utilizar el User Delegate para transferir archivos de manera segura a un blob dentro de una cuenta de almacenamiento de Azure, sin la necesidad de compartir las claves de acceso de la cuenta.
:wq!