随着云计算和微服务架构的兴起,API网关作为微服务架构的核心组件也得到了广泛的应用。API网关可以将所有的请求流量引导到适当的微服务,并在收到来自客户端的请求后,为这些请求提供访问微服务的一站式入口。
在实际应用中,我们可能会遇到这样一种情况,就是我们不希望API网关被外部恶意访问,只允许内网访问。如何实现这一需求呢?
一、使用安全组策略
API网关可以部署在私有VPC网络中,使用安全组策略进行网络隔离,只允许指定的内网IP地址或网段进行访问。
下面是AWS Lambda适用的VPC安全组策略范例:
//给Lambda指定VPC
{
"VpcConfig": {
"SecurityGroupIds": [
"sg-xxxxxx"
],
"SubnetIds": [
"subnet-xxxxxx"
]
}
}
//VPC安全组策略
{
"SecurityGroups": [
{
"IpProtocol": "tcp",
"FromPort": 80,
"ToPort": 80,
"IpRanges": [
{
"CidrIp": "10.0.0.0/8"
},
{
"CidrIp": "172.16.0.0/12"
},
{
"CidrIp": "192.168.0.0/16"
}
]
}
]
}
在这个例子中,我使用AWS Lambda运行API网关,将其部署到了VPC中。我们可以在安全组中,通过指定允许访问的IP地址或IP段来对VPC网络进行安全隔离,从而实现只允许内网访问的目的。
二、使用API Gateway Gateway Response
当API网关收到来自客户端的请求时,会先将请求交给API Gateway Gateway Response进行处理,我们可以在Gateway Response中判断请求是否来自于内网,如果是,则将请求继续传递给后端微服务。
下面是AWS Lambda适用的API Gateway Gateway Response范例:
exports.handler = (event,