如何限制API Gateway访问权限?仅允许公司内部用户访问
限制API Gateway仅允许公司内部用户访问的最简方案
要快速实现你的需求,基于IP地址的资源策略限制是最简单的方案——不需要引入额外身份验证服务,只需修改现有SAM模板中的API Gateway配置即可。
当前问题分析
你当前的API Gateway资源策略设置了Principal: "*",这直接允许所有公网用户调用API,是导致公网可访问的核心原因。
步骤1:修改API Gateway资源策略
将MyApiGateway下的Auth.ResourcePolicy.CustomStatements替换为以下内容,把示例中的IP段替换成你公司的公网IP段(支持多个CIDR地址):
MyApiGateway: Type: AWS::Serverless::Api Properties: # 保留原有Name、TracingEnabled、OpenApiVersion等配置... Cors: AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'" AllowMethods: "'*'" AllowOrigin: "'*'" # 后续可按步骤2收紧 StageName: test Auth: ResourcePolicy: CustomStatements: - Effect: Allow Principal: "*" Action: "execute-api:Invoke" Resource: "execute-api:us-east-1:xxxxxxx4:qkmigyu020/test/GET/pets" Condition: IpAddress: aws:SourceIp: - "192.168.0.0/16" # 替换为公司公网IP段 - "203.0.113.0/24" # 可添加多个IP段
通过aws:SourceIp条件,仅允许来自指定IP段的请求调用API,直接阻断外部公网访问。
步骤2:收紧CORS配置(可选但推荐)
当前CORS设置AllowOrigin: "'*'"允许所有域名跨域请求,建议改成公司内部的域名或IP,降低安全风险:
Cors: AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'" AllowMethods: "'*'" AllowOrigin: "'https://your-company-internal-domain.com'" # 替换为内部域名/IP
其他可选方案(若IP限制不适用)
如果公司内部用户分布在动态IP环境,可考虑以下方案:
- IAM身份验证:要求用户使用公司统一的IAM凭证调用API,修改资源策略的
Principal为公司IAM用户/角色ARN,并在API Gateway启用IAM授权。 - API密钥:生成专属API密钥分发给内部用户,在API Gateway启用密钥验证,但需要管理密钥的分发与生命周期。
但IP限制是最直接、维护成本最低的方案,适合固定IP段的公司内部场景。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

