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

如何仅允许AWS Lambda函数访问.NET单体项目API?

限制.NET API仅允许指定AWS Lambda调用的解决方案

先说结论:不是必须用API Gateway,两种方案都能搞定——要么直接在你的.NET API里加身份验证,要么用API Gateway做中间层管控。

方案一:直接在.NET API里做Lambda身份校验

这是最省事的方式,不用加额外组件,直接在API层卡请求来源:

  • 利用AWS Lambda的IAM角色临时凭证:让Lambda调用API时自动带签名请求(AWS SDK会自动处理签名),然后在你的.NET API里验证这个签名是不是来自你指定的那个Lambda角色
  • 具体步骤:
    1. 给目标Lambda分配一个专属IAM角色,确保这个角色有调用你API的权限(可以加自定义权限策略)
    2. 在.NET API里加一个授权过滤器,校验请求的Authorization头,确认签名对应的IAM角色ARN是你指定的那个
    3. 简化版示例代码:
      public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
      {
          var authHeader = context.HttpContext.Request.Headers["Authorization"].FirstOrDefault();
          if (string.IsNullOrEmpty(authHeader))
          {
              context.Result = new UnauthorizedResult();
              return;
          }
          // 调用AWS SDK的签名验证方法,确认请求来自目标Lambda角色
          var isValid = await ValidateAwsSignature(context.HttpContext.Request, "arn:aws:iam::123456789012:role/YourTargetLambdaRole");
          if (!isValid)
          {
              context.Result = new ForbidResult();
          }
      }
      
  • 好处:零额外成本,架构简单;坏处:得自己写签名验证的逻辑,后续如果要加多个Lambda调用,权限管理会有点麻烦

方案二:用API Gateway做中间层

如果想搞更标准化的权限管理,或者以后要扩展更多API,用API Gateway更合适:

  • 操作步骤:
    1. 确保你的.NET API能被API Gateway访问(比如部署在EC2、ECS,或者有公开的可访问端点)
    2. 创建API Gateway,把请求转发到你的.NET API
    3. 给API Gateway配置IAM授权,只允许目标Lambda的IAM角色调用这个API
    4. Lambda调用API Gateway时,AWS SDK会自动给请求签名,API Gateway会自动校验权限
  • 好处:权限调整全靠IAM策略,灵活得很,还能复用API Gateway的监控、限流这些功能;坏处:多了一层组件,要额外配置,还有点小成本

选哪个?

  • 要是就一个API、一个Lambda调用,直接上方案一,快得很
  • 要是以后要加更多API或者需要更完善的API管理,选方案二更靠谱

内容的提问来源于stack exchange,提问作者Mccree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17