Saat berbagi dataset besar, Anda dapat mengaktifkan mode Pay-by-requester untuk sebuah bucket. Fitur ini mengalihkan biaya akses data—seperti biaya transfer data dan permintaan—kepada pihak yang meminta data. Pemilik bucket hanya bertanggung jawab atas biaya penyimpanan dan biaya tetap lainnya. Setelah Pay-by-requester diaktifkan untuk sebuah bucket, akses anonim dinonaktifkan dan semua permintaan harus diautentikasi.
Cakupan Penerapan
Pay-by-requester hanya dapat diaktifkan untuk bucket yang memiliki atribut region.
Cara Kerja
OSS memproses permintaan berdasarkan logika berikut:
Jika permintaan menyertakan header
x-oss-request-payer, OSS melakukan autentikasi terhadap pihak yang meminta. Jika autentikasi berhasil, pihak tersebut dikenai biaya transfer data dan biaya permintaan.Jika permintaan tidak menyertakan header
x-oss-request-payer:Jika pihak yang meminta adalah pemilik bucket, permintaan diproses secara normal dan pemilik bucket dikenai semua biaya.
Jika pihak yang meminta bukan pemilik bucket, permintaan ditolak.
Konfigurasi oleh Pemilik Bucket
Langkah 1: Aktifkan Pay-by-requester
Masuk ke OSS console.
Klik Buckets, lalu klik nama bucket target.
Di panel navigasi kiri, pilih .
Pada halaman Pay-by-requester, aktifkan sakelar Pay-by-requester.
Pada kotak dialog yang muncul, klik OK.
Langkah 2: Berikan izin akses kepada pihak yang meminta
Gunakan Bucket Policy untuk memberikan izin akses kepada pihak yang meminta. Tanpa izin ini, pihak tersebut tidak dapat mengakses data.
Pada halaman Buckets, klik nama bucket target.
Di panel navigasi kiri, pilih .
Pada halaman Bucket Policy, pada tab Add in GUI, klik Authorize.
Pada panel Authorize, konfigurasikan kebijakan tersebut. Untuk Authorized User, pilih Other Accounts dan masukkan ID akun Alibaba Cloud atau ARN dari RAM role pihak yang meminta. Formatnya adalah
arn:sts::{RoleOwnerUid}:assumed-role/{RoleName}/{RoleSessionName}.Klik OK.
Mengakses Data sebagai Pihak yang Meminta
Sebagai pihak yang meminta, saat mengakses bucket dengan Pay-by-requester yang diaktifkan, Anda harus menunjukkan dalam permintaan bahwa Anda akan membayar biaya yang timbul.
Console
Masuk ke OSS console.
Di panel navigasi kiri, klik tanda plus (+) di samping Favorite Paths.
Pada kotak dialog Add Favorite Paths, konfigurasikan parameter sesuai tabel berikut.
Parameter
Deskripsi
Adding method
Pilih Add from other authorized buckets untuk menambahkan bucket yang telah diberi otorisasi ke Favorite Paths Anda.
Region
Pilih region tempat bucket yang telah diberi otorisasi berada.
Bucket
Masukkan nama bucket yang telah diberi otorisasi.
Pay-by-requester
Pilih I understand and agree untuk mengonfirmasi persetujuan Anda membayar. Anda kemudian dapat mengakses sumber daya yang ditentukan dalam path file tersebut. Anda akan ditagih biaya yang timbul dari akses ke bucket tersebut, seperti biaya transfer data dan biaya permintaan.
SDK
Kode berikut memberikan contoh cara menentukan bahwa pihak ketiga dikenai biaya saat mengakses objek dengan memanggil operasi PutObject, GetObject, dan DeleteObject. Metode ini juga dapat digunakan untuk menentukan bahwa pihak ketiga dikenai biaya saat melakukan operasi baca dan tulis pada objek melalui operasi API lainnya.
Saat pihak ketiga melakukan operasi objek, mereka harus menyertakan parameter x-oss-request-payer:requester dalam header HTTP. Jika tidak, permintaan akan gagal.
Java
import com.aliyun.oss.ClientBuilderConfiguration;
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.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.io.ByteArrayInputStream;
public class Demo {
public static void main(String[] args) throws Exception{
// Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda. Untuk informasi lebih lanjut tentang endpoint wilayah lainnya, lihat Regions and endpoints.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
String objectName = "exampledir/exampleobject.txt";
Payer payer = Payer.Requester;
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSS Client.
// Panggil metode shutdown untuk melepaskan sumber daya terkait saat OSS Client tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Tentukan pembayar saat pihak ketiga memanggil operasi PutObject.
String content = "hello";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
putObjectRequest.setRequestPayer(payer);
ossClient.putObject(putObjectRequest);
// Tentukan pembayar saat pihak ketiga memanggil operasi GetObject.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
getObjectRequest.setRequestPayer(payer);
OSSObject ossObject = ossClient.getObject(getObjectRequest);
ossObject.close();
// Tentukan pembayar saat pihak ketiga memanggil operasi DeleteObject.
GenericRequest genericRequest = new GenericRequest(bucketName, objectName);
genericRequest.setRequestPayer(payer);
ossClient.deleteObject(genericRequest);
} 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 {
// Matikan instance OSSClient.
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.headers import OSS_REQUEST_PAYER
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma signature V4.
region = "cn-hangzhou"
# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
headers = dict()
headers[OSS_REQUEST_PAYER] = "requester"
# Tentukan header x-oss-request-payer dalam permintaan untuk mengunggah objek.
result = bucket.put_object(object_name, 'test-content', headers=headers)
# Tentukan header x-oss-request-payer dalam permintaan untuk mengunduh objek.
result = bucket.get_object(object_name, headers=headers)
# Tentukan header x-oss-request-payer dalam permintaan untuk menghapus objek.
result = bucket.delete_object(object_name, headers=headers);Go
package main
import (
"fmt"
"io"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instance OSSClient.
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual Anda.
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. Tentukan wilayah aktual.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Tentukan versi algoritma signature.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
payerClient, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("New Error:", err)
os.Exit(-1)
}
// Tentukan nama bucket.
payerBucket, err := payerClient.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Jika pay-by-requester diaktifkan, pihak eksternal harus mengatur parameter oss.RequestPayer(oss.Requester) untuk mengakses konten yang diotorisasi.
// Jika pay-by-requester tidak diaktifkan, pihak eksternal tidak perlu menyertakan parameter oss.RequestPayer(oss.Requester) untuk mengakses konten yang diotorisasi.
// Unggah objek.
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt.
key := "exampledir/exampleobject.txt"
err = payerBucket.PutObject(key, strings.NewReader("objectValue"), oss.RequestPayer("requester"))
if err != nil {
fmt.Println("put Error:", err)
os.Exit(-1)
}
// Daftar semua objek dalam bucket.
lor, err := payerBucket.ListObjects(oss.RequestPayer(oss.Requester))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tampilkan nama objek dalam bucket.
for _, l := range lor.Objects {
fmt.Println("the Key name is :", l.Key)
}
// Unduh objek.
body, err := payerBucket.GetObject(key, oss.RequestPayer(oss.Requester))
if err != nil {
fmt.Println("Get Error:", err)
os.Exit(-1)
}
// Anda harus menutup stream yang diperoleh setelah objek dibaca. Jika tidak, kebocoran koneksi dapat terjadi. Akibatnya, tidak ada koneksi yang tersedia dan terjadi pengecualian.
defer body.Close()
// Baca dan tampilkan konten yang diperoleh.
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
// Hapus objek.
err = payerBucket.DeleteObject(key, oss.RequestPayer(oss.Requester))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}Node.js
const OSS = require('ali-oss');
const bucket = 'bucket-name';
const payer = 'Requester';
const client = new OSS({
// Atur region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Atur bucket ke nama bucket Anda.
bucket: 'yourBucketName',
});
async function main() {
await put();
await get();
await del();
}
async function put() {
const result = await client.putBucketRequestPayment(bucket, payer);
console.log('putBucketRequestPayment:', result);
// Tentukan pembayar untuk operasi PutObject.
const response = await client.put('fileName', path.normalize('D:\\localpath\\examplefile.txt'), {
headers: {
'x-oss-request-payer': 'requester'
}
});
console.log('put:', response);
}
async function get() {
const result = await client.putBucketRequestPayment(bucket, payer);
console.log('putBucketRequestPayment:', result);
// Tentukan pembayar untuk operasi GetObject.
const response = await client.get('fileName', {
headers: {
'x-oss-request-payer': 'requester'
}
});
console.log('get:', response);
}
async function del() {
const result = await client.putBucketRequestPayment(bucket, payer);
console.log('putBucketRequestPayment:', result);
// Tentukan pembayar untuk operasi DeleteObject.
const response = await client.delete('fileName', {
headers: {
'x-oss-request-payer': 'requester'
}
});
console.log('delete:', response);
}
main();
C#
using System;
using System.IO;
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
namespace Samples
{
public class Program
{
public static void Main(string[] args)
{
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket.
var bucketName = "examplebucket";
var objectName = "example.txt";
var objectContent = "More than just cloud.";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instance ClientConfiguration dan ubah parameter sesuai kebutuhan.
var conf = new ClientConfiguration();
// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
try
{
byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
MemoryStream requestContent = new MemoryStream(binaryData);
// Tentukan pembayar saat pihak ketiga memanggil operasi PutObject.
var putRequest = new PutObjectRequest(bucketName, objectName, requestContent);
putRequest.RequestPayer = RequestPayer.Requester;
var result = client.PutObject(putRequest);
// Tentukan pembayar saat pihak ketiga memanggil operasi GetObject.
var getRequest = new GetObjectRequest(bucketName, objectName);
getRequest.RequestPayer = RequestPayer.Requester;
var getResult = client.GetObject(getRequest);
// Tentukan pembayar saat pihak ketiga memanggil operasi DeleteObject.
var delRequest = new DeleteObjectRequest(bucketName, objectName);
delRequest.RequestPayer = RequestPayer.Requester;
client.DeleteObject(delRequest);
}
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);
}
}
}
}PHP
<?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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt.
$object = "exampledir/exampleobject.txt";
// Aktifkan pay-by-requester untuk bucket.
$options = array(
OssClient::OSS_HEADERS => array(
OssClient::OSS_REQUEST_PAYER => 'requester',
));
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Tentukan pembayar saat pihak ketiga memanggil operasi PutObject.
$content = "hello";
$ossClient->putObject($bucket, $object, $content, $options);
// Tentukan pembayar saat pihak ketiga memanggil operasi GetObject.
$ossClient->getObject($bucket, $object, $options);
// Tentukan pembayar saat pihak ketiga memanggil operasi DeleteObject.
$ossClient->deleteObject($bucket, $object, $options);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n"); C++
#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Atur yourEndpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket yang ingin diakses oleh pihak yang meminta. Misalnya, examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek yang ingin diakses oleh pihak yang meminta. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
std::string ObjectName = "exampleobject.txt";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET milik pihak yang meminta telah diatur sebagai variabel lingkungan. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Atur mode pay-by-requester saat Anda mengunggah file. */
std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
*content << "test cpp sdk";
PutObjectRequest putrequest(BucketName, ObjectName, content);
putrequest.setRequestPayer(RequestPayer::Requester);
auto putoutcome = client.PutObject(putrequest);
/* Atur mode pay-by-requester saat Anda mengunduh file ke memori lokal. */
GetObjectRequest getrequest(BucketName, ObjectName);
getrequest.setRequestPayer(RequestPayer::Requester);
auto getoutcome = client.GetObject(getrequest);
/* Atur mode pay-by-requester saat Anda menghapus file. */
DeleteObjectRequest delrequest(BucketName, ObjectName);
delrequest.setRequestPayer(RequestPayer::Requester);
auto deloutcome = client.DeleteObject(delrequest);
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}ossutil
Anda harus menginstal ossutil sebelum dapat menggunakannya.
Sebagai contoh, untuk mengunduh objek menggunakan perintah cp, tentukan parameter --request-payer=requester.
ossutil cp oss://examplebucket/examplefile.txt /localpath --request-payer=requesterAPI
Saat membuat permintaan REST API langsung, sertakan header x-oss-request-payer: requester dalam permintaan Anda. Pastikan header ini juga disertakan dalam perhitungan tanda tangan. Untuk informasi lebih lanjut tentang perhitungan tanda tangan, lihat Include a signature in the header.
GET /oss.jpg HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 24 Feb 2012 06:38:30 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218ePertimbangan Produksi
Penagihan untuk akses melalui RAM role: Saat pihak yang meminta mengakses data dengan mengasumsikan RAM role Alibaba Cloud, akun tempat RAM role tersebut berada membayar permintaan tersebut.
Praktik salah: Mengizinkan pihak yang meminta untuk mengasumsikan RAM role dari akun pemilik bucket guna mendapatkan izin akses. Dalam skenario ini, semua permintaan dieksekusi sebagai pemilik bucket, sehingga biaya permintaan dan transfer data dikenakan kepada pemilik bucket. Praktik ini tidak mengalihkan biaya kepada pihak yang meminta.
Praktik benar: Memberikan izin akses langsung kepada pihak yang meminta menggunakan Bucket Policy.
Perangkap URL yang ditandatangani sebelumnya:
Praktik salah: Pemilik bucket menggunakan kredensial akses mereka (Pasangan Kunci Akses atau kredensial sementara STS) untuk menghasilkan dan membagikan URL yang ditandatangani sebelumnya. Dalam kasus ini, permintaan dilakukan sebagai pemilik bucket, sehingga biaya terkait dikenakan kepada pemilik bucket.
Praktik benar: Pihak yang meminta menggunakan kredensial akses mereka sendiri (Pasangan Kunci Akses atau kredensial sementara STS) untuk menghasilkan URL yang ditandatangani sebelumnya dan menyertakan parameter
x-oss-request-payer=requestersaat menghasilkan URL tersebut. Untuk informasi lebih lanjut tentang cara menghitung tanda tangan, lihat Include a signature in the URL. Saat URL ini dibagikan dan digunakan, biaya dikenakan kepada pihak yang meminta yang menghasilkannya.
Risiko kompatibilitas: Mengaktifkan Pay-by-requester dapat mengganggu akses anonim yang diperlukan untuk hosting situs web statis, yang dapat menyebabkan situs web Anda tidak tersedia. Disarankan untuk menempatkan sumber daya antarmuka depan situs web (HTML, CSS, dan JS) dan data yang memerlukan Pay-by-requester di bucket yang terpisah.
Penagihan
Sebelum Pay-by-requester diaktifkan untuk sebuah bucket, semua biaya dibayar oleh pemilik bucket. Setelah Pay-by-requester diaktifkan, akun pihak yang meminta membayar item yang dapat ditagih berikut, sedangkan akun pemilik bucket tetap dikenai semua item yang dapat ditagih lainnya. Untuk daftar lengkap item yang dapat ditagih, lihat OSS Pricing.
Biaya | Item yang dapat ditagih |
lalu lintas keluar melalui internet | |
lalu lintas sumber | |
Permintaan PUT | |
Permintaan GET | |
Pengambilan data dari Infrequent Access | |
Pengambilan data dari Archive Storage |