有关管理访问的概述 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

有关管理访问的概述

在 Amazon S3 中授予权限时,您要决定谁获得权限,获得对哪些 Amazon S3 资源的权限,以及您允许对这些资源执行的具体操作。以下各节概述了 Amazon S3 资源以及如何确定控制对这些资源的访问的最佳方法。

Amazon S3 资源:存储桶和对象

在 Amazon 中,资源是您可使用的实体。在 Amazon S3 中,存储桶对象是资源,而且它们都有相关的子资源。

存储桶子资源包括:

  • lifecycle – 存储生命周期配置信息。有关更多信息,请参阅管理存储生命周期

  • website – 在您为网站托管配置存储桶时存储网站配置信息 有关信息,请参阅使用 Amazon S3 托管静态网站

  • versioning – 存储版本控制配置。有关更多信息,请参阅 Amazon Simple Storage Service API 参考中的 PUT 存储桶版本控制

  • policyacl(访问控制列表)– 保存存储桶的访问权限信息。

  • cors(跨源资源共享)– 支持配置存储桶以允许跨源请求。有关更多信息,请参阅使用跨源资源共享 (CORS)

  • object ownership – 允许存储桶拥有者取得存储桶中新对象的所有权,无论是谁上传这些对象的。有关更多信息,请参阅为您的存储桶控制对象所有权和禁用 ACL。

  • logging – 使您能够请求 Amazon S3 保存存储桶访问日志。

对象子资源包括:

  • acl – 存储对象访问权限列表。有关更多信息,请参阅访问控制列表 (ACL) 概述

  • restore – 支持临时还原归档对象。有关更多信息,请参阅 Amazon Simple Storage Service API 参考中的 POST 对象还原

    S3 Glacier Flexible Retrieval 存储类中的对象是归档对象。要访问这类对象,必须首先启动还原请求,这会还原归档对象的副本。在请求中,指定您希望还原的副本保留的天数。有关归档对象的更多信息,请参阅 管理存储生命周期

Amazon S3 存储桶和对象所有权

存储桶和对象是 Amazon S3 资源。默认情况下,只有资源所有者可以访问这些资源。资源拥有者是指创建资源的 Amazon Web Services 账户。例如:

  • 用于创建存储桶和上传对象的 Amazon Web Services 账户拥有这些资源。

  • 如果您使用 Amazon Identity and Access Management (IAM) 用户或角色凭证上传对象,则用户或角色所属的 Amazon Web Services 账户将拥有该对象。

  • 存储桶拥有者可以向其他 Amazon Web Services 账户(或其他账户中的用户)授予上传对象的跨账户权限。在这种情况下,上传对象的 Amazon Web Services 账户拥有这些对象。存储桶拥有者对其他账户拥有的对象没有权限,以下情况除外:

    • 账单由存储桶拥有者支付。存储桶拥有者可以拒绝对任何对象的访问,或删除存储桶中的任何对象,而无论它们的拥有者是谁。

    • 存储桶拥有者可以归档任何对象或还原归档对象,而无论它们的拥有者是谁。归档是指用于存储对象的存储类。有关更多信息,请参阅管理存储生命周期

所有权和请求身份验证

存储桶的所有请求已经过身份验证或未经过身份验证。经过身份验证的请求必须包含可验证请求发送者的签名值,而未经身份验证的请求则不然。有关请求身份验证的更多信息,请参阅 提出请求

存储桶拥有者可以允许未经身份验证的请求。例如,当存储桶具有公有存储桶策略,或存储桶 ACL 特别向“所有用户”组或匿名用户授予 WRITEFULL_CONTROL 访问权限时,允许未经身份验证的 PUT Object 请求。有关公有存储桶策略和公有访问控制列表(ACL)的更多信息,请参阅 “公有”的含义

所有未经身份验证的请求均由匿名用户发起。此用户在 ACL 中由特定的规范用户 ID 65a011a29cdf8ec533ec3d1ccaae921c 表示。如果对象是通过未经身份验证的请求上传到存储桶的,匿名用户拥有对象。默认对象 ACL 向作为对象拥有者的匿名用户授予 FULL_CONTROL。因此,Amazon S3 允许未经身份验证的请求检索该对象或修改其 ACL。

为防止匿名用户修改对象,建议您不要实施允许对存储桶进行匿名公有写入的存储桶策略,或不要使用允许存储桶的匿名用户写入权限的 ACL。您可以使用 Amazon S3 屏蔽公共访问权限强制实施这个建议行为。

有关屏蔽公共访问权限的更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问。有关 ACL 的更多信息,请参阅 访问控制列表 (ACL) 概述

重要

我们建议不要使用 Amazon Web Services 账户根用户凭证发起经过身份验证的请求。而应创建一个 IAM 角色并授予该角色完全访问权限。我们将具有此角色的用户称为管理员用户。您可以使用分配给管理员角色的用户凭证而不是 Amazon Web Services 账户 根用户凭证来与 Amazon 交互和执行任务,例如创建存储桶、创建用户以及授予权限。有关更多信息,请参阅《Amazon Web Services 一般参考》中的 Amazon Web Services 账户 根用户凭证和 IAM 用户凭证以及《IAM 用户指南》中的 IAM 安全最佳实践

资源操作

Amazon S3 提供一组操作用来处理 Amazon S3 资源。有关可用操作的列表,请参阅《Service Authorization Reference》中的 Actions defined by Amazon S3

管理对资源的访问

管理访问是指通过编写访问策略向他人(Amazon Web Services 账户和用户)授予执行资源操作的权限。例如,您可以对 Amazon Web Services 账户中的一个用户授予 PUT Object 权限,使该用户可以向您的存储桶上传对象。除了向单个的用户和账户授予权限之外,您还可以向每个人(也称为匿名访问)或所有已验证身份的用户(拥有 Amazon 凭证的用户)授予权限。例如,当您将存储桶配置为网站时,可能希望通过向每个人授予 GET Object 权限将对象公开。

访问策略选项

访问策略描述了谁可以访问哪些内容。您可以将访问策略与资源(存储桶和对象)或用户相关联。相应地,您可以将可用的 Amazon S3 访问策略如下分类:

  • 基于资源的策略 – 存储桶策略和访问控制列表(ACL)是基于资源的策略,因为您将它们附加到 Amazon S3 资源。

    
							Amazon Web Services 账户 资源示意图,包括具有存储桶 ACL 和存储桶策略的 S3 存储桶,以及具有对象 ACL 的 S3 对象。
    • ACL – 每个存储桶和对象都有关联的 ACL。ACL 是一个指定被授权者和所授予权限的授权列表。您可使用 ACL 向其他 Amazon Web Services 账户授予基本的读/写权限。ACL 使用特定于 Amazon S3 的 XML 架构。

      下面是一个示例存储桶 ACL。该 ACL 中的授权显示一个存储桶拥有者具有完全控制权限。

      <?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>owner-display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User"> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

      存储桶和对象 ACL 使用相同的 XML 架构。

    • 存储桶策略 – 对于存储桶,您可以添加存储桶策略来授予其他 Amazon Web Services 账户或 IAM 用户对相应存储桶及其中对象的权限。任何对象权限都仅应用于存储桶拥有者创建的对象。存储桶策略补充(在很多情况下取代)基于 ACL 的访问策略。

      下面是一个示例存储桶策略。您使用 JSON 文件来表示存储桶策略(和用户策略)。该策略授予对一个存储桶中所有对象的匿名读取权限。该存储桶策略有一条语句,允许对名为 examplebucket 的存储桶中的对象执行 s3:GetObject 操作(读取权限)。 如果使用通配符 (*) 指定 principal,该策略将授予匿名访问权限,因此,应谨慎使用。例如,以下存储桶策略使对象可公开访问。

      { "Version":"2012-10-17", "Statement": [ { "Sid":"GrantAnonymousReadPermissions", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::awsexamplebucket1/*"] } ] }
  • 用户策略 – 您可以使用 IAM 管理对 Amazon S3 资源的访问。您可以在您的账户中创建 IAM 用户、组和角色,并通过附加访问策略授予它们对包括 Amazon S3 在内的 Amazon 资源的访问权限。

    
							Amazon Web Services 账户管理员和附加了用户策略的其他用户的示意图。

    有关 IAM 的更多信息,请参阅 Amazon Identity and Access Management (IAM)

    下面是一个用户策略示例。因为 IAM 用户策略附加到用户,所以不能在其中授予匿名权限。示例策略允许其附加到的关联用户对存储桶及其中的对象执行六种不同的 Amazon S3 操作。您可以将此策略附加到一个具体的 IAM 用户、组或角色。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssignUserActions", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1/*", "arn:aws:s3:::awsexamplebucket1" ] }, { "Sid": "ExampleStatement2", "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" } ] }

当 Amazon S3 收到请求时,它必须评估所有访问策略以决定是授权还是拒绝该请求。有关 Amazon S3 如何评估这些策略的更多信息,请参阅 Amazon S3 如何对请求授权

适用于 S3 的 IAM Access Analyzer

在 Amazon S3 控制台上,您可以使用适用于 S3 的 IAM Access Analyzer 来查看具有存储桶访问控制列表(ACL)、存储桶策略或授予公共或共享访问权限的接入点策略的所有存储桶。如果存在已配置为允许互联网上的任何人或其他 Amazon Web Services 账户(包括组织外部的 Amazon Web Services 账户)访问的存储桶,适用于 S3 的 IAM Access Analyzer 会向您发出提醒。您会收到每个公共存储桶或共享存储桶的结果,其中报告了公共或共享访问的来源和级别。

在适用于 S3 的 IAM Access Analyzer 中,只需单击一下即可屏蔽对存储桶的所有公共访问权限。我们建议您阻止所有对存储桶的访问,除非您需要公有访问才能支持特定使用案例。在阻止所有公有访问之前,请确保您的应用程序在没有公有访问权限的情况下可以继续正常工作。有关更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问

您还可以向下钻取到存储桶级别权限设置,以配置精细访问。对于需要公共或共享访问的特定和经验证的使用案例,您可以通过对存储桶的结果进行归档来确认和记录存储桶保持公开或共享的意图。您可以随时重新访问和修改这些存储桶配置。您还可以将结果下载为 CSV 格式的报告以供审计使用。

Amazon S3 控制台上提供适用于 S3 的 IAM Access Analyzer,无需额外费用。适用于 S3 的 IAM Access Analyzer 由 Amazon Identity and Access Management(IAM)IAM Access Analyzer 提供支持。要在 Amazon S3 控制台上使用适用于 S3 的 IAM Access Analyzer,您必须访问 IAM 控制台,然后在 IAM Access Analyzer 中按区域创建账户级分析器。

有关适用于 S3 的 IAM Access Analyzer 的更多信息,请参阅使用适用于 S3 的 IAM Access Analyzer 查看存储桶访问权限

我该使用哪种访问控制方法?

有了可以编写访问策略的各种方法,您将面临以下问题:

  • 我应在何时使用何种访问控制方法? 例如,要授予存储桶权限,应当使用存储桶策略还是存储桶 ACL?

    我拥有一个存储桶和其中的对象。我应当使用基于资源的访问策略还是基于 IAM 身份的策略?

    如果使用基于资源的访问策略,我应当使用存储桶策略还是对象 ACL 来管理对象权限?

  • 我拥有一个存储桶,但其中的对象并不全都属于我。其他人所拥有的对象的访问权限是如何管理的?

  • 如果我组合使用这些访问策略方法授予访问权限,Amazon S3 如何确定某用户是否有权执行请求的操作?

以下各节介绍这些访问控制备选方法、Amazon S3 如何评估访问控制机制以及何时使用何种访问控制方法。还提供了示例演练。