Amazon s3 云存储客户访问最佳做法

Amazon s3 云存储客户访问最佳做法,amazon-s3,google-cloud-storage,azure-blob-storage,Amazon S3,Google Cloud Storage,Azure Blob Storage,假设我有一个用例,用户可以在应用程序中购买mp3文件。对象存储在GCP云存储中。仅向购买文件的用户交付这些对象的最佳做法是什么 在研究了这个主题之后,我提出了三个解决方案: 客户端调用REST(例如,在应用程序引擎内运行的REST)服务。此服务从云存储下载文件,然后将其发送回客户端 我可以将下载URL(从云存储)发送到客户端,而不是通过REST调用发送文件。这将更具成本效益,但这听起来像是一个安全问题,因为任何人只要监视他的网络就可以捕获URL 创建(有时间限制的)签名url以允许用户下载 显然

假设我有一个用例,用户可以在应用程序中购买mp3文件。对象存储在GCP云存储中。仅向购买文件的用户交付这些对象的最佳做法是什么

在研究了这个主题之后,我提出了三个解决方案:

  • 客户端调用REST(例如,在应用程序引擎内运行的REST)服务。此服务从云存储下载文件,然后将其发送回客户端
  • 我可以将下载URL(从云存储)发送到客户端,而不是通过REST调用发送文件。这将更具成本效益,但这听起来像是一个安全问题,因为任何人只要监视他的网络就可以捕获URL
  • 创建(有时间限制的)签名url以允许用户下载
  • 显然,必须首先进行权限检查,例如,包含用户X是否购买了mp3 Y的数据库


    此问题也可以应用于Azure Blob存储或AWS S3…

    在您的用例中,您有一个常量:

    • 您需要一个后端来对用户进行身份验证(例如,在或上执行和托管的身份验证)
    • 您需要查看它购买的MP3列表(例如存储在中)
    • 然后,你需要允许他下载文件。在最后一点上,我建议你生成一个。(也许你的项目是firebase projet?)但这和signerURL是一样的。最后,我不建议你使用#1提案。它会起作用,但如果下载时间过长(因为网络很差),连接将在60秒后中断。这将使您的AppEngine免费运行(您将为此支付费用…)

    我不是任何类型的架构师,因此请小心。我的直觉告诉我,将您希望提供给客户的文件仅保留在GCS上。不允许客户直接访问这些文件。将它们仅保留在Internet上。然后,您的最终用户客户端(浏览器或应用程序)将连接到在GCP上运行的应用程序(应用程序引擎、CE、K8S、云功能、云运行等)。当逻辑对用户进行身份验证并提供数据时,您的计算应用程序将读取GCS数据并将其流式传输给最终用户。这可能是REST响应、WebSocket或普通TCP。我的意见是选择第三个选项。第二个选项在安全性方面有点不一致,第一个可能会有点慢。您也可以选择第一个,但是考虑在下载时使用并行性。记住,为了效率和安全性的原因,开发相应的云存储的最佳实践。对于架构设计模式,我建议用服务来实现一个大使模式来处理请求,Mon。检查流程、安全层和重试策略。是的,这是一个Firebase项目。因此,我可以通过Firebase身份验证,甚至可以使用云功能。购买的检查将通过Firestore完成。我不知道下载会在60秒后中断,在这种情况下,我的第一种方法不可行Firebase主机只是AppEngine标准的一个高级api,约束条件是相同的