设置访问网站的权限 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

设置访问网站的权限

将存储桶配置为静态网站时,如果希望网站成为公有网站,则可以授予公有读取访问权限。要使存储桶公开可读,您必须禁用存储桶的阻止公有访问设置并编写一条授予公有读取访问权限的存储桶策略。如果存储桶包含并非由存储桶拥有者拥有的对象,您可能还需要添加对象访问控制列表 (ACL),以便向所有人授予读取访问权限。

注意

在网站终端节点上,如果用户请求了不存在的对象,则 Amazon S3 将返回 HTTP 响应代码 404 (Not Found)。如果该对象存在,但您尚未授予对对象的读取权限,则网站终端节点将返回 HTTP 响应代码 403 (Access Denied)。用户可以使用该响应代码推断特定对象是否存在。如果您不需要此行为,则不应启用对存储桶的网站支持。

步骤 1:编辑 S3 阻止公有访问设置

如果要将现有存储桶配置为具有公有访问权限的静态网站,您必须编辑该存储桶的阻止公有访问设置。您可能还必须编辑账户级别的阻止公有访问设置。Amazon S3 会应用限制性最强的存储桶级别和账户级别的阻止公有访问设置的组合。

例如,如果您允许对存储桶进行公有访问,但阻止账户级别的所有公有访问权限,则 Amazon S3 将继续阻止对存储桶进行公有访问。在这种情况下,您将必须编辑存储桶级别和账户级别的阻止公有访问设置。有关更多信息,请参阅 阻止对您的 Amazon S3 存储的公有访问

默认情况下,Amazon S3 阻止对您的账户和存储桶的公有访问权限。如果要使用存储桶托管静态网站,您可以使用以下步骤编辑您的阻止公有访问设置。

警告

在完成此步骤之前,请查看阻止对您的 Amazon S3 存储的公有访问,以确保您了解并接受允许进行公有访问所涉及的风险。当您关闭阻止公有访问设置以使您的存储桶变为公有时,Internet 上的任何人都可以访问您的存储桶。我们建议您阻止对存储桶的所有公有访问。

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择已配置为静态网站的存储桶的名称。

  3. 选择 Permissions

  4. Block public access (bucket settings) (阻止公有访问(存储桶设置)) 下,选择 Edit (编辑)

  5. 清除 Block all public access (阻止所有公有访问),然后选择 Save changes (保存更改)

    警告

    在完成此步骤之前,请查看阻止对您的 Amazon S3 存储的公有访问,以确保您了解并接受允许进行公有访问所涉及的风险。当您关闭阻止公有访问设置以使您的存储桶变为公有时,Internet 上的任何人都可以访问您的存储桶。我们建议您阻止对存储桶的所有公有访问。

    Amazon S3 关闭了您的存储桶的阻止公有访问设置。要创建公有静态网站,您可能还必须编辑账户的阻止公有访问设置,然后再添加存储桶策略。如果当前已打开账户的阻止公有访问设置,您将在 Block public access (bucket settings) (阻止公有访问(存储桶设置)) 下看到一条备注。

步骤 2:添加存储桶策略

要使存储桶中的对象公开可读,您必须编写一条向所有人授予 s3:GetObject 权限的存储桶策略。

在编辑 S3 阻止公有访问设置后,您可以添加存储桶策略以授予对存储桶的公有读取访问权限。当您授予公有读取访问权限时,Internet 上的任何人都可以访问您的存储桶。

重要

下面的策略仅供举例说明,仍允许完全访问您存储桶的内容。在继续执行此步骤之前,请查看如何保护 Amazon S3 存储桶中的文件?,以确保您了解保护 S3 存储桶中文件的最佳实践以及授予公有访问权限所涉及的风险。

  1. Buckets (存储桶) 下,选择存储桶的名称。

  2. 选择 Permissions

  3. Bucket Policy (存储桶策略) 下,选择 Edit (编辑)

  4. 要授予对网站的公有读取访问权限,请复制以下存储桶策略,将其粘贴到 Bucket policy editor (存储桶策略编辑器) 中。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::Bucket-Name/*" ] } ] }
  5. Resource 更新为您的存储桶名称。

    在上述示例存储桶策略中,Bucket-Name 是存储桶名称的占位符。要将此存储桶策略用于您自己的存储桶,您必须更新此名称以匹配您的存储桶名称。

  6. 选择保存更改

    此时将显示一条消息,指示存储桶策略已成功添加。

    如果您看到显示 Policy has invalid resource 的错误,请确认存储桶策略中的存储桶名称与您的存储桶名称匹配。有关添加存储桶策略的信息,请参阅如何添加 S3 存储桶策略?

    如果您收到错误消息且无法保存存储桶策略,请检查您的账户和存储桶的阻止公有访问设置以确认您允许对存储桶进行公有访问。

对象访问控制列表

您可以使用存储桶策略来授予对对象的公共读取权限。但是,存储桶策略仅适用于存储桶拥有者所拥有的对象。如果存储桶包含并非由存储桶拥有者拥有的对象,则存储桶拥有者应使用对象访问控制列表 (ACL) 授予对这些对象的公有 READ 权限。

要使用 ACL 使对象公开可读,您可以向 AllUsers 组授予 READ 权限,如以下授权元素所示。可以将此授权元素添加到对象 ACL 中。有关管理 ACL 的信息,请参阅访问控制列表 (ACL) 概述

<Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant>