如何限制对lambda的访问 [英] How to restrict access to a lambda

查看:8
本文介绍了如何限制对lambda的访问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个前端应用程序,该应用程序将使用lambda服务,端点启用CORS的方式如下:

// serverless.yml

functions:
  test:
  handler: functions/test.handler
  events:
  - http:
      path: /test
      method: get
      cors: true

测试函数的处理程序具有如下标头:

// ./functions/test.js
headers: {
        'Access-Control-Allow-Origin': 'https://example.com',
    },

当我构建/部署无服务器项目时,我可以将生成的URL放在浏览器中并看到响应。ACAO头确实存在,我还没有尝试在站点上使用它,它可能在那里被阻止,但CORS是不够的--它只是基于浏览器,如果以其他方式请求,lambda响应仍然可见。

我要做的是限制对这些(生产)lambda函数的访问,除非请求来自我的应用程序,该应用程序(静态)托管在S3存储桶中,存储桶链接到CloudFront,CloudFront链接到域(使用该域的路由53。

我的应用程序不会有用户,我只是不希望在那里提供的数据可以从第三方服务访问。我考虑构建一个在每个函数中导入的函数,如果状态为Prod,它将检查IP,但我不确定这是否是一个好做法。

我还能做些什么来保护那些羔羊?解决方案不一定要在lambda中,也许CloudFront中有我可以使用的东西,目前没有一个子域api.example.com将指向lambda。

推荐答案

实际上找到了我喜欢的解决方案,不确定我以前怎么没有想到这个。

在serverless.yml中,资源策略如下所示:

provider:
  name: aws
  runtime: nodejs8.10
  memorySize: 128
  stage: dev
  resourcePolicy:
    - Effect: Allow
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/*/*
      Condition:
        IpAddress:
          aws:SourceIp:
            - 'your ip here'

部署时,策略在API网关->您的服务->资源策略中设置。我相信,如果某些lambdas/端点应该允许不同/完全访问,您可以添加多个IP,这样我也可以根据部署阶段拥有不同的IP。

这篇关于如何限制对lambda的访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆