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

时间:2024-03-21 11:07:01

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

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中设置匿名访问的方式

注意:在授予对您的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中设置匿名访问的方式

    b. 请求参数:无

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

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

 

2. Responses

     a. 响应头:通用响应头

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

     c. 特殊错误:无

 

3. Examples

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

 

 

GET Bucket policy

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

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

1. Requests

     a. 语法

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

     b. 请求参数:无

     c. 请求头:通用请求头

     d. 请求元素:无

 

2. Responses

     a. 响应头:通用响应头

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

     c. 特殊错误:无

 

3. Examples

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

 

DELETE Bucket policy

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

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

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

1. Requests

    a. 语法

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

    b. 请求参数:无

    c. 请求头:通用请求头

    d. 请求元素:无

 

2. Responses

    a. 响应头:通用响应头

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

    c. 特殊错误:无

 

3. Examples

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

 

 

2. 使用acl设置匿名访问

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

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

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

示例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中设置匿名访问的方式    

如上图红框部分,授予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文档。

相关文章