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

Posted

技术标签:

【中文标题】如果 AWS API 请求失败,我该如何调试我需要的权限?【英文标题】:Given a failed AWS API request, how can I debug what permissions I need? 【发布时间】:2018-09-06 03:26:37 【问题描述】:

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

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

给定一个请求 ID 和一个主机 ID,是否可以更深入地了解问题所在?

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

谢谢!

【问题讨论】:

我的问题最终出在 Workspaces 以及它们如何存储在 S3 上:terraform.io/docs/backends/types/s3.html 我想我的主要问题仍然存在,因为这将使调试变得更加容易。 我担心没有通用的解决方案。调试 terraform 的唯一记录方法是您实际编写的。但是,在这种情况下,您可以尝试使用 AWS cli 使用与 terraform 相同的凭证和 --debug 标志来重现请求。也许它可以为您提供有关该问题的更多信息。 【参考方案1】:

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

    创建一个trail in AWS CloudTrail。 CloudTrail 默认会在存储桶级别记录 API 调用(包括请求 ID)。如果请求是针对特定对象的,您需要在创建跟踪时启用 S3 数据事件。 开启S3 server access logs。

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

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

【讨论】:

感谢您的回答。我有点想可能是这种情况。令人遗憾的是,AWS 没有这种级别的 IAM 集成,因此您可以看到问题所在。

以上是关于如果 AWS API 请求失败,我该如何调试我需要的权限?的主要内容,如果未能解决你的问题,请参考以下文章

(ASK) 我们如何使用 AWS api 网关调试本地 websocket

如何调试失败的 AWS 弹性负载均衡器健康检查

如何调试 ElasticBeanstalk 错误“X% 的请求因 HTTP 5xx 失败”

如何调试 AWS Elastic Beanstalk 中的性能问题

AWS API Gateway 和静态 HTML:“由于配置错误,执行失败:statusCode 应该是请求模板中定义的整数”

如何调试失败的NetCore AWS Elastic Beanstalk部署?