请求者付费模式
阿里云对象存储OSS的请求者付费模式是指由请求者支付读取存储空间(Bucket)内数据时产生的流量费用和请求费用,而Bucket拥有者仅支付存储费用。当您希望共享数据,但又不希望产生流量费用和请求费用时,您可以开启此功能。
请求方式说明
- 不允许匿名访问
如果您的Bucket启用了请求者付费模式,则不允许匿名访问该Bucket。请求方必须提供身份验证信息,以便OSS能够识别请求方,从而对请求方而非Bucket拥有者收取请求所产生的费用。
当请求者是通过扮演阿里云RAM角色来请求数据时,该角色所属的账户将为此请求付费。
- 申请方需携带x-oss-request-payer信息
如果您的Bucket启用了请求者付费模式,请求方必须在PUT、POST、GET和HEAD等请求的Header信息中包含x-oss-request-payer:requester,以表明请求方知道请求和数据下载将产生费用。否则,请求方无法通过验证。
数据拥有者访问该Bucket时,可以不携带x-oss-request-payer请求头。数据拥有者作为请求者访问该Bucket时,请求产生的费用由数据拥有者(也是请求者)来支付。
有关请求者付费模式的详情,请参见开发指南的请求者付费模式。
设置请求者付费模式
以下代码用于设置请求者付费模式:
# -*- coding: utf-8 -*-
import oss2
from oss2.models import PAYER_BUCKETOWNER, PAYER_REQUESTER
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
# 设置请求者付费模式,默认的付费者为PAYER_BUCKETOWNER。
result = bucket.put_bucket_request_payment(PAYER_REQUESTER)
print("http respon status: ", result.status)
获取请求者付费模式配置
以下代码用于获取请求者付费模式配置:
# -*- coding: utf-8 -*-
import oss2
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>')
# 查看付费者模式。
result = bucket.get_bucket_request_payment()
print('payer:', result.payer)
第三方付费访问Object
第三方操作Object时需在http header中携带x-oss-request-payer:requester参数,否则会报错。
以下代码以PutObject和DeleteObject为例,用于指定第三方付费访问Object。
其他用于指定第三方付费的Object读写操作接口设置方法类似。
以下代码用于设置第三方付费访问Object:
# -*- coding: utf-8 -*-
import oss2
from oss2.headers import OSS_REQUEST_PAYER
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourRequestBucketName>')
object_name = '<yourRequestobjectName>'
headers = dict()
headers[OSS_REQUEST_PAYER] = "requester"
# 上传文件, 需要指定header。
result = bucket.put_object(object_name, 'test-content', headers=headers)
# 删除文件, 需要指定header。
result = bucket.delete_object(object_name, headers=headers);
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论