Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

访问管理概述

在授予权限时,您要决定谁获得权限,获得对哪些 Amazon S3 资源的权限,以及您允许对这些资源执行的具体操作。

Amazon S3 资源

存储桶和对象是主要的 Amazon S3 资源,它们都有关联的子资源。例如,存储桶子资源包括:

  • lifecycle – 存储生命周期配置信息 (请参阅 对象生命周期管理)。

  • website – 为网站托管配置存储桶时存储网站配置信息 (请参阅 在 Amazon S3 上托管静态网站)。

  • versioning – 存储版本控制配置 (请参阅 PUT Bucket 版本控制)。

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

  • cors (跨源资源共享) – 支持配置存储桶以允许跨源请求 (请参阅 跨源资源共享 (CORS))。

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

对象子资源包括:

  • acl – 存储对象访问权限列表。本主题讨论如何使用这一子资源管理对象权限 (请参阅使用 ACL 管理访问 )。

  • restore – 支持临时还原存档对象 (请参阅 POST Object 还原)。Glacier 存储类中的对象是存档对象。要访问这类对象,必须首先启动还原请求,这会还原存档对象的副本。在请求中,指定您希望还原的副本保留的天数。有关归档对象的更多信息,请参阅 对象生命周期管理

关于资源拥有者

默认情况下,所有 Amazon S3 资源都是私有的。只有资源拥有者才能访问资源。资源拥有者是指创建资源的 AWS 账户。例如:

  • 用于创建存储桶和对象的 AWS 账户拥有这些资源。

  • 如果您在 AWS 账户中创建了一个 AWS Identity and Access Management (IAM) 用户,您的 AWS 账户就是父级拥有者。如果该 IAM 用户上传一个对象,则该用户所属的父账户拥有该对象。

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

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

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

重要

AWS 建议不要使用 AWS 账户的根凭证发起请求。而应创建一个 IAM 用户并授予该用户完全访问权限。我们将这些用户称为管理员用户。您可以使用管理员用户凭证而不是您账户的根凭证来与 AWS 交互和执行任务,例如创建存储桶、创建用户和为用户授予权限。有关更多信息,请转到 AWS General Reference 中的根账户凭证与 IAM 用户凭证IAM 用户指南 中的 IAM 最佳实践

下图所示为一个拥有资源、IAM 用户、存储桶和对象的 AWS 账户。

资源操作

Amazon S3 提供一组操作用来处理 Amazon S3 资源。有关可用操作的列表,请转至 Amazon Simple Storage Service API Reference 中的在存储桶上的操作在对象上的操作

管理对资源的访问 (访问策略选项)

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

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

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

    • ACL – 每个存储桶和对象都有关联的 ACL。ACL 是一个指定被授权者和所授予权限的授权列表。您可使用 ACL 向其他 AWS 账户授予基本的读/写权限。ACL 使用特定于 Amazon S3 的 XML 架构。

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

      Copy
      <?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 架构。

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

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

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

    有关 IAM 的更多信息,请转至 AWS Identity and Access Management (IAM) 产品详细信息页面。

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

    Copy
    { "Statement": [ { "Effect":"Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource":"arn:aws-cn:s3:::examplebucket/*" } ] }

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

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

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

  • 我应在何时使用何种访问控制方法?例如,要授予存储桶权限,应当使用存储桶策略还是存储桶 ACL?我拥有一个存储桶和其中的对象。我应当使用基于资源的访问策略还是 IAM 用户策略?如果使用基于资源的访问策略,我应当使用存储桶策略还是对象 ACL 来管理对象权限?

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

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

下面几部分介绍这些访问控制的备选方法、Amazon S3 如何评估访问控制机制、何时使用何种访问控制方法,另外还提供了几个示例演练。

Amazon S3 如何对请求授权

有关使用可用访问策略选项的准则

示例演练:管理对 Amazon S3 资源的访问

我们建议您先阅读有关管理 Amazon S3 资源访问的各种方法的介绍性主题。有关更多信息,请参阅 Amazon S3 资源访问权限管理介绍。然后再通过以下主题了解有关特定访问策略选项的更多信息。