保护您的 API

在 AWS 上开发应用

Ricardo Sueiras

Principal Technologist

在 AWS 上保护 API

 

securing api

  • 保护 API 对云原生应用至关重要。
  • 它们暴露敏感业务功能。
  • 往往是后端系统的公共入口。
  • API Gateway 可帮助安全公开 API。
在 AWS 上开发应用

授权与认证

 

authnauthz

  • 两个关键概念:
  • Authentication:您是谁。
  • Authorization:您能做什么。
在 AWS 上开发应用

IAM 授权

 

iam

  • API Gateway 可使用 IAM 进行认证和授权。
  • 通过 Signature Version 4(SigV4)保护 API。
  • 客户端为每个请求签名。
  • API Gateway 在处理前验证签名。
  • 随后由 IAM 策略控制各身份可调用内容。
  • 最适合 AWS 服务间通信。
在 AWS 上开发应用

Amazon Cognito 授权器

  • Cognito 使用 JSON Web Token(JWT)对用户进行认证。
  • 常见场景:移动应用、Web 应用、登录流程。
  • 支持联合身份。
  • 可与 Google、Apple、Facebook 等外部提供方协作。
  • 通过 SAML 或 OIDC 的企业级提供方。
  • 原生验证 JWT,无需自定义 authorizer 代码。

 

cogauthz

在 AWS 上开发应用

Lambda 授权器

  • 使用 Lambda 函数运行自定义授权逻辑。
  • 返回允许或拒绝访问的 IAM 策略。
  • 可用于验证自定义令牌。
  • 集成外部身份提供方。
  • 强制执行自定义规则。

 

lambda authorizer

在 AWS 上开发应用

Lambda 授权器

  • 例:验证来自 Auth0 等提供方的 JWT。
  • 请求到达时,API Gateway 调用授权器。
  • 函数验证令牌并返回 IAM 策略。
  • 策略决定访问:允许或拒绝。
  • 允许则将请求转发到后端。
  • 拒绝则 API Gateway 立即返回 401。

 

lambda authorizer

在 AWS 上开发应用

应选哪种授权器

 

choosing which authorizer

  • 面向用户的应用选用 Cognito。
  • 提供托管的注册、登录和令牌验证。
  • 无需自定义代码。
  • 需要自定义逻辑时选用 Lambda。
  • 适合第三方身份提供方。
  • 或超出 Cognito 能力的规则。
在 AWS 上开发应用

授权器缓存

 

caching authz

  • 授权器响应会被缓存。
  • 可降低高频端点的延迟与成本。
  • 缓存 TTL 可配置。
  • 范围 0–3600 秒。
  • 默认 300 秒。
  • 将 TTL 设为 0 可禁用缓存。
在 AWS 上开发应用

API Gateway 资源策略

 

resource policies

  • 定义策略以控制谁可访问 API。
  • 可按 AWS 账户限制。
  • 可按 IP 地址段限制。
  • 可按 VPC 限制。
  • 有助于锁定内部 API,降低暴露面。
在 AWS 上开发应用

加密

  • API Gateway 默认支持带 TLS 的 HTTPS 端点。
  • HTTPS 加密客户端与网关间的传输数据。
  • 与 AWS Certificate Manager(ACM)集成。
  • ACM 简化自定义域名的证书管理。
  • 自定义域名证书免费。
  • 切勿通过未加密的 HTTP 暴露 API。

 

encryption

在 AWS 上开发应用

双向 TLS(mTLS)

 

  • API Gateway 支持双向 TLS(mTLS)。
  • 通过证书认证客户端。
  • 需要已配置的域名。
  • 常用于机器到机器通信。
  • 双方相互验证身份。

 

mtls

在 AWS 上开发应用

API 限流与速率限制

  • 限流可保护后端系统。
  • 能提升 API 可靠性。
  • 否则后端服务可能过载。
  • 速率限制控制稳定的每秒请求数。
  • 突发限制允许短时流量峰值。
  • 超限将返回 429 Too Many Requests

 

throttling

在 AWS 上开发应用

防护常见攻击利用

 

waf

  • 将 AWS WAF 关联到 API Gateway。
  • 在请求到达您的 API 前拦截恶意请求。
  • 阻止 SQL 注入。
  • 阻止跨站脚本(XSS)。
  • 拦截来自已知恶意 IP 段的流量。
在 AWS 上开发应用

使用计划与 API 密钥

 

usage plans

  • 控制客户端如何使用您的 API。
  • 配置请求配额。
  • 定义速率限制。
  • 设置订阅层级。
  • 为每个客户端设定消耗上限。
在 AWS 上开发应用

跨域资源共享(CORS)

 

CORS

  • CORS 允许浏览器进行跨域 API 请求。
  • 否则有效的浏览器请求可能被阻止。
  • 过度放开的 CORS 存在安全风险。
  • 生产环境避免使用 Access-Control-Allow-Origin: *
  • 始终将 CORS 限制到受信任来源。
在 AWS 上开发应用

CORS 响应头与预检请求

  • 预检 OPTIONS 请求在实际请求前执行。
  • 用于确认 API 允许跨域访问。
  • API Gateway 会添加所需的 CORS 响应头。
  • 对于非代理集成,会自动处理。
  • 对于代理集成,您的 Lambda 必须返回 CORS 头。
  • 您的 Lambda 也需处理预检 OPTIONS

 

CORS headers

在 AWS 上开发应用

让我们一起练习吧!

在 AWS 上开发应用

Preparing Video For Download...