AWS s3中设置匿名访问的方式

匿名访问的意思未经身份验证的用户可以直接访问资源。

1. 使用存储桶策略设置匿名访问

存储桶策略的介绍

     a. 存储桶策略的大小限制为20KB

     b. 存储桶策略的文件为JSON格式文件。

     c. 策略中的常用元素

             <1> 资源:存储桶和对象时您能够允许或拒绝的s3资源。在策略中,使用Amazon资源和名称(ARN)标识资源

             <2> 操作:对于每个资源,Amazon s3都支持一组操作。允许(或拒绝)的资源操作通过操作关键字指定

           <3> Effect:当用户请求特定操作(可以时允许或拒绝)时的效果。如果没有显示授予(允许)对资源的访问权限,则隐式拒绝访问。您也可显示拒绝资源的访问,这样可确保用户无法访问该资源,即使有其他策略授予了访问权限的情况下也是如此。

          <4> Principal:允许访问语句中的操作和资源的账户或用户。在存储桶策略中,委托人式作为权限获得者的用户、账户、服务或其他实体。

 

当需要设置匿名访问时,须将存储桶策略中的Principal元素指定为通配符(*)。

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

AWS s3中设置匿名访问的方式_第1张图片

注意:在授予对您的s3存储桶的匿名访问权限时应谨慎使用。如果授予匿名访问权限,那么世界上的任何人都可以访问您的存储桶。所以绝对不要授予对s3存储桶的任何类型的匿名写入权限。

 

接下来介绍如何通过REST API应用存储桶策略。

PUT Bucket policy

PUT操作是实现使用策略子资源来添加或替换桶上的策略。日过桶上已经有一个策略,这个请求中的会完全取代它。要执行此操作,必须是桶的所有者。

如果你不是桶所有者,但对桶有 PutBucketPolicy权限,s3会返回 405 method Not Allowed;在其他情况下,对于不来自桶所有者的PUT Bucket Policy请求,s3返回403 Access Denied。

1. Requests

    a. 语法

       AWS s3中设置匿名访问的方式_第2张图片

    b. 请求参数:无

    c. 请求头:通用的请求头

    d. 请求元素:请求体格式为JSON格式。

 

2. Responses

     a. 响应头:通用响应头

     b. 响应元素:返回操作是否成功

     c. 特殊错误:无

 

3. Examples

      AWS s3中设置匿名访问的方式_第3张图片

 

 

GET Bucket policy

GET操作是实现使用策略子资源返回指定桶的策略。要使用此操作,必须在指定的桶上具有GetPolicy的权限。你必须是桶的所有者。

如果没有GetPolicy权限,s3将返回403 Access Denied错误。 如果您有正确的权限,但您不是桶所有者,s3返回405Method Not Allowed错误。如果桶没有策略,s3返回404 Policy Not found 错误。

1. Requests

     a. 语法

         

     b. 请求参数:无

     c. 请求头:通用请求头

     d. 请求元素:无

 

2. Responses

     a. 响应头:通用响应头

     b. 响应元素:响应主体为指定桶的策略,json格式

     c. 特殊错误:无

 

3. Examples

AWS s3中设置匿名访问的方式_第4张图片

 

DELETE Bucket policy

此删除操作的实现使用策略子资源来删除指定桶上的策略。若要使用该操作,

必须在指定的桶上具有删除策略权限,并为桶所有者。

如果没有删除策略权限,s3将返回403Access Denied错误。如果你拥有权限,但不是桶所有者账户的用户,s3将返回405Method Not Allowed错误。如果桶没有策略,Amazon S3返回204无内容错误。

1. Requests

    a. 语法

        

    b. 请求参数:无

    c. 请求头:通用请求头

    d. 请求元素:无

 

2. Responses

    a. 响应头:通用响应头

    b. 响应元素:包含删除操作的状态,如果请求失败,则包含错误代码

    c. 特殊错误:无

 

3. Examples

AWS s3中设置匿名访问的方式_第5张图片

 

 

2. 使用acl设置匿名访问

Acl使您可以管理对存储桶和对象的访问权限。每个存储桶和对象都有一个作为子资源而附加的ACL。它定义了哪些AWS账户或组将被授予访问权限以及访问的类型。收到针对某个资源的请求后,Amazon s3将检查相应的ACL以验证请求者是否拥有所需的访问权限。

Acl的格式是xml格式,例如:

AWS s3中设置匿名访问的方式_第6张图片

示例ACL包含一个可通过AWS账户的规范用户ID识别所有者的Owner元素。Grant元素将识别被授权者(AWS账户或预定义的组)和所授予的权限,此默认的ACL拥有一个适用于所有者的Grant元素。您可以通过添加Grant元素授予权限,每个授权都将被识别被授权者和权限。

注意:ACL最多可以拥有100个授权。

 

被授权者:被授权者可以是AWS账户或某个预定义的Amazon s3组。您可以使用电子邮件地址或规范用户ID向AWS账户授予权限。但是,如果您在授权请求中提供电子邮件地址,Amazon s3将为该账户查找规范用户ID并将它添加到ACL。生成的ACL将始终包含AWS账户的规范ID,而不是AWS账户的电子邮件地址。

 

Amazon s3预定义的组:Amazon s3拥有一系列预定义的组。将账户访问权限授予某个组时,您可以指定我们的一个URL,而不是规范用户ID。

1. 经身份验证的用户组

    由http://acs.amazonaws.com/groups/global/AuthenticatedUsers表示。该组代表了所有AWS账户。改组的访问许可允许任何AWS账户访问资源。但是,所有的请求必须时已签名的(经身份验证)。 警告:在您为Authenticated Users组授予访问权限后,世界上任何经过身份验证的AWS用户都可以访问您的资源

2. 所有的用户组

     由http://acs.amazonaws.com/groups/global/AllUsers表示。授予此组的访问权限将允许世界上的任何人访问资源。请求可以是已签名的(经身份验证),也可以时未签名的(匿名)。未签名的请求将省略请求中的Authentication标头。

警告:如果你公开存储桶(不建议),则任何未经身份验证的用户都可以将对象上传到存储桶。所以强烈建议绝不要向All Users组授予WRITE、Write_ACP或FULL_CONTROL权限。

3. 日志传输组

     由http://acs.amazonaws.com/groups/s3/LogDelivery表示。存储桶上的WRITE许可使改组可以将服务器访问日志写入存储桶。   

 

因此,我们可以通过编写ACL,将权限授予给All Users组,实现匿名访问。  

AWS s3中设置匿名访问的方式_第7张图片    

如上图红框部分,授予READ权限给All Users组,因此任何用户(包括匿名用户)都可以访问该资源。

 

对acl操作的相关API。

  1. GET Bucket acl
  2. PUT Bucket acl
  3. Get Object acl
  4. PUT Object acl
  5. PUT Object
  6. PUT Bucket
  7. PUT object – Copy
  8. Initiate Multipart Upload

API相关信息和操作可查阅s3 API文档。

你可能感兴趣的:(s3)