使用OSS中的数据作为机器学习的训练样本
DataLakeAnalytics+OSS:基于OSS的Severless的交互式查询分析
通过HDP2.6 Hadoop读取和写入OSS数据
通过CDH5 Hadoop读取和写入OSS数据
Apache Impala(CDH6)查询OSS数据
Spark使用OSS Select加速数据查询
基于OSS+MaxCompute构建数据仓库
数据备份和容灾
备份存储空间
数据库备份到OSS
通过云存储网关使用OSS服务
本地共享文件夹访问
本地磁盘访问
OSS上传提示Name or service not known报错
osscmd工具上传提示InvalidBucketName报错
调用Callback时页面显示400 call back error
OSS服务.netSDK中使用MemoryStream上传文件为空的解决方法
OSS下载rar格式文件,打开后乱码
IE浏览器下载OSS文件后扩展名被省略
OSS支持FTP吗?
OSS文件实现强制下载的方法
OSS Post请求的Policy设置方法
OSS通过range参数获取部分文件
OSS的文件更新后,部分地区下载的文件仍是旧的版本
在OSS控制台中读请求与写请求次数统计的来源
使用OSS的JS SDK上传大于100K的文件时报错
OSS验证Refer防盗链是否生效
OSS变通实现IP黑白名单
STS生成的临时账户授权检查逻辑
OSS的Bucket权限管理
如何获取AccessKeyId和AccessKeySecret
Access key对OSS的bucket控制权限太高,需要对bucket更细粒度的权限控制
RAM子账户授权OSS单个bucket中部分文件的访问权限
oss域名访问提示Anonymous access is forbidden for this operation.
OSS细粒度的权限控制
OSS异常流量排查及防护
如何给子账号赋权OSS的操作?
如何授权RAM子账号列举指定文件目录
Python sdk中multiupload上传如何验证文件完整性
OSS MD5一致性校验说明
OSS下载内容与实际内容不一致
域名/网络
OSS如何查看Bucket内网、外网域名地址
ECS用户如何正确使用OSS内网地址?
OSS是否支持Bucket作为三级域名的访问方式?
OSS是否支持HTTPS访问
通过反向代理访问OSS的HTTPS域名
OSS+CDN访问文件直接下载
OSS设置Object更新时自动刷新CDN缓存
OSS使用SDK访问Bucket提示Endpoint错误
OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'的解决方法
访问OSS资源或者使用SDK时提示“ using the specified endpoint”
OSS绑定域名时验证域名所有权
为什么OSS内网域名无法ping通
DNS解析
站点中如何应用OSS资源
OSS如何开启CDN加速服务
OSS触发FIN的条件
OSS上传或下载的带宽限制
OSS上传慢
如何停止绑定域名时默认开启的CDN服务?
如何设置HTTPS证书托管
对象存储OSS中Bucket的访问域名使用介绍
对象存储OSS查看Bucket统计和Object统计方法
通过OSS控制台资源监控报表功能了解Bucket使用情况
通过OSS控制台概览了解Bucket相关属性
OSS通过管理控制台查看资源监控报表的请求次数统计信息
如何授权子账号云查看OSS控制台总概览的基础数据
存储空间(bucket)管理
如何获取OSS上每个文件夹的大小
OSS中可以重命名Bucket吗?是否支持Object迁移?
OSS如何一键删除Bucket
OSS对object和目录的移动与修改操作
OSS的Bucket、Object、文件目录命名规范汇总
OSSFS通过www账户挂载Bucket
OSS API设置LifeCycle提示时间格式错误
OSS开启访问日志
查找OSS Object的访问操作记录
OSS日志里面206代表什么
OSS的Bucket每天会自动生成名称中包含日期的Object
OSS数据操作常见问题FAQ
Bucket下出现异常文件如何排查
如何查看存储空间大小
OSS可创建Bucket个数限制,容量是否需要扩容?
如何删除Bucket
文件(object)管理
OSS怎么更改Object元数据信息
OSS中LifeCycle删除文件的策略
判断OSS文件被删除
OSS删除碎片文件
当Object名称中存在不可见字符如何处理?
OSS有哪些批量操作?
OSS静态文件的打开方式
OSS的gzip压缩如何使用?
IE浏览器中浏览OSS的object URL中文文件名乱码
OSS 如何设置 Content-Type(MIME)?
上传Object后如何获取访问URL
如何给文件重命名
如何修改、更新、编辑文件?
OSS上传文件大小限制
OSS SDK如何进行批量操作?
Java实现生成URL签名的代码示例
PHP实现OSS的签名URL
OSS如何通过sdk获取object的签名URL
OSS中的时间标准
控制台获取签名链接后过一段时间超时
调用oss sdk操作报错:SignatureDoesNotMatch
Object签名URL相关问题
签名错误 (signature not match)
API/SDK
OSS支持时间同步的sdk
nternal.aliyuncs.com...
Oss Java sdk实现listobject(列出所有的object)
使用OSS的javasdk的contentMD5出现log4j警告
OSS Java SDK超时&重传代码样例
测试版PHP SDK中不能自动检测所需PHP模块的原因
OSS API文档 “Date”字段的GMT格式说明
- assumed...
OSS API返回结果有JSON格式的吗?
Python sdk查询所有object列表
iOS SDK和Android SDK如何开启log?
OSS图片处理服务不支持ICO格式图片
OSS图片处理服务绑定域名时提示:域名绑定在自己的其他Bucket上
对象存储OSS控制台操作—图片鉴黄
OSS上传图片时exif信息处理规则
PHP SDK 2.0.1是否支持图片处理服务
OSS 图片处理服务配置文件缓存的方法
怎样用多个域名来使用oss图片服务
图片处理服务处理后的PNG图片的透明背景变黑
OSS 图片处理如何保护原始图片不被访问
OSS图片处理访问报Forbidden access to the original image错误的处理方法
使用图片处理服务,原图无法访问。报错accessdenied。
OSS图片处理服务导致CORS配置失效
OSS图片处理URL访问报错NoSuchStyle, NoSuchKey, NoSuchFile
图片的原图是正常的,被图片处理后就旋转了,该怎样处理
OSS图片处理对原图和缩略图的限制说明
OSS 如何将图片强制缩放成正方形并且不裁剪
图片处理服务是否可以支持跨域操作
OSS上传图片访问URL返回http code值为403
Authorization字段计算的方法
Authorization = "OSS " + AccessKeyId + ":" + Signature
Signature = base64(hmac-sha1(AccessKeySecret,
VERB + "\n"
+ Content-MD5 + "\n"
+ Content-Type + "\n"
+ Date + "\n"
+ CanonicalizedOSSHeaders
+ CanonicalizedResource))
细节分析如下:
AccessKeySecret
表示签名所需的密钥。
VERB
表示HTTP请求的Method,主要有PUT、GET、POST、HEAD、DELETE等。
\n
表示换行符。
Content-MD5
表示请求内容数据的MD5值,对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码得出。该请求头可用于消息合法性的检查(消息内容是否与发送时一致),例如”eB5eJF1ptWaXm4bijSPyxw==”,也可以为空。详情请参见
RFC2616 Content-MD5
。
Content-Type
表示请求内容的类型,例如”application/octet-stream”,也可以为空。
Date
表示此次操作的时间,且必须为GMT格式,例如”Sun, 22 Nov 2015 08:16:38 GMT”。
CanonicalizedOSSHeaders
表示以x-oss- 为前缀的HTTP Header的字典序排列。
CanonicalizedResource
表示用户想要访问的OSS资源。
所有以x-oss-为前缀的HTTP Header被称为CanonicalizedOSSHeaders,它的构建方法如下:
将所有以 x-oss-为前缀的HTTP请求头的名字转换成小写的形式 。例如
X-OSS-Meta-Name: TaoBao
转换成
x-oss-meta-name: TaoBao
。
如果以STS获得的AccessKeyId和AccessKeySecret发送请求时,还需要将获得的security-token值以
x-oss-security-token:security-token
的形式加入到签名字符串中。
将步骤1中得到的所有HTTP请求头按照名字的字典序进行升序排列。
删除请求头和内容之间分隔符两端出现的任何空格。例如
x-oss-meta-name: TaoBao
转换成
x-oss-meta-name:TaoBao
。
将每一个请求头和内容用
\n
分隔符分隔拼成最后的CanonicalizedOSSHeaders。
CanonicalizedOSSHeaders可以为空,无需添加最后的分隔符
\n
。
如果只有一个CanonicalizedOSSHeaders,例如
x-oss-meta-a\n
,则需要在最后加上
\n
。
如果有多个CanonicalizedOSSHeaders,例如
x-oss-meta-a:a\nx-oss-meta-b:b\nx-oss-meta-c:c\n
,则需要在每一个CanonicalizedOSSHeaders之后加上
\n
。
将CanonicalizedResource置为空字符串
""
。
设置要访问的OSS资源
/BucketName/ObjectName
。如果仅有BucketName而没有ObjectName,则CanonicalizedResource为”/BucketName/“,如果既没有BucketName也没有ObjectName,则CanonicalizedResource为“/”。
如果请求的资源包括子资源(SubResource) ,那么将所有的子资源按照字典序,从小到大排列并以
&
为分隔符生成子资源字符串。在CanonicalizedResource字符串尾添加
?
和子资源字符串。此时的CanonicalizedResource为
/BucketName/ObjectName?acl&uploadId=UploadId
。
OSS目前支持的子资源(SubResource)包括acl、uploads、location、cors、logging、website、referer、lifecycle、delete、append、tagging、objectMeta、uploadId、partNumber、security-token、position、img、style、styleName、replication、replicationProgress、replicationLocation、cname、bucketInfo、comp、qos、live、status、vod、startTime、endTime、symlink、x-oss-process、response-content-type、response-content-language、response-expires、response-cache-control、response-content-disposition、response-content-encoding等。
子资源(SubResource)有以下三种类型:
资源标识,例如子资源中的acl、append、uploadId、symlink等,详见
关于Bucket的操作
和
关于Object的操作
。
指定返回Header字段,例如
response-***
,详见
GetObject
的
Request Parameters
。
文件(Object)处理方式,例如
x-oss-process
,详见
图片处理
。
签名的字符串必须为
UTF-8
格式。含有中文字符的签名字符串必须先进行
UTF-8
编码,再与
AccessKeySecret
计算最终签名。
签名的方法用
RFC 2104
中定义的HMAC-SHA1方法,其中Key指的是AccessKeySecret。
Content-Type
和
Content-MD5
在请求中不是必须的,但是如果请求需要签名验证,空值的话以换行符
\n
代替。
在所有非HTTP标准定义的header中,只有以
x-oss-
开头的header,需要加入签名字符串(如下方签名示例中的x-oss-magic则需要加入签名字符串);其他非HTTP标准header将被OSS忽略。
PUT /nelson HTTP/1.0 Content-MD5: eB5eJF1ptWaXm4bijSPyxw== Content-Type: text/html Date: Thu, 17 Nov 2005 18:49:58 GMT Host: oss-example.oss-cn-hangzhou.aliyuncs.com X-OSS-Meta-Author: foo@bar.com X-OSS-Magic: abracadabra
Signature = base64(hmac-sha1(AccessKeySecret,VERB + “\n” + Content-MD5 + “\n”+ Content-Type + “\n” + Date + “\n” + CanonicalizedOSSHeaders+ CanonicalizedResource))
“PUT\n eB5eJF1ptWaXm4bijSPyxw==\n text/html\n Thu, 17 Nov 2005 18:49:58 GMT\n x-oss-magic:abracadabra\nx-oss-meta-author:foo@bar.com\n/oss-example/nelson
假如AccessKeyId为“44CF959******252F707”,AccessKeySecret为“OtxrzxIsfpFjA7Sw******8Bw21TLhquhboDYROV”,可用以下方法(以Python为例)计算签名(Signature):
import base64
import hmac
import sha
h = hmac.new("OtxrzxIsfpFjA7Sw******8Bw21TLhquhboDYROV",
"PUT\nODBGOERFMDMzQTczRUY3NUE3NzA5QzdFNUYzMDQxNEM=\ntext/html\nThu, 17 Nov 2005 18:49:58 GMT\nx-oss-magic:abracadabra\nx-oss-meta-author:foo@bar.com\n/oss-example/nelson", sha)
Signature = base64.b64encode(h.digest())
print("Signature: %s" % Signature)
签名(Signature)计算结果应该为26NBxoKd******Dv6inkoDft/yA=,由于Authorization = “OSS”+ AccessKeyId + “:” + Signature,所以最后Authorization为 “OSS 44CF95900***BF252F707:26NBxoKd******Dv6inkoDft/yA=”,然后加上Authorization头组成最后需要发送的消息:
PUT /nelson HTTP/1.0
Authorization:OSS 44CF95900***BF252F707:26NBxoKd******Dv6inkoDft/yA=
Content-Md5: eB5eJF1ptWaXm4bijSPyxw==
Content-Type: text/html
Date: Thu, 17 Nov 2005 18:49:58 GMT
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
X-OSS-Meta-Author: foo@bar.com
X-OSS-Magic: abracadabra
细节分析如下:
如果传入的AccessKeyId不存在或未激活,返回403 Forbidden。错误码:InvalidAccessKeyId。
若用户请求头中Authorization值的格式不对,返回400 Bad Request。错误码:InvalidArgument。
OSS所有的请求都必须使用HTTP 1.1协议规定的GMT时间格式。其中,日期的格式为:
date1 = 2DIGIT SP month SP 4DIGIT; day month year (e.g., 02 Jun 1982)
如果签名验证的时候,头中没有传入Date或者格式不正确,返回403 Forbidden错误。错误码:AccessDenied。
传入请求的时间必须在OSS服务器当前时间之后的15分钟以内,否则返回403 Forbidden。错误码:RequestTimeTooSkewed。
如果AccessKeyId已激活,但OSS判断用户的请求发生签名错误,则返回403 Forbidden,并在返回给用户的response中告诉用户正确的用于验证加密的签名字符串。用户可以根据OSS的response来检查自己的签名字符串是否正确。
返回示例如下:
<?xml version="1.0" ?>
<Error>
SignatureDoesNotMatch
</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
<StringToSignBytes>
47 45 54 0a 0a 0a 57 65 64 2c 20 31 31 20 4d 61 79 20 32 30 31 31 20 30 37 3a 35 39 3a 32 35 20 47 4d 54 0a 2f 75 73 72 65 61 6c 74 65 73 74 3f 61 63 6c
</StringToSignBytes>
<RequestId>
1E446260FF9B****
</RequestId>
<HostId>
oss-cn-hangzhou.aliyuncs.***
</HostId>
<SignatureProvided>
y5H7yzPsA/tP4+0tH1HHvPEwUv8=
</SignatureProvided>
<StringToSign>
Wed, 11 May 2011 07:59:25 GMT
/oss-example?acl
</StringToSign>
<OSSAccessKeyId>
AKIAIVAKMSMOY7VO****
</OSSAccessKeyId>
</Error>
>>> base64.b64encode(hash.digest())
'eB5eJF1ptWaXm4bijSPyxw=='
hash.digest(),计算出二进制数组(128位)。
>>> hash.digest()
'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'
错误计算示例
'781e5e245d69b566979b86e28d23f2c7'
# 错误的MD5值进行base64编码后的结果:
>>> base64.b64encode(hash.hexdigest())
'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='