通常情況下,儲存空間(Bucket)的擁有者需要支付Bucket產生的所有費用。然而,您可以為Bucket開啟要求者付費模式,使通過身分識別驗證的要求者支付訪問Bucket內資料時產生的流量、請求次數、資料處理費用,而Bucket的擁有者僅支付儲存等其他費用。當您希望共用資料,但又不希望支付因共用資料產生的額外費用時,您可以開啟要求者付費模式。
請求方式
不允許匿名訪問
如果您在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擁有者 |
Archive Storage(本地冗餘)不足規定時間長度容量 | Bucket擁有者 |
Archive Storage(同城冗餘)不足規定時間長度容量 | Bucket擁有者 |
冷Archive Storage不足規定時間長度容量 | Bucket擁有者 |
深度冷Archive Storage不足規定時間長度容量 | Bucket擁有者 |
流量費用 | 外網流出流量 | 要求者 |
外網流入流量 | 免費 |
內網流出流量 | 免費 |
內網流入流量 | 免費 |
CDN回源流出流量 | 要求者 |
跨地區複製流量 | Bucket擁有者 |
①請求費用 | Put類型請求次數 | 要求者 |
Get類型請求次數 | 要求者 |
取回請求 | Bucket擁有者 |
| Select掃描資料量 | Bucket擁有者 |
低頻訪問資料取回容量 | 要求者 |
Archive Storage資料取回容量 | 要求者 |
歸檔直讀資料取回容量 | Bucket擁有者 |
冷Archive Storage資料取回容量 | Bucket擁有者 |
深度冷Archive Storage資料取回容量 | 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查詢費 | 公測階段,免費 |
說明 ①如果要求者未在請求中(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。