- 在AWS管理控制台中,选择“服务”下的“VPC”。
- 选择“IP前缀列表”并创建一个新的IP前缀列表,添加要拒绝的IP地址。
- 在 API Gateway 控制台中创建一个新的“Request Validator”。
- 将“validatorType”设置为“validateRequestParameters”并指定您的IP前缀列表(Resource Server 验证器和 OpenID Connect 验证器也支持此功能,但需要使用Lambda函数)。
- 在 API Gateway 控制台中创建一个新的API。
- 在“资源”下创建一个新的资源并指定“GET”方法。
- 将“Method Request”的“Request Validator”设置为之前创建的验证器。
- 在“集成请求”下选择“HTTP”作为集成类型,指定您的后端 URL。
- 要限制针对请求的源 IP,请在“HTTP”集成请求中指定“X-Forwarded-For”标头,并指定您的IP前缀列表作为网关请求模板中的一部分。Python代码示例如下:
import json
def lambda_handler(event, context):
client_ip = event['requestContext']['identity']['sourceIp']
denied_ip_prefix = ['0.0.0.0/0', '192.168.0.0/16'] #指定被拒绝的IP前缀
if any(map(lambda prefix: client_ip.startswith(prefix), denied_ip_prefix)): #判断源IP是否在被拒绝列表中
response = {'statusCode': 403, 'body': 'Access denied'} #返回403状态码和拒绝信息
else:
response = {'statusCode': 200, 'body': 'Hello World!'} #访问被允许,返回200状态码和欢迎信息
return {'statusCode': response['statusCode'], 'body': json.dumps(response['body'])}