You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Cognito每秒请求数超出配额阈值时触发告警并限流

Amazon Cognito 认证请求限流与告警落地方案

整体实现逻辑

  • 三层限流拦截:前端滑动窗口限流→API Gateway网关限流→Cognito服务配额兜底,逐层拦截超额请求,避免Cognito过载
  • 告警规则绑定:通过CloudWatch监控Cognito认证请求指标、API Gateway限流触发指标,超阈值时触发多渠道告警
  • 降级逻辑统一:所有限流场景返回标准化提示,同时记录全量错误日志到持久化存储,方便后续排查

具体配置操作

1. Cognito配额与监控配置

首先确认你的Cognito用户池默认认证请求配额:AWS默认单用户池的InitiateAuth接口配额为每秒50次请求,突发峰值支持100次,如果业务需要更高配额,可在AWS服务配额控制台提交提升申请。
CloudWatch告警配置步骤:

  • 进入CloudWatch控制台,创建告警,选择Cognito的UserAuthentication指标
  • 统计方式选Sum,统计周期设为1秒
  • 阈值设置为你设定的每秒最大请求量,连续1个周期超出阈值即触发告警
  • 关联SNS主题,绑定运维通知渠道(邮箱、企业微信机器人、短信等)

2. API Gateway 限流配置

所有发往Cognito的认证请求统一经过API Gateway转发,在对应路由的限流配置项中设置:

  • 速率限制(Rate limit):设置为每秒允许的平均认证请求量
  • 突发限制(Burst limit):设置为允许的瞬时最大请求量
    配置完成后,超过限流阈值的请求会被API Gateway直接拦截,不会转发到Cognito服务。

示例代码(Node.js 中间层实现)

const { CognitoIdentityProviderClient, InitiateAuthCommand } = require("@aws-sdk/client-cognito-identity-provider");
const { rateLimit } = require('express-rate-limit');
const client = new CognitoIdentityProviderClient({ region: "us-east-1" });

// 本地限流规则:单IP每秒最多10次认证请求,可根据业务调整
const authLimiter = rateLimit({
  windowMs: 1000,
  limit: 10,
  standardHeaders: true,
  legacyHeaders: false,
  // 前端/中间层限流触发处理
  handler: (req, res) => {
    const errMsg = "当前认证请求量过大,请1秒后重试";
    const logPath = "/aws/cloudwatch/logs/us-east-1/cognito-auth-error-log-group";
    // 错误日志写入CloudWatch
    console.error(JSON.stringify({
      type: "AUTH_THROTTLE",
      ip: req.ip,
      timestamp: Date.now(),
      message: errMsg,
      logStorage: logPath
    }));
    res.status(429).json({
      code: "AUTH_RATE_LIMIT_EXCEEDED",
      message: errMsg,
      errorLogStorage: logPath
    });
  }
});

// 认证接口核心逻辑
app.post('/api/auth', authLimiter, async (req, res) => {
  try {
    const { username, password } = req.body;
    const command = new InitiateAuthCommand({
      AuthFlow: "USER_PASSWORD_AUTH",
      ClientId: process.env.COGNITO_CLIENT_ID,
      AuthParameters: {
        USERNAME: username,
        PASSWORD: password
      }
    });
    const response = await client.send(command);
    res.status(200).json(response.AuthenticationResult);
  } catch (err) {
    // 捕获Cognito服务端返回的限流错误
    if (err.name === "TooManyRequestsException") {
      const errMsg = "服务端认证请求量已达上限,请稍后重试";
      const logPath = "/aws/cloudwatch/logs/us-east-1/cognito-auth-error-log-group";
      console.error(JSON.stringify({
        type: "COGNITO_THROTTLE",
        username: username,
        timestamp: Date.now(),
        cognitoError: err.message,
        logStorage: logPath
      }));
      return res.status(429).json({
        code: "COGNITO_RATE_LIMIT_EXCEEDED",
        message: errMsg,
        errorLogStorage: logPath
      });
    }
    // 其他业务错误处理
    res.status(400).json({ code: err.name, message: err.message });
  }
});

超限请求返回响应示例

中间层限流触发返回

{
  "code": "AUTH_RATE_LIMIT_EXCEEDED",
  "message": "当前认证请求量过大,请1秒后重试",
  "errorLogStorage": "/aws/cloudwatch/logs/us-east-1/cognito-auth-error-log-group"
}

Cognito服务配额超限触发返回

{
  "code": "COGNITO_RATE_LIMIT_EXCEEDED",
  "message": "服务端认证请求量已达上限,请稍后重试",
  "errorLogStorage": "/aws/cloudwatch/logs/us-east-1/cognito-auth-error-log-group"
}

内容的提问来源于stack exchange,提问作者pqthinh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:06:05