如何为Azure Data Lake指定目录下的单个文件生成SAS Token?
为启用分层命名空间的Azure Data Lake Storage Gen2单个文件生成SAS Token操作指引
前提注意事项
- 确认你使用的是已启用分层命名空间的ADLS Gen2存储账户,操作目标是单个文件而非目录/容器,生成SAS时需要指定文件的完整层级路径
- 以下提供调试用的Azure CLI方案、业务集成用的Python SDK方案两种常用实现方式
操作方式1:Azure CLI 快速生成(适合调试验证)
需提前安装Azure CLI并完成身份认证,执行以下命令即可生成:
az storage file generate-sas --account-name <你的存储账户名> --share-name <文件系统名> --path <目录层级/目标文件名> --permissions r --expiry <UTC过期时间,示例:2024-12-31T23:59:59Z> --account-key <你的存储账户访问密钥> --auth-mode key
参数说明:
--path必须填写文件的完整层级路径,比如raw/logs/202406/app.log,不需要带前导斜杠--permissions按需配置,读权限用r、写权限用w、删除权限用d,可组合使用例如rw
操作方式2:Python SDK 代码实现(适合业务集成)
先安装依赖包:pip install azure-storage-file-datalake
代码示例:
from azure.storage.filedatalake import generate_file_sas from datetime import datetime, timedelta # 配置参数 storage_account_name = "你的存储账户名" storage_account_key = "你的存储账户访问密钥" file_system_name = "你的文件系统(容器)名" # 填写文件的完整层级路径,示例:raw/202406/user_data.csv file_path = "你的文件完整层级路径" # 生成SAS Token sas_token = generate_file_sas( account_name=storage_account_name, file_system_name=file_system_name, file_path=file_path, account_key=storage_account_key, # 配置权限,可按需组合 permission="r", # 配置过期时间,此处设为2小时后过期 expiry=datetime.utcnow() + timedelta(hours=2) ) # 拼接完整的可访问文件URL file_access_url = f"https://{storage_account_name}.dfs.core.windows.net/{file_system_name}/{file_path}?{sas_token}" print(f"文件SAS访问链接:{file_access_url}")
常见注意事项
ADLS Gen2的文件SAS和普通Blob存储的SAS生成逻辑有差异,必须指定完整的文件层级路径,不能直接替换为Blob路径格式,否则会出现权限验证失败问题
- 生产环境建议使用Azure AD用户委托密钥生成SAS,避免直接泄露存储账户访问密钥,只需将代码中的
account_key参数替换为通过Azure AD凭证申请的user_delegation_key即可
内容的提问来源于stack exchange,提问作者frosty
相关产品推荐
相关产品推荐

