API Gateway不当校验Authorization头,CloudFormation创建VPCE后自定义请求被拒
问题根因
你遇到的IncompleteSignatureException报错是AWS execute-api VPC端点的已知行为导致的:当你通过CloudFormation显式为VPC端点配置PolicyDocument(哪怕是全允许的通配符策略)时,API Gateway会强制对所有经过该端点的请求的Authorization头做AWS SigV4签名校验,即使你的API方法授权配置已经设为NONE也不会跳过该校验。
而手动在控制台创建VPC端点时,默认使用隐式的全允许策略,不会触发该强制校验逻辑,这也是你手动重建后功能正常、返回头x-amzn-vpce-config值为1的原因。
解决方案
方案1(推荐):移除CloudFormation中VPC端点的显式策略配置
VPC端点的默认策略本身就是允许所有主体访问所有操作的全权限策略,你可以直接删除模板中PolicyDocument整段配置,修改后的VPC端点模板如下:
ApiGatewayVPCEndpoint: Type: AWS::EC2::VPCEndpoint Properties: PrivateDnsEnabled: true ServiceName: !Sub com.amazonaws.${AWS::Region}.execute-api SecurityGroupIds: - !Ref [my sec group] SubnetIds: - !Ref [subnet a] - !Ref [subnet b] - !Ref [subnet c] VpcEndpointType: Interface VpcId: !Ref [my vpc]
更新CloudFormation栈后重新部署API,自定义Authorization头就会正常透传给后端Lambda,不会被API Gateway拦截。
方案2(适用于需要自定义VPC端点权限的场景)
如果业务需要限制VPC端点的访问权限,不能删除显式策略,可以在对应API Gateway的资源策略中添加如下规则,跳过IAM签名校验:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:<你的AWS区域>:<你的AWS账号ID>:<你的API ID>/*/*/*", "Condition": { "StringEquals": { "aws:SourceVpce": "<你的VPC端点ID>" } } } ] }
配置完成后重新部署API即可生效。
内容的提问来源于stack exchange,提问作者404
相关产品推荐
相关产品推荐

