代码之家  ›  专栏  ›  技术社区  ›  Ole

基于条件访问amazon lamda结果?

  •  3
  • Ole  · 技术社区  · 6 年前

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

    然而 用户ID。输出json web应用程序不应立即访问。web应用程序必须完成条带支付,支付完成后,web应用程序可以访问( 用户ID。输出json )amazon s3上的文件。

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

    方法

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

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

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

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

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

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

    方法第2部分

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

    现在我这样想:

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

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

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

    因此,由于Stripe与允许更新应用程序用户配置文件并设置 已付=真 只有lambda首先检查 已付=真 在返回结果之前,我认为应该保证安全。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Derrops    6 年前

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

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

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

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

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

    我绝不是安全专家,只要遵循最佳实践并进行尽职调查,您就会满足安全期望。