保护您的 API
在 AWS 上开发应用
Ricardo Sueiras
Principal Technologist
在 AWS 上保护 API
- 保护 API 对云原生应用至关重要。
- 它们暴露敏感业务功能。
- 往往是后端系统的公共入口。
- API Gateway 可帮助安全公开 API。
授权与认证
- 两个关键概念:
- Authentication:您是谁。
- Authorization:您能做什么。
IAM 授权
- API Gateway 可使用 IAM 进行认证和授权。
- 通过 Signature Version 4(SigV4)保护 API。
- 客户端为每个请求签名。
- API Gateway 在处理前验证签名。
- 随后由 IAM 策略控制各身份可调用内容。
- 最适合 AWS 服务间通信。
Amazon Cognito 授权器
- Cognito 使用 JSON Web Token(JWT)对用户进行认证。
- 常见场景:移动应用、Web 应用、登录流程。
- 支持联合身份。
- 可与 Google、Apple、Facebook 等外部提供方协作。
- 通过 SAML 或 OIDC 的企业级提供方。
- 原生验证 JWT,无需自定义 authorizer 代码。
Lambda 授权器
- 使用 Lambda 函数运行自定义授权逻辑。
- 返回允许或拒绝访问的 IAM 策略。
- 可用于验证自定义令牌。
- 集成外部身份提供方。
- 强制执行自定义规则。
Lambda 授权器
- 例:验证来自 Auth0 等提供方的 JWT。
- 请求到达时,API Gateway 调用授权器。
- 函数验证令牌并返回 IAM 策略。
- 策略决定访问:允许或拒绝。
- 允许则将请求转发到后端。
- 拒绝则 API Gateway 立即返回 401。
应选哪种授权器
- 面向用户的应用选用 Cognito。
- 提供托管的注册、登录和令牌验证。
- 无需自定义代码。
- 需要自定义逻辑时选用 Lambda。
- 适合第三方身份提供方。
- 或超出 Cognito 能力的规则。
授权器缓存
- 授权器响应会被缓存。
- 可降低高频端点的延迟与成本。
- 缓存 TTL 可配置。
- 范围 0–3600 秒。
- 默认 300 秒。
- 将 TTL 设为 0 可禁用缓存。
API Gateway 资源策略
- 定义策略以控制谁可访问 API。
- 可按 AWS 账户限制。
- 可按 IP 地址段限制。
- 可按 VPC 限制。
- 有助于锁定内部 API,降低暴露面。
加密
- API Gateway 默认支持带 TLS 的 HTTPS 端点。
- HTTPS 加密客户端与网关间的传输数据。
- 与 AWS Certificate Manager(ACM)集成。
- ACM 简化自定义域名的证书管理。
- 自定义域名证书免费。
- 切勿通过未加密的 HTTP 暴露 API。
双向 TLS(mTLS)
- API Gateway 支持双向 TLS(mTLS)。
- 通过证书认证客户端。
- 需要已配置的域名。
- 常用于机器到机器通信。
- 双方相互验证身份。
API 限流与速率限制
- 限流可保护后端系统。
- 能提升 API 可靠性。
- 否则后端服务可能过载。
- 速率限制控制稳定的每秒请求数。
- 突发限制允许短时流量峰值。
- 超限将返回
429 Too Many Requests。
防护常见攻击利用
- 将 AWS WAF 关联到 API Gateway。
- 在请求到达您的 API 前拦截恶意请求。
- 阻止 SQL 注入。
- 阻止跨站脚本(XSS)。
- 拦截来自已知恶意 IP 段的流量。
使用计划与 API 密钥
- 控制客户端如何使用您的 API。
- 配置请求配额。
- 定义速率限制。
- 设置订阅层级。
- 为每个客户端设定消耗上限。
跨域资源共享(CORS)
- CORS 允许浏览器进行跨域 API 请求。
- 否则有效的浏览器请求可能被阻止。
- 过度放开的 CORS 存在安全风险。
- 生产环境避免使用
Access-Control-Allow-Origin: *。
- 始终将 CORS 限制到受信任来源。
CORS 响应头与预检请求
- 预检
OPTIONS 请求在实际请求前执行。
- 用于确认 API 允许跨域访问。
- API Gateway 会添加所需的 CORS 响应头。
- 对于非代理集成,会自动处理。
- 对于代理集成,您的 Lambda 必须返回 CORS 头。
- 您的 Lambda 也需处理预检
OPTIONS。
Preparing Video For Download...