通过限制访问优化和保护AWS HTTP API Gateway - SkildOps
作者:API传播员 · 2025-11-01 · 阅读时间:4分钟
通过限制访问优化和保护 AWS HTTP API Gateway 是提升 API 安全性的重要措施。本文将详细介绍如何通过 AWS HTTP API Gateway、CloudFront 和 Lambda 授权器的结合,限制对 API 的直接访问,从而有效防止潜在的攻击。
HTTP API 网关
AWS HTTP API 网关是一种经济高效的方式,用于快速部署 RESTful API,同时保持基本的安全性、性能、可扩展性和可观察性。然而,与 REST API 网关相比,HTTP API 网关缺少一些高级功能,例如 WAF 附件、资源策略、API 密钥管理、缓存、金丝雀部署、请求主体转换和 X-Ray 跟踪等。
为了提高安全性,我们需要限制对 HTTP API 网关 URL 的直接访问。以下是实现步骤:
- 创建 HTTP API 网关:
- 登录 AWS 管理控制台,导航到 API Gateway。
- 启动新的 HTTP API 网关,点击“构建”按钮。
- 点击 添加集成 按钮,选择 HTTP 作为集成类型,GET 作为方法类型。
- 在 URL 端点中,输入一个模拟端点(例如使用 Beeceptor 创建的端点)。
- 为 API 网关命名后,点击“下一步”并检查所有输入,确认无误后点击 创建 按钮。
配置 CloudFront
通过 CloudFront 创建分发版,可以进一步保护 API 网关。以下是配置步骤:
第 1 节:起源设置
- 在 添加自定义标题 下,点击“添加标题”按钮。
- 添加一个自定义标头,例如 x-cf-api-gateway-token,其值为一个随机字符串,用于验证请求。
- 该标头将由 CloudFront 转发到 API 网关,并在下一步中通过 Lambda 授权器进行验证。
第 2 节:默认缓存行为
- 保持 功能关联、WAF 和 设置 部分的默认值。
- 创建分发版。
配置 Lambda 授权器
Lambda 授权器用于验证来自 CloudFront 的请求标头,从而限制对 API 网关的直接访问。
创建 IAM 角色
在创建 Lambda 函数之前,需要创建一个 IAM 角色,允许函数读取 SSM 参数:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
执行以下命令创建角色:
aws iam create-role --role-name api-cf-demo-role --assume-role-policy-document file://assume-role-policy-doc.json
为角色添加 SSM 访问权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:GetParameter",
"Resource": "arn:aws:ssm:aws_REGION:aws_ACCOUNT_ID:parameter/ssm_METER_NAME"
}
]
}
执行以下命令应用策略:
aws iam put-role-policy --role-name api-cf-demo-role --policy-name ssm-access --policy-document file://ssm-access-policy.json
附加 Lambda 基本执行角色:
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole --role-name api-cf-demo-role
创建 Lambda 函数
- 导航到 Lambda 控制台,创建新函数。
- 选择 Python 3.11 作为运行时,x86_64 作为架构。
- 使用之前创建的 IAM 角色作为执行角色。
配置 Lambda 授权器
- 在 API 网关页面,点击左侧面板中的 授权,切换到 管理授权者 选项卡。
- 点击“创建授权者”,选择 Lambda 作为类型。
- 输入授权者名称,选择 Lambda 函数及其区域。
- 禁用 授权缓存,并删除预填充的 身份源。
- 确保 调用权限 开关已启用,以允许 API 网关调用 Lambda 函数。
测试实现
完成上述配置后,访问 API 网关和 CloudFront 的 URL:
- 直接访问 API 网关 URL 时,应返回 403 Forbidden 错误。
- 通过 CloudFront URL 访问时,应返回正常响应。
通过结合使用 AWS HTTP API 网关、CloudFront 和 Lambda 授权器,我们可以有效保护 API,防止未经授权的访问。这种方法不仅提高了安全性,还确保了系统的可扩展性和性能。
原文链接: https://skildops.com/blog/optimise-and-secure-aws-http-api-gateway-by-locking-down-direct-access
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- DRF库详解:用Django轻松搭建功能强大的API服务
- 一文搞懂在 HTTP 如何 one-api 调用,实操指南来袭!
- 探索海洋数据的宝库:Amentum海洋数据探测API的潜力
- 云原生 API 网关 APISIX 入门教程
- API Key 密钥:深入理解与应用
- 2025年国内免费生成式 AI API 平台大盘点:探索国产大模型的开放能力
- 使用DeepSeek和Claude绘制出高质量的SVG 图片
- 精通REST API:解析iOS开发中的核心要点
- ASP.NET Core Web API 的授权指南 – Auth0
- Supertest:如何像专业人士一样测试API – Testim博客
- Next.js API 路由:GET 和 POST 请求示例
- Kimi K2 API 调用全指南:解锁国产大模型的强大能力