无服务器白名单将不同IP分配给不同功能

时间:2019-11-25 12:39:46

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

我正在使用无服务器来管理Lambda函数。

如果必须将给定的无服务器部署中的所有功能列入白名单,则可以使用类似的内容。

provider:
  name: aws
  ...
  resourcePolicy:
    - Effect: Deny
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/*/*
      Condition:
        NotIpAddress:
          aws:SourceIp:
            - '141.206.243.10/32' # Teradata IP
            - '142.0.162.0/32'    # Eloqua IPs
    - Effect: Allow
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/*/*

在我的情况下,我有两个API,例如

  1. GetEmployees
  2. PutEmployees

我想限制GetEmployees在某个IP范围1.2.3.x/24中可用,而PutEmployees在另一个IP范围4.5.6.x/24中可用。

如何容纳这个serverless.yml?

1 个答案:

答案 0 :(得分:0)

资源策略不是附加到API网关的路径,因此每个API网关只能有一个资源策略文档。

但是,由于策略中的规则是一组规则,因此您可以采用以下格式为不同的阶段,路径和方法设置单独的规则:

execute-api:/{stage}/{path}/{method}

因此,您在资源策略中需要的是更具体的内容。

以下示例将针对任何阶段和方法将不同的IP限制应用于API中的特定资源。

provider:
  name: aws
  ...
  resourcePolicy:
    - Effect: Allow
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/*/*
    - Effect: Deny
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/GetEmployees/*
      Condition:
        NotIpAddress:
          aws:SourceIp:
            - '1.2.3.x/24'
    - Effect: Deny
      Principal: '*'
      Action: execute-api:Invoke
      Resource:
        - execute-api:/*/PutEmployees/*
      Condition:
        NotIpAddress:
          aws:SourceIp:
            - '4.5.6.x/24'