基于条件访问亚马逊lamda结果?

时间:2018-04-04 04:54:52

标签: javascript java amazon-web-services amazon-s3 stripe-payments

想知道是否可以让webapp将文件(userid.input.json)上传到Amazon S3,这会触发读取文件的lambda函数,进行一些处理,并将结果保存为另一个( userid.output.json)。

但是,Web应用程序不应立即访问userid.output.json。 Web应用程序必须完成Stripe付款,付款完成后,Web应用程序可以访问amazon s3上的(userid.output.json)文件。

在我问如何之前,我想我先问一下这个场景是否可以在AWS上进行推广/架构?

方法

请注意,这是基于更多研究的问题更新。看起来Amazon Cognito将是用于登录用户并将其用户凭据绑定到可以读取和写入S3存储桶的IAM角色的完美工具。

因此,一旦用户通过Amazon Cognito登录并拥有适当的凭据,那么他们的文件就可以上传到S3存储桶并由lambda处理。然后将结果写入同一个桶中。

现在我早些时候建议写一个密封的水桶并使用Stripe webhook触发器将结果从密封桶移到可访问的水桶。但根据@ Snickers3192提供的答案,似乎这是必要的。

条带支付完成后,webapp可以设置一个布尔值,用于控制对输出的访问并完成循环吗?

拥有隐藏存储桶的一部分原因是有人可能会将凭据从浏览器中提取出来并在不同的脚本中执行它们。我认为这是不可能的(着名的遗言:)),但以防万一我写了follow up question here

换句话说,使用Amazon Cognito进入客户端帖子的凭据不能用于在应用程序上下文之外执行脚本吗?

方法第2部分

根据我的后续问题,似乎依赖于webapp中的状态来做出安全决策是不够的,因为有人可能想出一种方法来获取令牌认证令牌并使用客户端直接操作应用程序API除了核心应用程序。

所以现在我这样想:

1)将结果写入密封桶(Processing Lambda)

2)让Stripe webhook更新用户在用户个人资料中的交易记录,表明付款已付款= true(Stripe Lambda)

3)创建另一个对密封存储桶具有访问权限的lambda,但仅在paid=true时返回结果。 (访问结果Lambda)

因为Stripe绑定到允许更新Application用户配置文件并设置paid=true的IAM用户,并且只能在返回之前首先检查paid=true的lambda是否可以访问密封存储桶。结果,我认为应该保证安全。

如果有人采用更简单的方法,请告诉我。

1 个答案:

答案 0 :(得分:1)

这实际上更像是一个问题,您希望在您的应用程序逻辑中放置安全性(在AWS中有很多选项),这可能意味着:

  • LAMBDA /的webapp
  • S3政策
  • IAM角色/群组

这些决定通常取决于您的身份存储的保存位置,以及您是否希望保留AWS用户VS的概念。您应用的用户。我倾向于将这两个池分开,因为这样的安全逻辑保存在webapp / lambda中,AWS安全性只处理开发人员对环境的权利以及应用程序本身拥有的权限。

这意味着webapp可以随时访问输入和输出存储桶,但它会在某个地方(或使用您的支付系统API)在某个数据库中保留一条记录,该数据库已经付款并且没有付款并使用该信息拒绝或授予用户访问权限。 IMO这是一种更加模块化的设计,它使您能够更好地锁定您的AWS账户,并且对于安全性所在的开发人员来说更加清晰。此外,如果您使用IAM / S3,则在本地运行和调试将更加困难。

编辑:在您的所有评论和其他安全问题之后,您可能还需要考虑通过电子邮件将短暂的URL链接发送到已处理的文件,以便用户既需要电子邮件访问权限又需要知道他们的应用程序的凭据。这意味着即使您的访问令牌在浏览器级别被盗,没有电子邮件访问权限,黑客仍然无法获取已处理的文件。如果您想成为EXTREME SECURITY CORE,请提供不仅需要身份验证的链接,还要提供MFA,以便他们输入代码时不断刷新,因为您在登录时应该为您的AWS账户进行设置。

我绝不是安全专家,只是遵循最佳做法并尽职尽责,您将满足安全期望。