Creación de una SAS de delegación de usuarios para un contenedor o blob con PowerShell
Una firma de acceso compartido (SAS) le permite conceder acceso limitado a los contenedores y blobs de la cuenta de almacenamiento. Cuando crea una SAS, especifica sus restricciones, incluidos los recursos de Azure Storage a los que puede acceder un cliente, los permisos que tiene en esos recursos y el tiempo durante el cual la SAS es válida.
Cada SAS se firma con una clave. Puede firmar una SAS de dos maneras:
- Con una clave creada con las credenciales de Microsoft Entra. Una SAS firmada con credenciales de Microsoft Entra es una SAS de delegación de usuario. Un cliente que cree una SAS de delegación de usuarios debe tener asignado un rol RBAC de Azure que incluya la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Para obtener más información, vea Creación de una SAS de delegación de usuarios.
- Con la clave de la cuenta de almacenamiento. Tanto una SAS de servicio como una SAS de cuenta se firman con la clave de la cuenta de almacenamiento. El cliente que cree una SAS de servicio debe tener acceso directo a la clave de cuenta o asignársele el permiso Microsoft.Storage/storageAccounts/listkeys/action. Para obtener más información, vea Creación de una SAS de servicio o Creación de una SAS de cuenta.
Nota
Una SAS de delegación de usuario ofrece seguridad superior para una SAS firmada con la clave de la cuenta de almacenamiento. Microsoft recomienda el uso de una SAS de delegación de usuario siempre que sea posible. Para más información, consulte Concesión de acceso limitado a datos con firmas de acceso compartido (SAS).
En este artículo se muestra cómo usar las credenciales de Microsoft Entra para crear una SAS de delegación de usuarios para un contenedor o blob con Azure PowerShell.
Acerca de la SAS de delegación de usuarios
Un token de SAS para el acceso a un contenedor o blob se puede proteger mediante credenciales de Microsoft Entra o una clave de cuenta. Una SAS protegida con credenciales de Microsoft Entra se denomina SAS de delegación de usuarios, porque el token de OAuth 2.0 usado para firmar la SAS se solicita en nombre del usuario.
Microsoft recomienda usar credenciales de Microsoft Entra cuando sea posible como procedimiento recomendado de seguridad, en lugar de usar la clave de cuenta, que se puede poner en peligro más fácilmente. Cuando el diseño de la aplicación requiera firmas de acceso compartido, use credenciales de Microsoft Entra para crear una SAS de delegación de usuarios de cara a una seguridad superior. Para más información sobre la SAS de delegación de usuarios, consulte Creación de una SAS de delegación de usuario.
Precaución
Cualquier cliente que posea una SAS válida puede acceder a los datos de la cuenta de almacenamiento según lo permitido por esa SAS. Es importante proteger una SAS de uso malintencionado o no intencionado. Sea cauto al distribuir una SAS y tenga un plan para revocar una SAS en peligro.
Para obtener más información sobre las firmas de acceso compartido, consulte Otorgar acceso limitado a recursos de Azure Storage con firmas de acceso compartido (SAS).
Instalación del módulo de PowerShell
Para crear una SAS de delegación de usuarios con PowerShell, instale la versión 1.10.0 o posterior del módulo Az.Storage. Siga estos pasos para instalar la versión más reciente del módulo:
Desinstale las instalaciones anteriores de Azure PowerShell:
- Quite cualquier instalación anterior de Azure PowerShell desde Windows usando el ajuste Aplicaciones y características en Configuración.
- Quite todos los módulos de Azure desde
%Program Files%\WindowsPowerShell\Modules
.
Asegúrese de tener instalada la versión más reciente de PowerShellGet. Abra una ventana de Windows PowerShell y ejecute el siguiente comando para instalar la versión más reciente:
Install-Module PowerShellGet -Repository PSGallery -Force
Cierre y vuelva a abrir la ventana de PowerShell después de instalar PowerShellGet.
Instale la versión más reciente de Azure PowerShell:
Install-Module Az -Repository PSGallery -AllowClobber
Asegúrese de que tiene instalada la versión 3.2.0 o posterior de Azure PowerShell. Ejecute el siguiente comando para instalar la versión más reciente del módulo de PowerShell para Azure Storage.
Install-Module -Name Az.Storage -Repository PSGallery -Force
Cierre y vuelva a abrir la ventana de PowerShell.
Para comprobar qué versión del módulo Az.Storage está instalada, ejecute el siguiente comando:
Get-Module -ListAvailable -Name Az.Storage -Refresh
Para más información sobre cómo instalar Azure PowerShell, consulte Instalación de Azure PowerShell con PowerShellGet.
Inicio de sesión en Azure PowerShell con Microsoft Entra ID
Llame al comando Connect-AzAccount para iniciar sesión con la cuenta de Microsoft Entra:
Connect-AzAccount
Para obtener más información sobre cómo iniciar sesión con PowerShell, consulte Inicio de sesión con Azure PowerShell.
Asignación de permisos con Azure RBAC
Para crear una SAS de delegación de usuarios desde Azure PowerShell, se debe asignar a la cuenta de Microsoft Entra utilizada para iniciar sesión en PowerShell un rol que incluya la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Gracias a este permiso, la cuenta de Microsoft Entra puede solicitar la clave de delegación de usuarios. La clave de delegación de usuarios se usa para firmar la SAS de delegación de los usuarios. El rol que proporciona la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey debe asignarse en el nivel de la cuenta de almacenamiento, el grupo de recursos o la suscripción. Para obtener más información sobre los permisos de Azure RBAC para crear una SAS de delegación de usuarios, consulte la sección Asignación de permisos con Azure RBAC de Creación de una SAS de delegación de usuarios.
Si no tiene permisos suficientes para asignar roles de Azure a la entidad de seguridad de Microsoft Entra, puede que tenga que pedir al propietario o administrador de la cuenta que asigne los permisos necesarios.
En el ejemplo siguiente se asigna el rol de colaborador de datos de Storage Blob, que incluye la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. El ámbito del rol se encuentra en el nivel de la cuenta de almacenamiento.
No olvide reemplazar los valores del marcador de posición entre corchetes angulares por sus propios valores:
New-AzRoleAssignment -SignInName <email> `
-RoleDefinitionName "Storage Blob Data Contributor" `
-Scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"
Para obtener más información sobre los roles integrados que incluyen la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey, consulte los roles integrados de Azure.
Uso de credenciales de Microsoft Entra para proteger una SAS
Cuando se crea una SAS de delegación de usuarios con Azure PowerShell, la clave de delegación de usuarios que se usa para firmar la SAS se crea de forma implícita. La hora de inicio y la hora de expiración que especifique para la SAS también se usan como hora de inicio y hora de expiración para la clave de delegación de usuarios.
Dado que el intervalo máximo de validez de la clave de delegación de usuarios es de siete días a partir de la fecha de inicio, debe especificar una hora de expiración para la SAS que está en el plazo de siete días a partir de la hora de inicio. La SAS no es válida después de que expire la clave de delegación de usuarios, por lo que una SAS con un tiempo de expiración de más de siete días seguirá siendo válida solo durante siete días.
Para crear una SAS de delegación de usuarios para un contenedor o blob con Azure PowerShell, primero debe crear un nuevo objeto de contexto de Azure Storage especificando el parámetro -UseConnectedAccount
. El parámetro -UseConnectedAccount
especifica que el comando crea el objeto de contexto en la cuenta Microsoft Entra con la que ha iniciado sesión.
No olvide reemplazar los valores del marcador de posición entre corchetes angulares por sus propios valores:
$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount
Creación de una SAS de delegación de usuarios para un contenedor
Para devolver un token de SAS de delegación de usuarios para un contenedor, llame al comando New-AzStorageContainerSASToken y pase el objeto de contexto de Azure Storage que creó anteriormente.
En el ejemplo siguiente se devuelve un token de SAS de delegación de usuarios para un contenedor. No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios valores:
New-AzStorageContainerSASToken -Context $ctx `
-Name <container> `
-Permission racwdl `
-ExpiryTime <date-time>
El token de SAS de delegación de usuarios devuelto será similar al siguiente:
?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl
Creación de una SAS de delegación de usuarios para un blob
Para devolver un token de SAS de delegación de usuarios para un blob, llame al comando New-AzStorageBlobSASToken y pase el objeto de contexto de Azure Storage que creó anteriormente.
La siguiente sintaxis devuelve una SAS de delegación de usuarios para un blob. En el ejemplo se especifica el parámetro -FullUri
, que devuelve el URI del blob con el token de SAS anexado. No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios valores:
New-AzStorageBlobSASToken -Context $ctx `
-Container <container> `
-Blob <blob> `
-Permission racwd `
-ExpiryTime <date-time>
-FullUri
El URI del token de SAS de delegación de usuarios devuelto será similar al siguiente:
https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd
Nota:
Una SAS de delegación de usuarios no admite la definición de permisos con una directiva de acceso almacenada.
Revocación de una SAS de delegación de usuarios
Para revocar una SAS de delegación de usuarios de Azure PowerShell, llame al comando Revoke-AzStorageAccountUserDelegationKeys. Este comando revoca todas las claves de delegación de usuarios asociadas a la cuenta de almacenamiento especificada. Se invalidan todas las firmas de acceso compartido asociadas a esas claves.
No olvide reemplazar los valores del marcador de posición entre corchetes angulares por sus propios valores:
Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account>
Importante
La clave de delegación de usuario y las asignaciones de roles de Azure se almacenan en la caché de Azure Storage, por lo que puede haber un retraso entre el momento en que se inicia el proceso de revocación y el momento en que una SAS de delegación de usuario existente deja de ser válida.