如何在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
相关产品推荐
相关产品推荐

