【问题标题】:how to restrict google cloud storage upload如何限制谷歌云存储上传
【发布时间】:2019-12-20 17:57:08
【问题描述】:

我有一个使用 Google Cloud Storage 的移动应用程序。该应用程序允许每个注册用户上传特定数量的文件。

我的问题是,有没有办法在存储上传之前进行某种检查?或者我是否需要实现一个单独的预订 API 来完成上传步骤? 当然,也欢迎任何替代建议。

【问题讨论】:

  • “某种检查”是什么意思?
  • 您有两种方法 1) 验证然后通过 Google Compute 服务之一上传数据 2) 验证然后使用预签名 URL 从客户端直接将数据上传到 Cloud Storage。第一种方法需要额外的出口带宽费用。第二种方法是首选。
  • 您是否使用任何特定架构存储文件?例如每个用户的文件夹或类似的东西?
  • @JohnHanley #2 验证步骤我们自己的自定义验证是否正确?通过预签名的 URL,您的意思是默认的 google 存储 url(我使用的是 java 存储 api)
  • 是的,您的软件会验证用户的访问权限。然后您的代码会生成一个 Google Cloud Storage 签名 URL cloud.google.com/storage/docs/access-control/signed-urls

标签: google-cloud-platform google-cloud-storage


【解决方案1】:

警告:不是权威答案。很高兴接受删除或更新请求。

我不知道有任何 GCS 或 Firebase 云存储机制会固有地限制给定用户可以创建的文件(对象)的数量。如果是我,我会这样解决这个难题。

我会创建一个数据库(例如 Firestore / Datastore),其中每个用户都有一个键和一个值,即他们上传的文件数。当用户想要上传新文件时,它会首先对我将编写的云函数进行 REST 调用。此 Cloud Function 将隐式知道调用用户的身份。它将在数据库中查找记录并确定是否允许我们上传新文件。如果否,则返回错误并结束故事。如果是,则增加数据库中的值。接下来,我将创建一个可用于允许上传的 GCS“signed URL”。 Cloud Function 将返回该签名 URL。现在希望上传的应用可以使用该签名 URL 来执行实际上传。

我还将向每个上传的文件添加元数据,以识别文件的逻辑上传者(用户)。如果需要,可以将其用于和解。我们可以检查存储桶中的所有文件,并重新构建每个用户上传了多少文件的数据库。

这个故事的一个可能的替代方案是 Cloud Function 不返回签名 URL,而是接收要在同一请求中上传的数据。如果文件数量检查通过,则 Cloud Function 可以成为 GCS 写入的代理,以直接创建文件。需要根据要上传的文件大小仔细检查此替代方案。如果文件很大,这可能是一个非常糟糕的解决方案。我们希望尽快进出云功能,并且“围绕”云功能来服务数据传递并不是很好。在这种情况下,我们可能希望查看 Cloud Run,因为它支持实例中的并发,而不会增加每次调用的成本。

【讨论】:

  • 我想我会接受这个答案。我还没有实施解决方案。一旦我这样做,我会发回我的学习。谢谢大家。此外,+1 用于签名的网址链接。我不确定那是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 2016-12-30
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多