在设计iOS
将与之交互的应用程序AWS
(例如S3
,CloudFront
等)时,在客户端与服务器上管理对这些服务的访问权限管理的利弊是什么?
“管理访问”是指将私有内容上传到S3,通过Cloudfront下载私有内容。
当然,处理访问的任何一方都需要存储AWS
访问密钥和访问密码。安全是关注的问题之一。
我同样对这种设计选择对两种实现的性能和灵活性的影响同样感兴趣。
最后,是否有一个论据来实现一种混合方法,即客户端和服务器都直接与进行交互AWS
,或者该实现通常与一个或另一个(而不是两者)一起使用?
虽然在许多情况下,您通常可能希望以任何一种方式进行此操作,但是几乎没有任何情况需要直接从客户端执行此操作,因为您提到了ios:
通过服务器端将数据上传到AWS的优点:
安全
正如在其他答案中已经提到的那样,如果最初已通过身份验证的请求将为您解决恶意行为和黑客的麻烦,则可以避免很多麻烦。如果数据是私有的,并且您确实致力于保护隐私,那么如果对系统进行身份验证,则很容易防止任何数据泄漏。
速率限制,用户配额等
经过身份验证的系统的另一个优点是,您可以对来自特定来源(例如用户,组,IP等)(如果您打算围绕同一系统体系结构构建多个应用程序的应用程序级别配额)的请求进行速率限制。当您直接在客户端工作时,构建这种智能并不是那么容易。
审计追踪
如果您需要跟踪谁上传了什么,何时,从何处上传的信息以及更多此类信息,那么如果直接在服务器上收到初始请求,则再次跟踪起来就容易得多。
失败时的异常处理
在QA测试期间,很可能会出现一些您无法轻易预测的故障,或者错过了一个严重的错误。处理这些服务器端效率更高,因为它在您的控制之下。当客户端出现任何此类问题时,您将只能依靠客户端来升级应用程序。如果您正在处理此服务器端,则可以轻松地对许多此类错误进行其他检查/部署,从而限制了错误的范围。
上线时间
再次,如另一个答案所述,批准更新可能需要一段时间。这大大降低了您对关键问题的响应能力,并且在严重问题(数据泄露/隐私泄露)导致重大损失(财务/用户信任/负面评级等)的情况下,您可能很难缓解。
我认为您仅想将数据直接从客户端上传到AWS的唯一情况是
非常非常频繁地上传大量数据,而无需直接处理。
如果一次上传需要花费一定数量的带宽和网络资源,则两次上传将声明资源翻倍(从client --> server
,然后从server --> AWS
)。因此,如果您频繁地上传大量数据(每天思考TB),那么您最终会浪费大量资源,只是将数据从一个点复制到另一个点。在这种情况下,直接将数据推入S3是有意义的。但是,要使这种方法起作用,您的成本节省应该足够高,以消除对安全性和隐私性的担忧,对于大多数应用程序,情况并非如此。
你在围墙的花园里
基本上,该应用程序仅适用于某些预先确定的用户,而该应用程序根本不适用于其他任何人(例如,您正在为公司内部使用而开发此应用程序)。本质上,这意味着对最终用户使用您的应用程序的动机具有100%的信心。
编辑:OP要求评论
服务器提供签名的URL / cookie的方式如何,客户端使用它们将其上传到S3或从Cloudfront下载。客户端仍直接与AWS交互,但需要由服务器控制的权限。
乍一看,在我看来这是非常可行的。这篇博客文章提供了许多使用签名url的用例(例如提供通配符签名的url以供阅读)(尽管示例在中.NET
),并且AWS docs上提供了更多信息。
由于您将要处理签名服务器端,因此您可以轻松地处理我之前在我的帖子中提到的所有要点(速率限制,用户配额,审计跟踪等都是可行的,因为请求最初将发送到服务器)。正如这个答案所提到的,
签名URL有助于控制谁可以访问给定文件以及访问该文件的时间。
总体而言,这在许多用例中应该都能很好地工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句