如何排查具有公共读取访问权限的 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 存储桶所在的分区。这些选项包括 awsaws-us-govaws-cn

20.    (可选)对于标签,请最多输入五个键值对标签。

21.    选择 Execute(执行)。

22.    可使用 Execution status(执行状态)来跟踪文档的进度。

23.    状态显示为成功后,请查看输出中列出的结果。结果可能包含所评估的每个对象的错误代码。错误代码可以帮助诊断向每个对象发出匿名请求的“访问被拒绝”错误的原因。

提示:要查看评估中单个步骤的结果,请在Executed steps(已执行步骤)项下选择相关的步骤 ID。Execution status(执行状态)下方列有 Executed Steps(已执行步骤)。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?