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:
- Delegar el acceso a operaciones de nivel de servicio que no están disponibles actualmente con una SAS específica del servicio, como Obtención de propiedades de Blob service, Establecimiento de propiedades de Blob service y Obtención de estadísticas de Blob service.
- Delegar el acceso a más de un servicio en una cuenta de almacenamiento a la vez. Por ejemplo, puede delegar el acceso a los recursos de Azure Blob Storage y Azure Files mediante una SAS de cuenta.
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 enTrue
para conceder acceso a las API de nivel de servicio. - container: el valor predeterminado es
False
; se establece enTrue
para conceder acceso a las API de nivel de contenedor. - object: el valor predeterminado es
False
; se establece enTrue
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
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (PyPi)
Consulte también
- Grant limited access to Azure Storage resources using shared access signatures (SAS) (Otorgar acceso limitado a recursos de Azure Storage con firmas de acceso compartido [SAS])
- Creación de una SAS de cuenta