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

咨询:使用外部OpenAPI的AWS SAM RestAPI配置API密钥认证的替代方案

解决AWS SAM外部OpenAPI文件下的API密钥认证问题

你已经实现了外部OpenAPI定义和SwaggerUI端点,但卡在API密钥认证——因为SAM默认的授权器配置对AWS::Include引用的外部文件支持有限。除了你提到的两个方案,还有以下可行思路:

方案1:在外部OpenAPI文件中使用API Gateway扩展字段配合SAM Auth属性

在外部openapi.yaml里,给需要认证的路径添加x-amazon-apigateway-auth扩展,同时在SAM模板的AWS::Serverless::Api资源中配置Auth属性关联使用计划,这样既保留独立的OpenAPI文件,又能让SAM识别并部署API密钥认证。

配置示例:

  1. 外部openapi.yaml中添加认证扩展:
paths:
  /api/your-resource:
    get:
      summary: 受保护的资源接口
      x-amazon-apigateway-auth:
        type: "apiKey"
        apiKeyRequired: true
      responses:
        '200':
          description: 成功响应
  1. SAM模板中补充Auth配置:
ApiGatewayApi:
  Type: AWS::Serverless::Api
  Properties:
    DefinitionBody:
      Fn::Transform:
        Name: AWS::Include
        Parameters:
          Location: openapi.yaml
    Auth:
      ApiKeyRequired: true
      UsagePlan:
        CreateUsagePlan: PER_API
        UsagePlanName: MyApiUsagePlan
        Quota:
          Limit: 1000
          Period: MONTH
        Throttle:
          BurstLimit: 100
          RateLimit: 50

优点:完全保留外部OpenAPI文件的独立性,符合SAM自动化部署流程,无需手动操作。
缺点:需要在OpenAPI文件中添加AWS专有扩展字段,可能降低OpenAPI的跨平台兼容性。

方案2:预处理外部OpenAPI文件注入认证配置

编写简单的脚本(比如Python、Node.js脚本),在SAM部署前自动将API密钥认证的配置注入到openapi.yaml中,然后让SAM引用处理后的文件。这样既保留原始OpenAPI文件的纯净性,又能让SAM识别认证规则。

示例流程:

  1. 编写脚本inject-auth-config.js,读取原始openapi.yaml,给指定路径添加x-amazon-apigateway-auth字段,输出到processed-openapi.yaml。
  2. 在SAM部署脚本(比如CI/CD流水线)中先执行预处理脚本,再运行sam deploy。
  3. SAM模板中引用处理后的文件:
DefinitionBody:
  Fn::Transform:
    Name: AWS::Include
    Parameters:
      Location: processed-openapi.yaml

优点:原始OpenAPI文件保持标准格式,不受AWS专有字段污染;认证配置集中管理,便于批量修改。
缺点:需要额外维护预处理脚本,增加部署流程复杂度。

方案3:部署后通过API Gateway控制台手动绑定API密钥

如果是测试环境或非自动化部署场景,可以先通过SAM部署API(不带认证),然后在API Gateway控制台中:

  • 创建API密钥和使用计划
  • 将使用计划绑定到API的各个端点
  • 启用端点的API密钥认证

优点:无需修改SAM模板或OpenAPI文件,快速验证认证功能。
缺点:手动操作无法纳入CI/CD流程,生产环境不推荐,容易出现配置不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:48:23