如何排查具有公共读取访问权限的 Amazon S3 存储桶中的“403 访问被拒绝”错误?
上次更新日期:2021 年 4 月 29 日
我正在尝试访问我的 Amazon 简单存储服务 (Amazon S3) 存储桶中允许公共读取访问的对象。但是,我收到了 403 访问被拒绝错误。如何解决此错误?
解决方法
要诊断从公共 S3 存储桶访问对象时出现的问题,请(在 AWS Systems Manager 上)运行 AWSSupport-TroubleshootS3PublicRead 自动化文档。本文档分析了一些会影响到存储桶和对象的权限设置,例如存储桶策略和对象访问控制列表 (ACL)。
注意:AWSSupport-TroubleshootS3PublicRead 文档会对来自公共可读对象的 403 错误进行分析。文档不会对私有对象的权限进行评估。
按照以下步骤,使用 Systems Manager 控制台运行 AWSSupport-TroubleshootS3PublicRead 自动化文档:
1. 打开 Systems Manager 控制台。
2. 在导航窗格中,选择 Automation(自动化)。
3. 选择 Execute automation(执行自动化)。
4. 在 Choose document(选择文档)项下,选择 Owned by Amazon(由 Amazon 所拥有)选项卡。
5. 在Automation document(自动化文档)搜索栏中,输入 AWSSupport-TroubleshootS3PublicRead,然后按 Enter。
6. 选择 AWSSupport-TroubleshootS3PublicRead。
7. 选择 Execute automation(执行自动化)。
8. 选择 Simple execution(简单执行)。
9. (可选)对于 AutomationAssumeRole,您可以选择一个 AWS Identity and Access Management (IAM) 角色,这样 Systems Manager 可以代入该角色,以向您的存储桶发送请求。如果将此字段留空,Systems Manager 将使用您用于设置文档的 IAM 标识。
重要提示:您选择的 IAM 角色的信任策略必须允许 Systems Manager Automation 代入该角色。此外,IAM 角色必须具有运行 AWSSupport-TroubleshootS3PublicRead 自动化文档的权限。
10. 对于 S3BucketName,请输入要进行问题排查的 S3 存储桶的名称。
11. (可选)对于 S3PrefixName,您可以对要分析的前缀进行指定。如果将此字段留空,则文档将列出存储桶并按字典顺序对前几个对象进行评估。
12. (可选)对于 StartAfter,您可以指定希望文档从中开始列示的密钥名称。
13. 对于 MaxObjects,请输入您希望文档进行评估的对象数的上限。默认数量为 5。
14. 对于 IgnoreBlockPublicAccess,最佳做法是将该值保留为 false。
警告:若将此值更改为 true,文档随即会忽略 Amazon S3 阻止公有访问设置,这可能会阻止访问。
15. 对于 HttpGet,如果希望文档对所分析的每个对象执行部分 HTTP GET 请求(首字节),请将该值保留为 true。如果希望文档执行完整的 GET 请求,请将该值更改为 false。
16. 对于Verbose(详细信息),如果希望在分析过程中查看详细信息,请输入 true。如果您只想看到警告和错误消息,请输入 false 。
17. (可选)对于 CloudWatchLogGroupName,您可以输入要向其发送分析结果的 Amazon CloudWatch 日志组名称。如果您指定了一个名称但日志组不存在,则文档将尝试创建具有该名称的日志组。
18. (可选)对于 CloudWatchLogStreamName,您可以输入要向其发送分析结果的 CloudWatch 日志流名称。如果您指定了一个名称但日志组不存在,则文档会尝试创建具有该名称的日志组。如果将此字段留空,则文档将使用文档的执行 ID 作为日志流名称。
19. 对于 ResourcePartition,请选择 S3 存储桶所在的分区。这些选项包括 aws、aws-us-gov 或 aws-cn。
20. (可选)对于标签,请最多输入五个键值对标签。
21. 选择 Execute(执行)。
22. 可使用 Execution status(执行状态)来跟踪文档的进度。
23. 状态显示为成功后,请查看输出中列出的结果。结果可能包含所评估的每个对象的错误代码。错误代码可以帮助诊断向每个对象发出匿名请求的“访问被拒绝”错误的原因。
提示:要查看评估中单个步骤的结果,请在Executed steps(已执行步骤)项下选择相关的步骤 ID。Execution status(执行状态)下方列有 Executed Steps(已执行步骤)。