使用现有策略将 AWS 网关中的 IP 列入无服务器白名单



我正在使用 AWS 基础设施(AWS API Gateway + Lambda(,我想阻止对我的开发环境的外部访问,我创建了一个使用 IAM 的策略来根据源 IP 过滤 IP:

{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "execute-api:Invoke",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"192.168.0.1"
]
},
"Bool": {
"aws:ViaAWSService": "false"
}
}
}
}

我现在要做的是将该策略附加到我使用无服务器部署的 lambda;我试过这个:

provider:
name: aws
runtime: nodejs12.x
resourcePolicy:
- arn:aws:iam::1234567890:policy/myCustomPolicy

但它不起作用...

我知道有些人遵循无服务器文档,在 lambda 部署期间直接创建和分配资源策略,但我不想以这种方式执行此操作,因为我想从 AWS 管理策略(我不想每次必须更改策略时都重新部署无服务器(。

有没有人对此有工作示例/建议?

经过相当广泛的互联网研究,显然没有办法从网关引用现有政策。

主要原因是网关策略是资源策略,而不是 IAM 策略,此处提供了更多详细信息。

作为替代解决方案,我最终所做的是将该策略提取到一个通用文件中,我的存储库现在如下所示:

│
├── services
│   └── service-api
│     └── handler.js, serverless.yml
│
├── serverless-common.yml
└──.gitlab-ci.yml

在每个服务内的serverless.yml文件中,我引用了serverless-common.yml中的策略:

provider:
name: aws
runtime: nodejs12.x
apiGateway:
resourcePolicy: ${file(../../serverless.common.yml):custom.resourcePolicies.${opt:stage, 'none'}}
functions:
hello:
handler: handler.hello
events:
- http: 
path: health
method: get

在无服务器通用.yml 中

custom:
resourcePolicies:
dev:
- Effect: Allow
Principal: "*"
Action: execute-api:Invoke
Resource:
- execute-api:/*/*/*
Condition:
IpAddress:
aws:SourceIp: 
- "176.25.129.133" # Whitelisted IP
pro:
- Effect: Allow
Principal: "*"
Action: execute-api:Invoke
Resource:
- execute-api:/*/*/*

这是我能够找到的最清晰的解决方案,因为框架和AWS不允许您引用外部策略,至少通过这种方式,您只能将白名单IP放在一个地方,并从无服务器部署中引用它。

最新更新