有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于javascript条件访问amazon lamda结果?

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

但是userid.output.json不应该立即被web应用程序访问。web应用程序必须完成条带支付,一旦支付完成,web应用程序就可以访问amazon s3上的(userid.output.json)文件

在我问怎么做之前,我想我应该先问一下这个场景是否可以在AWS上进行简化/架构

接近

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

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

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

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

隐藏bucket的部分原因是,有人可能会从浏览器中取出凭据,并在不同的脚本中执行它们。我想这是不可能的(著名的遗言:),但以防万一我写了一篇follow up question here

换句话说,通过Amazon Cognito拉入客户端post登录的凭据不能用于在应用程序上下文之外执行脚本

方法第2部分

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

所以现在我这样想:

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

2)让Stripe webhook在用户配置文件中向用户更新一条交易记录,指示payment paid=true(Stripe Lambda)

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

因此,由于Stripe绑定到一个IAM用户,该用户可以更新应用程序用户配置文件并设置paid=true,并且密封的bucket只能由lambda访问,lambda在返回结果之前首先检查paid=true,我认为这应该可以保证安全性

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


共 (1) 个答案

  1. # 1 楼答案

    这实际上更多的是一个问题,你想把安全性放在哪里,在AWS中有很多选项,在你的应用程序逻辑中,这可能意味着:

    • Lambda/Webapp
    • S3策略
    • IAM角色/小组

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

    这意味着webapp始终可以访问输入和输出存储桶,但它会在某个数据库中(或利用您的支付系统API)保存一条记录,记录哪些用户已付款,哪些用户未付款,并使用该信息拒绝或授予用户访问权。依我看,这是一种更模块化的设计,它使您能够更好地锁定AWS帐户,并且让开发人员更清楚安全性的位置。此外,如果使用IAM/S3,本地运行和调试将更加困难

    <>强>编辑:在您的所有评论和额外的安全问题之后,您可能还想考虑向处理过的文件发送短时间URL链接,这样用户既需要电子邮件访问,又知道应用程序的凭据。这意味着,即使你的访问令牌在浏览器级别被盗,如果没有电子邮件访问权限,黑客仍然无法获取已处理的文件。如果你想成为极端安全的核心,有一个链接,不仅需要身份验证,而且还需要MFA,这样他们就需要输入一个不断刷新的代码,就像你应该在登录时为你的AWS帐户设置的那样

    我绝不是安全专家,只要遵循最佳实践并尽职尽责,你就会达到安全预期