如果 AWS API 请求失败,我该如何调试我需要的权限?

Given a failed AWS API request, how can I debug what permissions I need?

我正在使用 Terraform 在 AWS 上配置一些资源。 运行 Terraform 的 "plan" 步骤失败并出现以下模糊错误(例如):

Error: Error loading state: AccessDenied: Access Denied
        status code: 403, request id: ABCDEF12345678, host id: SOMELONGBASE64LOOKINGSTRING===

给定一个请求 ID 和一个主机 ID 是否可以更深入地了解哪里出了问题?

设置 TF_LOG=DEBUG(或其他级别)似乎有帮助,但我很好奇是否有 CLI 命令可以从 CloudTrail 或其他东西获取更多信息。

谢谢!

Terraform 不会有任何关于拒绝访问的特权信息,但 AWS 有。因为您提到 S3 是问题所在,所以我的回答基于查找 S3 请求 ID。您有几个选项可以在 AWS 中找到给定请求 ID 的请求。

  1. 创建 trail in AWS CloudTrail。默认情况下,CloudTrail 将在存储桶级别记录 API 次调用(包括请求 ID)。如果请求针对特定对象,则需要在创建跟踪时启用 S3 数据事件。
  2. 开启S3 server access logs

您可以在 S3 的日志文件中手动搜索请求 ID 或使用 Athena。对于 CloudTrail,您还可以配置 CloudWatch Logs 并在通过搜索栏创建的日志组中进行搜索。

CloudTrail 记录来自所有服务的 API 调用,而不仅仅是 S3。除了与 S3 相关的问题之外,它可能是诊断问题的有用工具。请注意,日志出现在 CloudTrail 中可能会有长达 15 分钟的延迟。