对象存储
Bucket(桶)和Object(对象)
Bucket是一个网络资源,相当于一个文件夹、硬盘。 桶名是独一无二的,全网唯一。不同的Region,可以有相同的桶名
Bucket可以看做Object的集合。 一个Object相当于一个文件。但Bucket中只有Object,没有文件夹这个概念。 基于Object,可以单独地做读写(上传与下载)、权限管控等操作。
AK/SK
Bucket作为一个网络资源,有三种权限配置:公共读写、公共读、私有。
公共类,不需要AK/SK,知道URL就能访问,建议限制源端IP
私有类,需要携带AK/SK,OSS云端校验通过后,才能访问
AccessKey和SecretKey不能泄露,不能给第三方,相当于你的账号凭证。
阿里云用AK(AccessKeyID/AccessKeySecret)表示密钥对
1 | 1、不应该用主账号的AK/SK,应该创建子账号AK/SK并赋予最小存储桶权限 |
STS
STS是阿里云提供的API,你创建的桶,想给其他人来访问,直接给你的真实AK/SK是不安全的
建议在后端服务器自行实现调用STS生成临时的AK/SK,再发送给第三方/APP客户端
当然了,第三方可能很懒,你给他一个临时AK/SK还需要他自己实现接口签名才能访问OSS。
这块工作你也可以帮他来做,叫预签名。即上图的第5步
由你的APP服务器来实现,生成临时的下载URL给第三方,对方不需要什么开发量,直接访问URL就行
Web前端直传OSS
一个GET,从应用服务器获取AccessID
、Policy
、Signature
三个值
一个POST,将本地文件上传到OSS
Policy
定义授权策略,过期时间等
为防止C端篡改Object名称、上传目录、callback等,应对这些字段在policy中写死进行signature签名,不可篡改。
即上传的file key必须由服务端指定。
签名方法Signature = base64(hmac-sha1(base64(policy), AccessKeySecret))
Tips:一次签名只能上传一个文件,通过在policy
里面设置 content-length-range(文件大小限制)和 key(文件路径),来控制用户的上传策略,如果严格一点还可以设置必须让用户上传的文件类型
1 | content-length-range=524288 字节 |