Amazon S3 资源概述及管理访问基本操作

时间:2024-04-11 22:10:40

Amazon S3 资源概述及管理访问基本操作

默认情况下,所有Amazon S3资源都是私有的,包括存储桶、对象和相关子资源(例如liftcyclewebsite配置)。只有资源拥有者,即创建该资源的AWS账户可以访问资源。资源拥有者可以选择通过编写访问策略授予他人访问权限。

Amazon S3提供的访问策略大致可分为两类:基于资源的策略、用户策略。

附加到资源(存储桶和对象)的访问策略称为基于资源的策略,例如,存储桶策略和访问控制列表(ACL)就是基于资源的策略。将访问策略附加到账户中的用户,就是用户策略。可以使用这些策略的组合来管理你的Amazon S3资源权限。


一、访问管理概述

1.Amazon S3资源

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

存储桶的子资源包括:

·liftcycle—存储生命周期配置

·website—为网站托管配置存储桶时存储网站配置信息

·versioning—存储版本控制配置

·policy和acl(访问控制列表)—存储存储桶的访问权限信息

·cors(跨源资源共享)—支持配置存储桶以允许跨源请求

·logging—使您能够请求Amazon S3保存存储桶访问日志

对象子资源包括:

·acl—存储对象访问权限列表。这里讨论如何使用这一子资源管理对象权限

关于对象拥有者

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

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

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

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

以下情况除外:

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

* 存储桶拥有者可以存档任何对象或还原存档对象,而无论他们的拥有者是谁。

 Amazon S3 资源概述及管理访问基本操作

注:AWS不建议使用AWS账户的根凭证发起请求,而应创建一个IAM用户授予该用户完全访问权限。我们将这些用户称为管理员用户。可以使用管理员用户凭证而不是账户的根凭证来与AWS交互和执行任务,例如创建存储桶、创建用户、和为用户授予权限。

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


 

2.资源操作

Amazon S3提供一组操作来处理Amazon S3资源。

在存储桶上的操作:http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketOps.html

在对象上的操作:http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectOps.html

 

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

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

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

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

Amazon S3 资源概述及管理访问基本操作

ACL—每个存储桶和对象都有关联的ACL。ACL是一个指定被授权者和所授权权限的授权列表。您可使用ACL向其他AWS账户授予基本的读/写权限。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架构

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

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

{

    "Version":"2012-10-17",

    "Statement": [

        {

            "Effect":"Allow",

            "Principal": "*",

            "Action":["s3:GetObject"],

            "Resource":["arn:aws:s3:::examplebucket/*"]

        }

    ]

}

·用户策略

您可以使用AWS Identity and Access Management(IAM)管理Amazon S3资源的访问权限。使用IAM,可以在您的账户中创建IAM用户、组和角色,并通过附加访问策略授予他们对包括Amazon S3在内的AWS资源的访问权限。

 Amazon S3 资源概述及管理访问基本操作

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

{

    "Statement": [

        {

            "Effect":"Allow",

            "Action": [

                "s3:PutObject",

                "s3:GetObject",

                "s3:DeleteObject",

                "s3:ListAllMyBuckets",

                "s3:GetBucketLocation",

                "s3:ListBucket"

            ],

            "Resource":"arn:aws:s3:::examplebucket/*"

        }

    ]

}

Amazon S3 收到请求时,它必须评估所有访问策略以决定是授权还是拒绝该请求。