sky*_*ork 19 server-side amazon-s3 amazon-web-services ios amazon-cloudfront
在设计iOS与之交互的应用程序AWS(例如S3,CloudFront等)时,在客户端与服务器上管理对这些服务的访问的优缺点是什么?
通过"管理访问",我的意思是将私有内容上传到S3,通过Cloudfront下载私有内容.
当然,处理访问的任何一方都需要存储AWS访问密钥和访问密钥.安全是其中一个问题.
我同样对这种设计选择对任一实现的性能和灵活性的影响感兴趣.
最后,是否存在实现混合方法的论据,其中客户端和服务器直接交互AWS,或者实现通常与其中一个或另一个相关,但不是两者兼而有之?
mu *_*u 無 10
虽然有很多情况下你可能想要以任何方式这样做,但是几乎没有任何情况你想要直接从客户端这样做,因为你提到了ios:
通过服务器端向AWS上传数据的优点:
安全
正如在另一个答案中已经提到的那样,如果他们试图打破这些请求,那么最初通过身份验证的请求可以帮助您避免麻烦和黑客的麻烦.如果数据是私有的并且您真正致力于保护隐私,则在系统通过身份验证时,任何数据泄漏都将更容易被阻止.
速率限制,用户配额等
经过身份验证的系统的附加优势在于,您可以对来自特定来源(例如用户,组,IP等)的请求进行速率限制(如果您打算围绕相同的系统架构构建多个应用程序,则应用程序级配额).当您直接在客户端工作时,构建这种智能并不容易.
审计跟踪
如果您需要跟踪谁上传了什么,何时,从何处以及更多此类信息,如果您直接在服务器上获得初始请求,这将再次更容易跟踪.
失败时的异常处理
在QA测试期间,很可能会出现您不容易预测的故障,或者错过了一个关键错误.处理这些服务器端更有效率,因为它在您的控制之下.当客户端出现任何此类问题时,您的客户可以升级应用程序.如果您正在处理此服务器端,则可以轻松地为许多此类错误放置/部署其他检查,从而限制错误的范围.
是时候上线了
同样,如其他答案所述,您的更新可能需要一段时间才能获得批准.这极大地降低了您对关键问题的响应能力,并且在严重问题(数据泄露/隐私泄露)导致重大损失(财务/用户信任/负面评级等)的情况下难以缓解
我认为您希望直接从客户端向AWS上传数据的唯一情况是
非常频繁地上传大量数据,无需直接处理.
如果上传一次会花费一定数量的带宽和网络资源,那么上传两次会占用资源的两倍(一次来自client --> server,然后一次server --> AWS).因此,如果您经常上传大量数据(每天考虑TB),那么最终会浪费大量资源,只需将数据从一个点复制到另一个点.在这种情况下,直接推送数据S3是有意义的.但是对于这种工作方法,您的成本节省应该足够高,以覆盖对安全性和隐私的担忧,对于大多数应用程序来说,情况根本不是这样.
你在一个有围墙的花园里
基本上,该应用程序仅适用于某些预先识别的用户,该应用程序根本不适用于任何其他人(比如说你正在开发这个用于公司内部使用).从本质上讲,这意味着对最终用户使用您的应用程序的动机有100%的信心.
编辑:OP在评论中提问
服务器如何提供签名的URL/cookie,客户端使用这些来上传到S3或从Cloudfront下载.客户端仍然直接与AWS交互,但需要服务器控制的权限.
乍一看,在我看来这是非常可行的.此博客文章提供了许多使用签名网址的用例(例如提供用于阅读的通配符签名网址)(尽管示例都在其中.NET),并且AWS docs提供了更多信息.
由于您要处理签名服务器端,您可以轻松处理我在帖子中提到的每个要点(速率限制,用户配额,审计跟踪等)都可行,因为请求最初将转到服务器).正如这个答案所提到的,
签名URL有助于控制谁可以访问给定文件以及他们可以访问多长时间.
总的来说,这应该适用于很多用例.
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |