说明 无地域属性存储空间不支持开启请求者付费模式。
请求方式
不允许匿名访问
如果您在Bucket上启用了请求者付费模式,则不允许匿名访问该Bucket。请求方必须提供身份验证信息,以便OSS能够识别请求方,从而对请求方而非Bucket拥有者收取请求所产生的费用。
当请求者是通过扮演阿里云RAM角色来请求数据时,该角色所属的账户将为此请求付费。
请求中需携带请求头x-oss-request-payer
如果您在Bucket上启用了请求者付费模式,请求中必须携带x-oss-request-payer
请求头,且取值为requester,以表明请求方已了解需要支付请求和数据下载费用。否则,请求方无法通过验证。
数据拥有者访问该Bucket时,可以不携带x-oss-request-payer
请求头。当数据拥有者作为请求者访问该Bucket时,请求产生的费用由数据拥有者(也是请求者)来支付。
费用说明
Bucket开启请求者付费前,所有费用均由Bucket拥有者支付。Bucket开启请求者付费模式后,由Bucket拥有者支付的计费项将产生变化。Bucket拥有者以及请求者支付的详细说明如下:
费用 | 计费项 | 支付者 |
存储费用 | 标准存储(本地冗余)容量 | Bucket拥有者 |
标准存储(同城冗余)容量 | Bucket拥有者 |
低频访问(本地冗余)容量 | Bucket拥有者 |
低频访问(同城冗余)容量 | Bucket拥有者 |
归档(本地冗余)容量 | Bucket拥有者 |
归档(同城冗余)容量 | Bucket拥有者 |
冷归档(本地冗余)容量 | Bucket拥有者 |
深度冷归档(本地冗余)容量 | Bucket拥有者 |
低频访问(本地冗余)不足规定时长容量 | Bucket拥有者 |
归档存储(本地冗余)不足规定时长容量 | Bucket拥有者 |
归档存储(同城冗余)不足规定时长容量 | Bucket拥有者 |
冷归档存储不足规定时长容量 | Bucket拥有者 |
深度冷归档存储不足规定时长容量 | Bucket拥有者 |
无地域属性存储容量 | Bucket拥有者 |
流量费用 | 外网流出流量 | 请求者 |
外网流入流量 | 免费 |
内网流出流量 | 免费 |
内网流入流量 | 免费 |
CDN回源流出流量 | 请求者 |
跨区域复制流量 | Bucket拥有者 |
①请求费用 | Put类型请求次数 | 请求者 |
Get类型请求次数 | 请求者 |
取回请求 | Bucket拥有者 |
数据处理 | 图片处理 | 请求者 |
图片高级压缩 | Bucket拥有者 |
视频截帧 | 请求者 |
Select扫描数据量 | Bucket拥有者 |
低频访问数据取回容量 | 请求者 |
归档存储数据取回容量 | 请求者 |
归档直读数据取回容量 | Bucket拥有者 |
冷归档存储数据取回容量 | Bucket拥有者 |
深度冷归档存储数据取回容量 | Bucket拥有者 |
对象标签费用 | 对象标签 | Bucket拥有者 |
传输加速费用 | 传输加速AccM2MIn | Bucket拥有者 |
传输加速AccM2MOut | Bucket拥有者 |
传输加速AccM2OIn | Bucket拥有者 |
传输加速AccM2OOut | Bucket拥有者 |
传输加速AccO2MIn | Bucket拥有者 |
传输加速AccO2MOut | Bucket拥有者 |
传输加速AccO2OIn | Bucket拥有者 |
传输加速AccO2OOut | Bucket拥有者 |
临时存储费用 | 临时存储容量(本地冗余) | Bucket拥有者 |
DDoS防护费用 | 高防资源预留费用 | Bucket拥有者 |
高防资源提前释放费用 | Bucket拥有者 |
高防流量防护费用 | Bucket拥有者 |
高防请求防护费用 | Bucket拥有者 |
数据索引费用 | Meta管理费 | 公测阶段,免费 |
Bucket查询费 | 公测阶段,免费 |
敏感数据保护费用 | 敏感数据保护扫描容量 | Bucket拥有者 |
OSS加速器费用 | OSS加速器容量 | Bucket拥有者 |
OSS-HDFS元数据管理费用 | 元数据管理 | Bucket拥有者 |
跨区域复制RTC费用 | 跨区域复制RTC | Bucket拥有者 |
说明 ①如果请求者未在请求中(GET、HEAD或POST)声明请求者付费的请求头x-oss-request-payer
,则由Bucket拥有者支付Put类和Get类请求次数费用。
操作方式
使用OSS控制台
登录OSS管理控制台。
单击Bucket 列表,然后单击目标Bucket名称。
在左侧导航栏,选择。
在请求者付费页面,打开请求者付费开关。
在弹出的对话框,单击确定。
说明 如果您需要关闭请求者付费,您可以关闭请求者付费开关,然后单击确定。
使用阿里云SDK
以下仅列举常见SDK的设置请求者付费模式的代码示例。关于其他SDK的设置请求者付费模式的代码示例,请参见SDK简介。
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception{
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
String region = "cn-hangzhou";
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 设置请求者付费模式。
Payer payer = Payer.Requester;
ossClient.setBucketRequestPayment(bucketName, payer);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (Throwable ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
// 关闭OSSClient。
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$ossClient->putBucketRequestPayment($bucket, "Requester");
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss')
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// yourBucketName填写Bucket名称。
bucket: 'yourBucketName',
});
async function setBucketRequestPayment(bucket, Payer) {
try {
// bucket填写需要设置请求者付费模式的存储空间名称。
// Payer取值为Requester或BucketOwner。
// Payer设置为Requester,表明该存储空间已开启请求者付费模式,由请求者支付读取存储空间(Bucket)内数据时产生的流量费用和请求费用。
// Payer设置为BucketOwner,表明该存储空间不开启请求者付费模式(默认状态),即请求产生的费用由数据拥有者(BucketOwner)来支付。
const result = await client.putBucketRequestPayment(bucket, Payer);
console.log(result);
} catch (e) {
console.log(e);
}
}
setBucketRequestPayment('bucketName', 'Requester')
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import PAYER_BUCKETOWNER, PAYER_REQUESTER
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"
# yourBucketName填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# 设置请求者付费模式,默认的付费者为PAYER_BUCKETOWNER。
result = bucket.put_bucket_request_payment(PAYER_REQUESTER)
print("http respon status: ", result.status)
using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填写Bucket名称。
var bucketName = "examplebucket";
// 填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。
const string region = "cn-hangzhou";
// 创建ClientConfiguration实例,按照您的需要修改默认参数。
var conf = new ClientConfiguration();
// 设置v4签名。
conf.SignatureVersion = SignatureVersion.V4;
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
// 设置请求者付费模式。
var request = new SetBucketRequestPaymentRequest(bucketName, RequestPayer.Requester);
client.SetBucketRequestPayment(request);
Console.WriteLine("Set bucket:{0} RequestPayment succeeded ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// yourRegion填写Bucket所在地域,以华东1(杭州)为例,填写为cn-hangzhou。其它Region请按实际情况填写。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 设置签名版本
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("New Error:", err)
os.Exit(-1)
}
// 初始化请求者付费模式。
reqPayConf := oss.RequestPaymentConfiguration{
Payer: "Requester",
}
// 设置请求者付费模式。
err = client.SetBucketRequestPayment("<yourBucketName>", reqPayConf)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/*初始化OSS账号信息。*/
/*yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/ *yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn - hangzhou。 * /
std::string Region = "yourRegion";
/*填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/*初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/*设置请求者付费模式。*/
SetBucketRequestPaymentRequest request(BucketName);
request.setRequestPayer(RequestPayer::Requester);
auto outcome = client.SetBucketRequestPayment(request);
if (!outcome.isSuccess()) {
/*异常处理。*/
std::cout << "SetBucketRequestPayment fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/*释放网络等资源。*/
ShutdownSdk();
return 0;
}
使用命令行工具ossutil
您可以使用命令行工具ossutil来设置请求者付费模式,ossutil的安装请参见安装ossutil。
以下示例展示了如何为存储空间examplebucket
设置请求者付费模式。
ossutil api put-bucket-request-payment --bucket examplebucket --request-payment-configuration "{\"Payer\":\"Requester\"}"
如果您想了解该命令的更多信息,请参见put-bucket-request-payment。