使用现有策略的 AWS 网关中的无服务器白名单 IP
Serverless Whitelist IP in AWS Gateway using existing policy
我正在使用 AWS 基础设施(AWS API 网关 + 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
但是没用...
我知道有些人按照无服务器文档直接创建和分配 resource policy during the lambda deployment,但我不想那样做,因为我想从 AWS 管理策略 (我不想每次更改策略时都重新部署无服务器。
有人对此有有效的示例/建议吗?
经过相当广泛的互联网研究后,显然无法从网关引用现有政策。
主要原因是网关策略是资源策略而不是 IAM 策略更多详细信息。
作为替代解决方案,我最终做的是将该策略提取到一个公共文件中,我的存储库现在如下所示:
│
├── services
│ └── service-api
│ └── handler.js, serverless.yml
│
├── serverless-common.yml
└──.gitlab-ci.yml
在每个服务的 serverless.yml 文件中,我引用了无服务器中的策略-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
而在无服务器中-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 基础设施(AWS API 网关 + 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
但是没用...
我知道有些人按照无服务器文档直接创建和分配 resource policy during the lambda deployment,但我不想那样做,因为我想从 AWS 管理策略 (我不想每次更改策略时都重新部署无服务器。
有人对此有有效的示例/建议吗?
经过相当广泛的互联网研究后,显然无法从网关引用现有政策。
主要原因是网关策略是资源策略而不是 IAM 策略更多详细信息
作为替代解决方案,我最终做的是将该策略提取到一个公共文件中,我的存储库现在如下所示:
│
├── services
│ └── service-api
│ └── handler.js, serverless.yml
│
├── serverless-common.yml
└──.gitlab-ci.yml
在每个服务的 serverless.yml 文件中,我引用了无服务器中的策略-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
而在无服务器中-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并引用从无服务器部署到它。