如何排查具有公共读取访问权限的 Amazon S3 桶中的 403 Access Denied 错误?

1 分钟阅读
0

我尝试访问我的 Amazon Simple Storage Service(Amazon S3)桶中的一个对象,该通允许公众读取访问。但是,我收到 403 Access Denied 错误。

解决方法

如果您无法访问公有 S3 桶中的对象,请在 AWS Systems Manager 上运行 AWSSupport-TroubleshootS3PublicRead 自动化运行手册。这能帮助您分析一些影响桶和其对象的权限设置,例如:桶策略以及对象访问控制列表(ACL)。

注意:****AWSSupport-TroubleshootS3PublicRead运行手册分析了公开可读取对象的 403 错误。不会评估私有对象的权限。

  1. 打开 Systems Manager 控制台
  2. 在导航窗格中,选择自动化
  3. 选择执行自动化
  4. 选择文档中,选择 Amazon拥有选项卡。
  5. 自动化文档搜索栏中,输入 AWSSupport-TroubleshootS3PublicRead,然后按确认
  6. 选择 AWSSupport-TroubleshootS3PublicRead
  7. 选择执行自动化
  8. 选择简单执行
  9. (可选)在 AutomationAssumeRole 中,您可以选择一个 AWS 身份和访问管理(IAM)角色,Systems Manager 假定该角色向您的桶发送请求。如果您将此字段留空,则 Systems Manager 将使用您当前的 IAM 身份来设置运行手册。
    重要事项:您所选择的 IAM 角色的信任策略必须要允许 Systems Manager Automation 代入该角色。此外,IAM 角色必须拥有运行手册所需要的权限。请参阅 AWSSupport-TroubleshootS3PublicRead 中的必需的 IAM 权限部分。
  10. S3BucketName 中,输入要进行故障排除的 S3 桶名称。
  11. (可选)在 S3PrefixName 中,您可以指定要分析的前缀。如果将此字段留空,则运行手册将列出桶并按字典顺序对前几个对象进行评估。
  12. (可选)在 StartAfter 中,您可以指定希望运行手册开始从此处列出的密钥名称。
  13. MaxObjects 中,输入您希望运行手册评估的对象的数量上限。默认值为五。
  14. 对于 IgnoreBlockPublicAccess,最佳做法是将该值保留为 false
    **警告:**如果您将该值更改为 true,则会忽略可能阻止访问的 Amazon S3 屏蔽公共访问权限设置。
  15.     在 HttpGet中,如果您希望运行手册为每个对象都执行局部的 HTTP GET 请求(第一个字节),请将该值保留为 true。如果您希望运行手册执行完整的 GET 请求,请将该值更改为false
  16. Verbose中,若要在分析过程中查看详细信息,请输入 true。如果仅查看警告和错误消息,请输入 false
  17. (可选)在 CloudWatchLogGroupName中,您可以输入想要向其发送分析结果的 Amazon CloudWatch 日志组的名称。如果您指定了名称但日志组不存在,则运行手册会尝试使用该名称创建日志组。
  18. (可选)在 CloudWatch LogStreamName中,您可以输入想要向其发送分析结果的 CloudWatch 日志流名称。如果您指定了名称但日志组不存在,则运行手册会尝试使用该名称创建日志组。如果将此字段留空,则运行手册将使用运行手册的执行 ID 作为日志流名称。
  19. ResourcePartition中,选择 S3 桶所在的分区。选项包括 awsaws-us-govaws-cn
  20. (可选)在标签中,最多可输入 5 个键值对标签。
  21. 选择执行
  22. 借助执行状态来跟踪运行手册的进度。
  23. 当状态显示成功之后,查看输出中列出的结果。结果可能包括运行手册已经评估的每个对象的错误代码。使用这些错误代码诊断每个对象的匿名请求出现 Access Denied 错误的原因。
    提示:若要查看评估中每一个步骤的结果,请在已执行步骤的下方选择相关的步骤 ID。已执行步骤列在执行状态的下方。
AWS 官方
AWS 官方已更新 8 个月前