Azure函数应用用ShareFile导出SQL数据遇403及托管身份问题
Azure函数应用访问Azure文件存储403错误及托管身份配置问题
问题背景
我尝试通过Azure函数应用,使用Azure ShareFile客户端将SQL Server表数据导出为XLSX文件。本地在VSCode运行代码时文件创建成功,推测是因为我是存储账户所有者,本地执行时Azure使用我的登录信息完成认证;但将函数部署到云端后,执行导出操作时出现403授权错误。
当前实现代码
初始化ShareFile客户端
def getFileClient(filePath): accountName = os.environ["AZURE_STORAGE_ACCOUNT_NAME"] accountKey = os.environ["AZURE_STORAGE_ACCOUNT_KEY"] connectStr = os.environ["AZURE_STORAGEFILE_CONNECTIONSTRING"] shareName = "dev" sasToken = generate_account_sas( account_name=accountName, account_key=accountKey, resource_types=ResourceTypes(service=True, object=True), permission=AccountSasPermissions(read=True, write=True), expiry=datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1), services=Services(fileshare=True) ) shareClient = ShareClient.from_connection_string(conn_str=connectStr, share_name=shareName, credential=sasToken) # 获取文件引用 fileClient = shareClient.get_file_client(filePath) return fileClient
注:原代码中
accountName = accountKey = os.environ["AZURE_STORAGE_ACCOUNT_NAME"]存在变量赋值笔误,已修正为正确的变量定义
导出数据到XLSX文件
XLBytes = BytesIO() dataMartDF[export_cols].to_excel(XLBytes, index=False) XLBytes.seek(0) countyDispFC.create_file(size=XLBytes.getbuffer().nbytes) countyDispFC.upload_file(XLBytes)
其中countyDispFC是getFileClient函数返回的文件客户端实例。
错误现象
通过HTTPS调用云端函数时,日志记录403授权错误,提示权限不足无法完成文件操作。
已完成配置
- 存储账户网络设置为「从选定的虚拟网络和IP地址启用」,已添加本地机器IP地址和函数应用的公网IP地址
- 为函数应用创建并分配了托管身份,在存储账户的IAM中为该托管身份授予了Storage File Privileged Contributor角色
- 尝试使用托管身份访问存储账户时,创建凭据对象并传入
ShareClient后,遇到token_intent is required错误
疑问
请问我遗漏了哪些配置?
内容的提问来源于stack exchange,提问作者anilcreates
相关产品推荐
相关产品推荐

