你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Python 为 blob 创建服务 SAS
使用共享访问签名 (SAS),可以授予对存储帐户中容器和 blob 的有限访问权限。 创建 SAS 时,需要指定其约束条件,包括允许客户端访问哪些 Azure 存储资源、它们对这些资源具有哪些权限,以及 SAS 的有效期。
每个 SAS 均使用密钥进行签名。 可通过以下两种方式之一对 SAS 进行签名:
- 使用通过 Microsoft Entra 凭据创建的密钥。 使用 Microsoft Entra 凭据签名的 SAS 是用户委托 SAS。 必须为创建用户委托 SAS 的客户端分配一个 Azure RBAC 角色,该角色包括 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 操作。 若要了解详细信息,请参阅创建用户委托 SAS。
- 使用存储帐户密钥。 服务 SAS 和帐户 SAS 均使用存储帐户密钥进行签名。 创建服务 SAS 的客户端必须具有对帐户密钥的直接访问权限,或分配有 Microsoft.Storage/storageAccounts/listkeys/action 权限。 若要了解详细信息,请参阅创建服务 SAS 或创建帐户 SAS。
注意
用户委托 SAS 为使用存储帐户密钥签名的 SAS 提供更高的安全性。 Microsoft 建议尽可能使用用户委托 SAS。 有关详细信息,请参阅向具有共享访问签名的数据授予有限的访问权限 (SAS)。
本文介绍了如何使用存储帐户密钥通过用于 Python 的 Blob 存储客户端库为 blob 创建服务 SAS。
关于服务 SAS
服务 SAS 使用存储帐户访问密钥进行签名。 服务 SAS 会委托对单个 Azure 存储服务中的资源(例如 Blob 存储)的访问权限。
还可以使用存储访问策略来定义 SAS 的权限和持续时间。 如果提供现有存储访问策略的名称,则该策略与 SAS 关联。 若要详细了解存储访问策略,请参阅定义存储访问策略。 如果未提供存储访问策略,可通过本文中的代码示例来了解如何定义 SAS 的权限和持续时间。
为 blob 创建服务 SAS
可以使用以下方法创建服务 SAS,以委派对 Blob 资源的有限访问权限:
用于对 SAS 进行签名的存储帐户访问密钥将会作为 account_key
参数传递到该方法。 允许的权限将作为 permission
参数传递给该方法,并在 BlobSasPermissions 类中进行定义。
以下代码示例显示了如何为 blob 资源创建具有读取权限的服务 SAS:
def create_service_sas_blob(self, blob_client: BlobClient, account_key: str):
# Create a SAS token that's valid for one day, as an example
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
sas_token = generate_blob_sas(
account_name=blob_client.account_name,
container_name=blob_client.container_name,
blob_name=blob_client.blob_name,
account_key=account_key,
permission=BlobSasPermissions(read=True),
expiry=expiry_time,
start=start_time
)
return sas_token
使用服务 SAS 为客户端对象授权
以下代码示例显示了如何使用在较早的示例中创建的服务 SAS 来授权 BlobClient 对象。 此客户端对象可用于根据 SAS 授予的权限对 blob 资源执行操作。
# The SAS token string can be appended to the resource URL with a ? delimiter
# or passed as the credential argument to the client constructor
sas_url = f"{blob_client.url}?{sas_token}"
# Create a BlobClient object with SAS authorization
blob_client_sas = BlobClient.from_blob_url(blob_url=sas_url)
资源
若要详细了解如何使用适用于 Python 的 Azure Blob 存储客户端库,请参阅以下资源。