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

1 分钟阅读
0

我的应用程序收到一条类似于 “Throttling: Rate exceeded, status code: 400,”这样的错误消息。

简短描述

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

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

解决方法

为避免节流错误,请遵循以下最佳实践:

  • 在应用程序的代码中实现指数回退。通过指数回退,每次限制对 AWS 的 API 调用时,延迟时间会更长一些。根据应用程序的不同,最大延迟次数和最大重试次数可能会有所不同。
    注意: AWS SDK 会实现自动重试逻辑和指数回退算法。
  • 一些应用程序可通过实现缓存来降低 API 调用的速率。例如,假设您的应用程序为跨账户工作流程调用 API 调用 AssumeRole。这意味着您收到的临时凭证可存储并重复用于多个跨账户调用。此外,您无需为每次跨账户 API 调用进行新的 AssumeRole 调用。
  • 如果您的应用程序调用 AssumeRole 并缓存凭证,请检查该角色的临时凭证最大会话持续时间。延长临时凭证的持续时间后,无需经常调用 AssumeRole
  • 将您的 API 调用分散在一段更长的时间内,而不是一次性调用 API。例如,每天有任务调用 SimulatePrincipalPolicyGenerateServiceLastAccessedDetails 来审计 AWS Identity and Access Management(AWS IAM)用户和角色的权限的应用程序。您可以错开调用 API,而不是同时运行 API 调用。
  • 对于使用 CreatePolicyVersion 等 API 调用动态更改 IAM 策略权限的应用程序,可以考虑另一种方法。例如,您可以在 IAM 角色代入期间使用会话策略
  • 对于 AWS Security Token Service (AWS STS) 节流错误,请使用 AWS 区域 STS 端点,而不是将所有 AWS STS 调用发送到全局端点。每个端点都有单独的节流限制。区域性 AWS STS 端点可以让应用程序 AWS STS API 调用的响应时间更快。
  • 由于 AWS 账户有单独的节流限制,因此可以考虑使用 AWS Organizations 将工作负载分散到多个账户。创建新的 AWS 账户无需额外的费用,AWS Organizations 会提供整合账单。服务控制策略 (SCP) 允许您控制 AWS 账户中 IAM 用户和角色的最大权限。有关更多信息,请参阅通过 AWS Organizations 管理账户如何开始使用 AWS Organizations?

相关信息

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

如何找到哪个 API 调用导致 “超出速率” 错误?

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