我希望能够从我的App Engine应用程序访问云存储桶中的文件,而不会使对象或存储桶本身公开可读。虽然我知道有很多选项允许访问带有身份验证的存储桶对象(客户端库,签名网址等),但复杂的因素是我希望能够访问带有路径的文件类似于所讨论的存储桶的文件夹结构。
例如,如果我将我的存储桶公开读取,我可以使用公共链接访问对象:https://storage.googleapis.com/MY_BUCKET/FOLDER_IN_MY_BUCKET/FILE_IN_FOLER.txt
。此URL模仿存储桶的内部文件夹结构。但是,如果存储桶不可公开读取,则似乎没有可比较的URL。我的App Engine App服务帐户已添加为我需要的存储管理员,但我不确定是否有可用于访问存储桶对象的URL。对象的mediaLink
将无效,因为生成信息会附加到末尾,selfLink
会导致404错误。
需要这样的网址是因为存储桶包含数千个对象。使用客户端库将它们下载到App Engine的持久存储类型会破坏我的情况下使用云存储的目的。在发出请求时获取所有签名的网址将非常耗时,然后我必须在某处管理数千个已签名的网址。
有没有办法从云存储桶中读取可预测的网址,例如公共网址,同时还要对请求进行身份验证?
答案 0 :(得分:2)
您可以在应用引擎应用中创建“重定向”端点,而不是尝试在响应中销售数千个已签名的网址。
e.g。用户对www.myapp.com/fetch/<bucket>/<object>
处理此端点的应用引擎代码授权用户确保他们应该具有访问权限,将存储桶/对象从URL中拉出,然后生成授权访问资源的签名URL并返回302重定向到该URL。
答案 1 :(得分:0)
如果您的浏览器使用可访问这些资源的帐户进行身份验证,则可以访问您提及的URL,而无需公开存储桶或文件:
https://storage.cloud.google.com/MY_BUCKET/FOLDER_IN_MY_BUCKET/FILE_IN_FOLDER
关于通过其他应用程序(例如App Engine)访问文件,您始终可以使用client libraries for your preferred language。您可以在documentation中测试API的工作方式,只需将 存储桶 参数定义为 MY_BUCKET 和 < em> object 参数为 FOLDER_IN_MY_BUCKET / FILE_IN_FOLDER 。将它应用到您选择的客户端库时,应使用相同的结构。