使用现有策略的 AWS Gateway 中的无服务器白名单 IP
Posted
技术标签:
【中文标题】使用现有策略的 AWS Gateway 中的无服务器白名单 IP【英文标题】:Serverless Whitelist IP in AWS Gateway using existing policy 【发布时间】:2020-05-14 14:56:28 【问题描述】:我正在使用 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
但它不起作用......
我知道有些人按照 Serverless 文档直接创建和分配 resource policy during the lambda deployment,但我不想这样做,因为我想从 AWS 管理策略(我不想每次我必须更改策略时都想重新部署无服务器)。
有人对此有一个可行的示例/建议吗?
【问题讨论】:
【参考方案1】:经过相当广泛的互联网研究,显然无法从网关参考现有政策。
主要原因是网关策略是资源策略而不是 IAM 策略更多详细信息here。
作为替代解决方案,我最终所做的是将该策略提取到一个公共文件中,我的存储库现在如下所示:
│
├── services
│ └── service-api
│ └── handler.js, serverless.yml
│
├── serverless-common.yml
└──.gitlab-ci.yml
在每个服务内的 serverless.yml 文件中,我引用了 serverless-common.yml 中的策略:
provider:
name: aws
runtime: nodejs12.x
resourcePolicy: $file(../../serverless.common.yml):custom.resourcePolicies.$opt:stage, 'none'
functions:
hello:
handler: handler.hello
events:
- http:
path: health
method: get
并且在 serverless-common.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 并参考它来自无服务器部署。
【讨论】:
以上是关于使用现有策略的 AWS Gateway 中的无服务器白名单 IP的主要内容,如果未能解决你的问题,请参考以下文章
如何在 API Gateway 和 React 应用程序之间启用 AWS 中的 CORS 策略?
在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?
如何使用 AWS Cloudformer 为现有 API Gateway 创建云形成模板?