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

如何在CloudFormation模板中为REST API指定TLS版本并配置API方法的HTTP/HTTPS访问规则

在CloudFormation中配置API Gateway的HTTP/HTTPS支持与TLS版本

嘿,我来帮你理清楚这两个配置点,结合你给出的模板,直接给你可落地的方案:

一、控制API方法仅支持HTTPS(或HTTP)

首先,API Gateway的REGIONAL/EDGE类型端点默认同时开放HTTP和HTTPS。如果要让你的API方法只接受HTTPS请求,得在AWS::ApiGateway::Stage资源里配置MethodSettings,通过RequireHTTPS参数来强制。要是想给所有方法都加上这个限制,用通配符/*/*就能全局生效。

要是你想彻底禁用HTTP访问(不止是方法层面),还有两个办法:一是用PRIVATE类型的端点,这种端点天然只支持HTTPS;二是搭配WAF规则拦截所有HTTP请求。当然,方法层面的强制已经能满足大部分场景的需求了。

二、指定API使用的TLS版本

要指定TLS版本,同样是在AWS::ApiGateway::Stage里设置SecurityPolicy属性。目前支持的选项有TLS_1_0、TLS_1_1、TLS_1_2(这个是推荐的,符合大多数安全合规要求),部分区域还支持TLS_1_3。

整合后的完整模板示例

我把你的模板修改了下,加上了强制HTTPS和指定TLS 1.2的配置,你可以直接参考:

AWSTemplateFormatVersion: 2010-09-09
Description: API Gateway with HTTPS-only and TLS 1.2 configuration
Parameters:
  apiGatewayHTTPMethod:
    Type: String
    Default: POST
Resources:
  apiGateway:
    Type: AWS::ApiGateway::RestApi
    Properties:
      EndpointConfiguration:
        Types:
          - REGIONAL # 换成PRIVATE的话就天然只支持HTTPS,不用额外配置
      Name: fooAPI
  apiGatewayRootMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      AuthorizationType: NONE
      HttpMethod: !Ref apiGatewayHTTPMethod
      Integration:
        IntegrationHttpMethod: POST
        Type: AWS_PROXY
        Uri: !Sub
          - arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${lambdaArn}/invocations
          - lambdaArn: !GetAtt lambdaFunction.Arn
      ResourceId: !GetAtt apiGateway.RootResourceId
      RestApiId: !Ref apiGateway
  apiGatewayDeployment:
    Type: AWS::ApiGateway::Deployment
    DependsOn:
      - apiGatewayRootMethod
    Properties:
      RestApiId: !Ref apiGateway
      StageName: BETA
  # 新增Stage资源来配置HTTPS强制和TLS版本
  apiGatewayStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      DeploymentId: !Ref apiGatewayDeployment
      RestApiId: !Ref apiGateway
      StageName: BETA
      # 指定使用TLS 1.2版本
      SecurityPolicy: TLS_1_2
      # 对所有资源路径和HTTP方法强制HTTPS访问
      MethodSettings:
        - ResourcePath: "/*"
          HttpMethod: "*"
          RequireHTTPS: true
  # 补充Lambda函数和执行角色的示例配置(你可以根据实际需求修改)
  lambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.9
      Handler: index.lambda_handler
      Code:
        ZipFile: |
          def lambda_handler(event, context):
              return {
                  'statusCode': 200,
                  'body': 'Hello from Lambda!'
              }
      Role: !GetAtt lambdaExecutionRole.Arn
  lambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

关键配置说明

  • 强制HTTPS:MethodSettings里的RequireHTTPS: true会让所有匹配的方法拒绝HTTP请求,只接受HTTPS,避免明文传输的安全风险。
  • 指定TLS版本:SecurityPolicy: TLS_1_2确保API只处理使用TLS 1.2及以上版本加密的HTTPS请求,满足PCI-DSS等合规要求。
  • 要是你真的需要仅支持HTTP(非常不推荐,安全性极低),可以把RequireHTTPS设为false,但API Gateway默认同时允许HTTP和HTTPS,除非你额外拦截HTTPS请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:19:11