如何限制对Lambda的访问

时间:2019-01-21 17:28:49

标签: amazon-web-services security aws-lambda serverless

我有一个前端应用程序,该应用程序将使用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?解决方案不必在lambda中,也许我可以在cloudfront中使用某些东西,当前没有子域api.example.com指向lambda。

1 个答案:

答案 0 :(得分:1)

找到了我真正喜欢的解决方案,不确定我以前怎么没想到。

在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网关->服务->资源策略中设置该策略。我敢肯定,如果某些lambda /端点允许不同/完全访问,那么您可以添加多个IP,这样,根据部署阶段,我也可以拥有不同的IP。