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

1 分钟阅读
0

我的应用程序收到类似于以下内容的错误消息: “节流:超出速率,状态代码: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?

相关信息

如何在 Amazon Athena 中自动创建表以搜索 AWS CloudTrail 日志记录?

AWS 官方
AWS 官方已更新 2 年前