如何解决 IAM 和 AWS STS 的 API 节流或“速率超出”错误?

上次更新时间:2022 年 1 月 24 日

我的应用程序收到类似于以下内容的错误消息:

“节流:超出速率,状态代码:400,”

简短描述

来自 AWS 管理控制台、AWS Command Line Interface(AWS CLI)和应用程序的 API 调用会影响您的 AWS 账户的最大速率限制。

注意:无法提高 AWS 服务速率限制。

解决方法

请遵循以下最佳实践以避免出现节流错误。

  • 在应用程序的代码中实现指数回退。指数回退允许每次限制对 AWS 的 API 调用时等待更长的时间。根据应用程序的不同,最大延迟次数和最大重试次数可能会有所不同。
    注意:AWS 开发工具包都会实现自动重试逻辑和指数回退算法。
  • 某些应用程序可以实现缓存以降低 API 调用的速率。例如,如果您的应用程序为跨账户工作流调用 API 调用 AssumeRole,则您收到的临时凭证会被存储并将重复用于多次跨账户调用。这意味着您无需为每个跨账户 API 调用进行新的 AssumeRole 调用。
  • 如果您的应用程序正在调用 AssumeRole 并缓存凭证,则可以检查该角色的临时证书最长会话持续时间。延长临时凭证的有效期可确保您无需经常调用 AssumeRole。
  • 将您的 API 调用分散到更长的时间内,而非一次性调用所有 API。例如,每天都调用 SimulatePrincipalPolicyGenerateServiceLastAccessedDetails 来审计 AWS Identity and Access Management(IAM)用户和角色权限的任务的应用程序。您可以错开 API 调用,而非同时运行它们。
  • 对于使用 API 调用(如 CreatePolicyVersion)动态更改 IAM 策略权限的应用程序,请考虑使用另一种方法。例如,您可以在 IAM 角色担任期间使用会话策略
  • 对于 AWS Security Token Service(AWS STS)节流错误,请考虑使用区域 STS 端点,而非将所有 AWS STS 调用发送到全局端点。每个端点都有单独的节流限制。使用区域性 AWS STS 端点可以让应用程序更快地响应 AWS STS API 调用。
  • 如果您不确定您的 AWS 账户中的哪个 IAM 用户或角色正在进行大量 API 调用,请使用 AWS CloudTrail 查看事件历史记录。您还可以使用 Amazon Athena 运行 SQL 查询和筛选 CloudTrail 日志。说明请参见如何找出哪个 API 调用导致了“速率超出”错误?
  • 由于 AWS 账户有单独的节流限制,请考虑使用 AWS Organizations 将工作负载分散到多个账户。创建新的 AWS 账户无需额外成本,而且 AWS Organizations 提供整合账单。通过使用服务控制策略(SCP),您可以控制 AWS 账户中 IAM 用户和角色的最大权限。有关更多信息,请参阅通过 AWS Organizations 管理账户如何开始使用 AWS Organizations?

这篇文章对您有帮助吗?


您是否需要账单或技术支持?