You need to enable JavaScript to run this app.
导航

实现非资源 Owner 的授权

最近更新时间2024.03.20 17:12:25

首次发布时间2024.03.20 17:12:25

非资源 Owner 指该用户既不是存储桶所有者,也不是文件的所有者,但是您可以通过授权使得该用户拥有文件的下载等权限。本文介绍如何实现非资源 Owner 的授权。

场景说明

本教程以 aaa、bbb、ccc 用户为例,具体的背景和实现目标如下:

  • 背景: aaa 用户是 test 存储桶的所有者,bbb 用户拥有向 test 存储桶上传对象权限,ccc 用户没有任何权限。
  • 实现目标:授权给 ccc 用户后,使得 ccc 用户拥有 bbb 用户上传的对象的下载权限。

推荐配置方法

本场景下建议您使用桶策略进行授权。关于桶策略的详细说明,请参见桶策略概述

操作流程

  1. bbb 用户向 test 存储桶的 data 目录上传 sample.txt 对象时设置文件权限为 bucket-owner-full-control,使得 aaa 用户拥有该文件的全部权限。
  2. aaa 用户使用桶策略授权给 ccc 用户 data 目录的 GetObject 权限,使得 ccc 用户拥有下载 sample.txt 对象的权限。

图片

前提条件

步骤一:上传对象

  1. 执行以下命令,初始化配置tosutil 工具。

    ./tosutil config -i <access key> -k <secret key> -e <endpoint> -re <region>
    

    参数

    说明

    access key

    bbb 用户的 Access Key ID。

    说明

    关于查看 AK/SK 信息的具体步骤,请参见查看 AK/SK 信息

    secret key

    bbb 用户的 Secret Access Key。

    endpoint

    TOS 对外访问域名。

    region

    test 存储桶所在地域。

    说明

    TOS 支持的地域信息,请参见访问域名 Endpoint

  2. 执行以下命令,上传 sample.txt 文件,并设置文件的访问权限为 bucket-owner-full-control。

    ./tosutil cp file1_url tos://bucket[/prefix] -acl=bucket-owner-full-control
    

    示例:

    ./tosutil cp sample.txt tos://test/data/sample.txt -acl=bucket-owner-full-control
    

    参数

    说明

    file_url

    本地文件路径。如果要上传多个文件,可以在可在命令中添加多个 file_url,以英文逗号(,)分隔。

    说明

    您也可以使用 tosutil 上传文件夹或文件列表,具体操作,请参见上传对象(cp)

    bucket

    存储桶名称。

    prefix

    批量操作时的对象名前缀。

    -acl

    上传或复制对象时可指定的预定义访问策略。支持的值如下:

    • private:私有
    • public-read:公共读
    • public-read-write:公共读写
    • authenticated-read:认证用户读
    • bucket-owner-read:桶所有者读
    • bucket-owner-full-control:桶所有者完全权限
    • bucket-owner-entrusted:受桶策略控制,桶所有者完全权限

步骤二:授予 ccc 用户对象的下载权限

  1. 登录对象存储控制台
  2. 在左侧导航栏,单击桶列表,在桶列表页面单击目标桶名称。
  3. 在左侧导航栏,选择权限管理 > 存储桶授权策略管理
  4. 单击创建策略。
  5. 创建存储桶授权策略页面,选择自定义策略模板,然后单击下一步
  6. 设置如下参数。
    • 授权用户:选择指定账号
    • 其他账号:选择当前主账号,然后单击添加字段,在下拉列表中选择 ccc 用户。
    • 资源:选择桶内对象,选择指定对象,输入 data/*
    • 动作:选择 GetObject。
  7. 设置完成后,单击下一步
  8. 确认策略无误后,单击确定

步骤三:下载对象

ccc 用户可以调用 GetObject 接口获取 sample.txt 文件。关于 GetObject 接口的详细介绍,请参见GetObject