创建一个python桌面应用程序来导航和查看S3文件,而不使用aws凭证



我有一个用例,我需要做一个S3导航器,它应该允许用户导航S3文件并查看它们,而不需要给予任何类型的aws访问。因此用户不需要在他们的系统上配置aws凭据。

我尝试的方法是使用tkinter创建一个python应用程序,并允许使用api网关代理s3文档访问s3。不过,s3中的txt文件可以正常工作但我必须读取羽毛文件,这会导致

s3_data=pd.read_feather("https://<api_gateway>/final/s3?key=naxi143/data.feather")
File "C:Users<User>AppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagespandasiofeather_format.py", line 130, in read_feather
return feather.read_feather(
File "C:Users<User>AppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagespyarrowfeather.py", line 218, in read_feather
return (read_table(source, columns=columns, memory_map=memory_map)
File "C:Users<User>AppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagespyarrowfeather.py", line 239, in read_table
reader = _feather.FeatherReader(source, use_memory_map=memory_map)
File "pyarrow_feather.pyx", line 75, in pyarrow._feather.FeatherReader.__cinit__
File "pyarrowerror.pxi", line 143, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrowerror.pxi", line 114, in pyarrow.lib.check_status
OSError: Verification of flatbuffer-encoded Footer failed.

错误在我的python代码。

s3_data=pd.read_feather("https://<api_gateway>/final/s3?key=naxi143/data.feather")

是否有其他方法可以使此工作而不涉及aws凭据?

更新看起来api网关的有效载荷限制为10 MB,这使得这个解决方案超出了我的范围,因为我的大多数数据都超过了这个大小。在不使用aws凭证的情况下,是否有其他方法可以实现相同的目标?

如果您愿意,可以将摄取服务器用作数据网关,并且摄取的插件允许通过fsspec/s3fs本地与S3通信。摄取处理数据集而不是文件,因此您需要为想要读取的每个数据集找到正确的调用(即,pandas通常会接受的一组参数),并在启动服务器之前编写描述和元数据。

没有羽毛驱动器,然而(不像镶木地板),虽然一个很容易写。例如,intake-dremio包已经直接与箭头传输接口。

我认为你正在寻找的解决方案是API网关+预签名S3 url + 303 HTTP重定向+ CORS。这样可以安全地绕过API网关限制,因为它使用了对S3对象的签名重定向。下面是关于如何设置的一个很好的解释:

https://advancedweb.hu/how-to-solve-cors-problems-when-redirecting-to-s3-signed-urls/

它本质上是在REST调用中设置一些头来配置CORS,以允许客户端接收到到不同域的303重定向(CORS是针对交叉脚本类型攻击的安全性)。但是由于存在安全隐患,我建议您阅读整篇文章并了解您所允许的内容,而不是仅仅复制头文件的名称和值。

最新更新