Crea un SAS de delegación de usuario para un contenedor o blob con la CLI de Azure

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 una de estas dos formas:

  • 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).

Este artículo muestra cómo utilizar las credenciales de Microsoft Entra para crear un SAS de delegación de usuario para un contenedor o blob con la CLI de Azure.

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.

Caution

Cualquier cliente que posea una SAS válida puede acceder a los datos de su cuenta de almacenamiento tal como permite esa SAS. Es importante proteger un sistema SAS frente a un uso malintencionado o accidental. Usa discreción al distribuir un SAS y ten un plan para revocar un SAS comprometido. Para evitar un uso no intencionado, utiliza un SAS de delegación de usuario vinculado al usuario, que vincula el token SAS al usuario final previsto y no puede usarlo nadie más.

Para obtener más información sobre las firmas de acceso compartido, consulte Conceder acceso limitado a los recursos de Azure Storage usando firmas de acceso compartido (SAS).

Instalar la última versión de la CLI de Azure

Para usar la CLI de Azure y asegurar un SAS con credenciales de Microsoft Entra, primero asegúrate de haber instalado la última versión de CLI de Azure. Para más información sobre cómo instalar la CLI de Azure, consulte Instalar la CLI de Azure.

Para crear un SAS de delegación de usuario usando la CLI de Azure, asegúrate de haber instalado la versión 2.0.78 o posterior. Para comprobar la versión instalada, usa el az --version comando.

Inicio de sesión con credenciales de Microsoft Entra

Inicia sesión en la CLI de Azure con tus credenciales de Microsoft Entra. Para más información, consulte Inicio de sesión con la CLI de Azure.

Asignar permisos con Azure RBAC

Para crear un SAS de delegación de usuario desde Azure PowerShell, la cuenta de Microsoft Entra utilizada para iniciar sesión en CLI de Azure debe tener asignado un rol que incluya la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Este permiso permite que esa cuenta de Microsoft Entra solicite la clave de delegación de usuario. La clave de delegación de usuario se utiliza para firmar el SAS de delegación de usuario. El rol que proporciona la acción de Microsoft. Storage/storageAccounts/blobServices/generateUserDelegationKey debe asignarse a nivel de la cuenta de almacenamiento, el grupo de recursos o la suscripción.

Si no tienes permisos suficientes para asignar roles de Azure a un responsable de seguridad de Microsoft Entra, puede que necesites pedir al propietario de la cuenta o al administrador que asigne los permisos necesarios.

El siguiente ejemplo asigna el rol Storage Blob Data Contributor, que incluye la acción Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. El rol está definido a nivel de la cuenta de almacenamiento.

No olvide reemplazar los valores del marcador de posición entre corchetes angulares por sus propios valores:

az role assignment create \
    --role "Storage Blob Data Contributor" \
    --assignee <email> \
    --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, consulta roles integrados de Azure.

Utiliza las credenciales de Microsoft Entra para asegurar un SAS

Cuando creas un SAS de delegación de usuario con la CLI de Azure, la clave de delegación de usuario que se usa para firmar el SAS se crea implícitamente para ti. La hora de inicio y la fecha de caducidad que especifiques para el SAS también se usan como hora de inicio y expiración para la clave de delegación de usuario.

Como el intervalo máximo durante el cual la clave de delegación de usuario es válida es de 7 días desde la fecha de inicio, deberías especificar una fecha de caducidad para el SAS que sea dentro de los 7 días posteriores a la hora de inicio. El SAS es inválido después de que expira la clave de delegación de usuario, por lo que un SAS con un tiempo de caducidad superior a 7 días seguirá siendo válido solo durante 7 días.

Al crear un SAS de delegación de usuario, --auth-mode login y --as-user parameters son obligatorios. Especifica el inicio de sesión para el --auth-mode parámetro para que las solicitudes hechas a Azure Storage estén autorizadas con tus credenciales de Microsoft Entra. Especifica el --as-user parámetro para indicar que el SAS devuelto debe ser un SAS de delegación de usuario.

Crea un SAS de delegación de usuario para un contenedor

Para crear un SAS de delegación de usuario para un contenedor con la CLI de Azure, ejecuta el comando az storage container generate-sas.

Los permisos soportados para un SAS de delegación de usuario en un contenedor incluyen Añadir, Crear, Eliminar, Listar, Leer y Escribir. Los permisos pueden especificarse de forma individual o combinada. Para más información sobre estos permisos, véase Crear una delegación de usuario SAS.

El siguiente ejemplo devuelve un token SAS de delegación de usuario para un contenedor. No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios valores:

az storage container generate-sas \
    --account-name <storage-account> \
    --name <container> \
    --permissions acdlrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user

El token SAS de delegación de usuario que devuelve será similar a:

se=2019-07-27&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sktid=<sktid>&skt=2019-07-26T18%3A01%3A22Z&ske=2019-07-27T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

Nota:

El token SAS devuelto por Blob Storage no incluye el carácter delimitador ('?') para la cadena de consulta de URL. Si estás añadiendo el token SAS a una URL de recurso, recuerda también añadir el carácter delimitador.

Crea un SAS de delegación de usuario para un blob

Para crear un SAS de delegación de usuario para un blob mediante la CLI de Azure, ejecuta el comando az storage blob generate-sas.

Los permisos admitidos para un SAS de delegación de usuario en un blob incluyen Agregar, Crear, Eliminar, Leer y Escribir. Los permisos pueden especificarse de forma individual o combinada. Para más información sobre estos permisos, véase Crear una delegación de usuario SAS.

La siguiente sintaxis devuelve una SAS de delegación de usuario para un blob. El ejemplo especifica el --full-uri parámetro, que devuelve el URI del blob con el token SAS añadido. No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios valores:

az storage blob generate-sas \
    --account-name <storage-account> \
    --container-name <container> \
    --name <blob> \
    --permissions acdrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user \
    --full-uri

El URI SAS de delegación de usuario que se devuelve será similar a:

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?se=2019-08-03&sp=rw&sv=2018-11-09&sr=b&skoid=<skoid>&sktid=<sktid>&skt=2019-08-02T2
2%3A32%3A01Z&ske=2019-08-03T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

Nota:

El token SAS devuelto por CLI de Azure no incluye el carácter delimitador ('?') para la cadena de consulta de URL. Si va a anexar el token de SAS a una dirección URL de recurso, recuerde anexar el carácter delimitador a la dirección URL del recurso antes de anexar el token de SAS.

Un SAS de delegación de usuarios no soporta definir permisos con una política de acceso almacenada.

Revocar una SAS de delegación de usuarios

Para revocar un SAS de delegación de usuario desde la CLI de Azure, ejecuta el comando az storage account revoke-delegation-keys. Este comando revoca todas las claves de delegación de usuario asociadas a la cuenta de almacenamiento especificada. Cualquier firma de acceso compartido asociada a esas claves queda invalidada.

No olvide reemplazar los valores del marcador de posición entre corchetes angulares por sus propios valores:

az storage account revoke-delegation-keys \
    --name <storage-account> \
    --resource-group <resource-group>

Importante

Tanto la clave de delegación de usuario como las asignaciones de roles de Azure están almacenadas en caché por Azure Storage, por lo que puede haber un retraso entre el momento en que inicias el proceso de revocación y cuando un SAS de delegación de usuario existente se vuelve inválido.

Pasos siguientes