You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:06:05