Compartir vía


Creación de una SAS de cuenta con Python

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 la clave de cuenta de almacenamiento para crear una SAS de cuenta con la biblioteca cliente de Azure Storage para Python.

Acerca de la SAS de la cuenta

Se crea una SAS de cuenta en el nivel de la cuenta de almacenamiento. Mediante la creación de una SAS de cuenta, puede hacer lo siguiente:

Las directivas de acceso almacenadas no son compatibles para una SAS de cuenta.

Creación de una SAS de cuenta

Se firma una SAS de una cuenta con la clave de acceso de la cuenta. El siguiente código de ejemplo muestra cómo llamar al método generate_account_sas para obtener la cadena del token de SAS de la cuenta.

def create_account_sas(self, account_name: str, account_key: str):
    # Create an account SAS that's valid for one day
    start_time = datetime.datetime.now(datetime.timezone.utc)
    expiry_time = start_time + datetime.timedelta(days=1)

    # Define the SAS token permissions
    sas_permissions=AccountSasPermissions(read=True)

    # Define the SAS token resource types
    # For this example, we grant access to service-level APIs
    sas_resource_types=ResourceTypes(service=True)

    sas_token = generate_account_sas(
        account_name=account_name,
        account_key=account_key,
        resource_types=sas_resource_types,
        permission=sas_permissions,
        expiry=expiry_time,
        start=start_time
    )

    return sas_token

Los parámetros válidos para el constructor ResourceTypes son:

  • service: el valor predeterminado es False; se establece en True para conceder acceso a las API de nivel de servicio.
  • container: el valor predeterminado es False; se establece en True para conceder acceso a las API de nivel de contenedor.
  • object: el valor predeterminado es False; se establece en True para conceder acceso a las API de nivel de objeto para blobs, mensajes de cola y archivos.

Para obtener los permisos disponibles, consulte AccountSasPermissions.

Uso de una SAS de cuenta desde un cliente

Para usar la cuenta SAS con el fin de acceder a las API de nivel de servicio Blob, construya un objeto de BlobServiceClient con la cuenta SAS y el punto de conexión de Blob Storage para la cuenta de almacenamiento.

# The SAS token string can be appended to the account URL with a ? delimiter
# or passed as the credential argument to the client constructor
account_sas_url = f"{blob_service_client.url}?{sas_token}"

# Create a BlobServiceClient object
blob_service_client_sas = BlobServiceClient(account_url=account_sas_url)

También puede usar una SAS de cuenta para autorizar y trabajar con un objeto ContainerClient o un objeto BlobClient, si a esos tipos de recursos se les concede acceso como parte de los valores de firma.

Recursos

Para más información sobre cómo crear una SAS de cuenta con la biblioteca cliente de Azure Blob Storage para Python, consulte los siguientes recursos.

Ejemplos de código

Recursos de la biblioteca cliente

Consulte también