TOC

阿里云 OSS 文件分享

四种方法:

  1. Bucket public-read
  2. Object public-read 最好的方法
  3. STS 临时访问凭证
  4. 签名 URL

ACL: public-read

对象存储 OSS > 开发指南 > 数据安全 > 访问控制 > 读写权限 ACL

Bucket ACL

对象存储 OSS > API 参考 > 关于 Bucket 操作 > 权限控制(ACL)

Bucket ACL: private, public-read, public-read-write

将存储空间(Bucket)权限设置成 public-read

  • 设置 Bucket ACL:PutBucketACL
  • 获取 Bucket ACL:GetBucketACL

Object ACL

对象存储 OSS > API 参考 > 关于 Object 操作 > 权限控制(ACL)

Object ACL: private, public-read, public-read-write, default
PS: default, 顾名思义,是默认值,表示继承 Bucket ACL。

将文件权限设置成 public-read

  • 设置 Object ACL:PutObjectACL

    PUT /ObjectName?acl HTTP/1.1
    x-oss-object-acl: Permission
    Host: BucketName.oss-cn-hangzhou.aliyuncs.com
    Date: GMT Date
    Authorization: SignatureValue
    
  • 获取 Object ACL:GetObjectACL

    GET /ObjectName?acl HTTP/1.1
    Host: BucketName.oss-cn-hangzhou.aliyuncs.com
    Date: GMT Date
    Authorization: SignatureValue
    
    <?xml version="1.0" ?>
    <AccessControlPolicy>
        <Owner>
            <ID>00220120222</ID>
            <DisplayName>00220120222</DisplayName>
        </Owner>
        <AccessControlList>
            <Grant>public-read </Grant>
        </AccessControlList>
    </AccessControlPolicy>
    

    AccessControlPolicy > AccessControlList > Grant

STS 临时访问凭证

对象存储 OSS > 开发指南 > 数据安全 > 使用 STS 临时访问凭证访问 OSS

对象存储 OSS > SDK 参考 > Python > 授权访问

这两个概念我也不知道是什么意思:STS,AssumeRole, 但我知道这是用来获取临时访问凭证的。

  1. 控制台授权操作
    1. 创建 RAM 用户
    2. 为 RAM 用户授予请求 AssumeRole 的权限
    3. 创建用于获取临时访问凭证的角色
    4. 为角色授予上传文件的权限
      示例九:通过 RAM 或 STS 服务向其他用户授权
  2. 获取临时访问凭证
    访问控制 > API 参考 > API 参考(STS) > 操作接口 > AssumeRole

    https://sts.aliyuncs.com/?Action=AssumeRole
    &RoleArn=acs:ram::123456789012****:role/adminrole
    &RoleSessionName=alice
    &DurationSeconds=3600
    &<公共请求参数>
    
  3. 使用临时访问凭证上传文件至 OSS

签名 URL

对象存储 OSS > API 参考 > 访问控制 > 在 URL 中包含签名

可以使用签名 URL 来上传文件,也可以使用签名 URL 来下载文件。

用法很简单,不过有一个令人不安的问题,就是签名 URL 中包含 AccessKeyId,如果在分享的时候总是会担心会存在不安全因素。

http://BucketName.oss-cn-hangzhou.aliyuncs.com/ObjectName
?OSSAccessKeyId=AccessKeyId
&Expires=TimeStamp
&Signature=SignatureValue

要是阿里云可以提供一个短链接来屏蔽这些参数就好了。
不过好在我们可以对文件设置 ACL 权限,也没有关系啦。