我正在使用无服务器来管理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,例如
我想限制GetEmployees
在某个IP范围1.2.3.x/24
中可用,而PutEmployees
在另一个IP范围4.5.6.x/24
中可用。
如何容纳这个serverless.yml?
答案 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'