如何配置AWS Lambda使其仅可通过公有API Gateway访问?
问题解答
1. 关于Lambda是否可直接从互联网访问
你访问的https://[magic-number].execute-api.[region].amazonaws.com/Prod/是API Gateway的公网地址,并非Lambda直接暴露在互联网上。默认情况下,未部署在VPC中的Lambda没有公网IP,也无法直接通过互联网被访问——你看到的响应是API Gateway作为中间层,将请求转发给Lambda后返回的结果。
2. 如何确保Lambda仅通过带Cognito授权的API Gateway访问
不需要将Lambda部署到VPC私有子网(除非你有访问内网资源的额外需求),通过以下两步即可实现:
- 配置Lambda资源策略:添加一条策略,仅允许你指定的API Gateway作为触发源,拒绝所有其他请求。示例策略如下:
替换其中的{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "execute-api.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:[region]:[account-id]:function:[your-lambda-name]", "Condition": { "ArnEquals": { "AWS:SourceArn": "arn:aws:execute-api:[region]:[account-id]:[api-id]/*/*/*" } } }, { "Effect": "Deny", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:[region]:[account-id]:function:[your-lambda-name]", "NotPrincipal": { "Service": "execute-api.amazonaws.com" } } ] }[region]、[account-id]、[your-lambda-name]、[api-id]为你的实际信息。 - 为API Gateway配置Cognito授权:在API Gateway的方法级别或API级别启用Cognito用户池授权,确保只有经过认证的用户请求才能通过API Gateway转发到Lambda。
内容的提问来源于stack exchange,提问作者Jacek Kowalski
相关产品推荐
相关产品推荐

