Creación de una SAS de delegación de usuarios 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 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 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.

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

Instalar la versión más reciente de la CLI de Azure

Para usar la CLI de Azure para asegurar una SAS con credenciales de Microsoft Entra, primero asegúrese de haber instalado la última versión de la CLI de Azure. Para obtener más información sobre cómo instalar la CLI de Azure, consulte Instalación de la CLI de Azure.

Para crear una SAS de delegación de usuarios mediante la CLI de Azure, asegúrese de que ha instalado la versión 2.0.78 o posterior. Para comprobar la versión instalada, use el comando az --version.

Inicio de sesión con credenciales de Microsoft Entra

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

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 la CLI de Azure 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.

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:

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, 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 la CLI de Azure, 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.

Al crear una SAS de delegación de usuarios, se requieren --auth-mode login y --as-user parameters. Especifique un inicio de sesión para el parámetro --auth-mode y que así las solicitudes realizadas a Azure Storage estén autorizadas con sus credenciales de Microsoft Entra. Especifique el parámetro --as-user para indicar que la SAS devuelta debe ser una SAS de delegación de usuarios.

Creación de una SAS de delegación de usuarios para un contenedor

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

Los permisos admitidos para una SAS de delegación de usuarios en un contenedor incluyen Agregar, Crear, Eliminar, Enumerar, Leer y Escribir. Los permisos se pueden especificar individualmente o combinados. Para obtener más información sobre estos permisos, consulte Crear una SAS de delegación de usuarios.

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:

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

El token de SAS de delegación de usuarios devuelto será similar al siguiente:

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 de SAS que ha devuelto Blob Storage no incluye el carácter delimitador ("?") para la cadena de consulta de dirección URL. Si va a anexar el token de SAS a una dirección URL de recurso, recuerde también anexar el carácter delimitador.

Creación de una SAS de delegación de usuarios para un blob

Para crear una SAS de delegación de usuario para un blob con la CLI de Azure, llame al comando az storage blob generate-sas.

Los permisos admitidos para una SAS de delegación de usuarios en un blob incluyen Agregar, Crear, Eliminar, Leer y Escribir. Los permisos se pueden especificar individualmente o combinados. Para obtener más información sobre estos permisos, consulte Crear una SAS de delegación de usuarios.

La siguiente sintaxis devuelve una SAS de delegación de usuarios para un blob. En el ejemplo se especifica el parámetro --full-uri, 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:

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 del token de SAS de delegación de usuarios devuelto será similar al siguiente:

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 de SAS que ha devuelto la CLI de Azure no incluye el carácter delimitador ("?") para la cadena de consulta de dirección 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.

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 usuario desde la CLI de Azure, llame al comando az storage account revoke-delegation-keys. 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:

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

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.

Pasos siguientes