すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:pay-by-requesterを有効にして、要求者がトラフィック、要求、およびデータ処理の料金を支払うようにします

最終更新日:May 08, 2024

デフォルトでは、バケットの所有者は、バケットに対して生成されたすべての料金を支払います。 ただし、バケットのpay-by-requesterを有効にして、認証された要求者がバケット内のデータにアクセスするときに生成される要求、データ処理、およびトラフィックに対して支払いを行うことができます。 ストレージ料金など、その他の料金のみを支払います。 pay-by-requesterを有効にして、他の要求者によるデータへのアクセスによって発生する料金を支払うことなく、バケット内のデータを共有できます。

シナリオ

  • 大きなデータセットを共有します。 たとえば、研究所は、郵便番号ディレクトリ、参照データ、地理空間情報、またはwebクローラーによって収集されたデータを含むパブリックデータセットをOSSバケットにアップロードし、すべての顧客がデータセットにアクセスできるようにしたいと考えています。 さらに、研究所は、要求者がデータセットへのアクセスによって生成される要求とトラフィック料金を支払うことを望んでいます。

    このビジネス要件を満たすために、研究所はOSSで次の設定を構成できます。

    1. パブリックデータセットが保存されているバケットのアクセス制御リスト (ACL) をpublic-readに設定します。 詳細については、「バケットACL」をご参照ください。

    2. バケットのpay-by-requesterを有効にします。

  • 生産データを顧客またはパートナーに配信します。 たとえば、OSS内の本番データをパートナーがアクセスできるようにし、パートナーが本番データをダウンロードするときにリクエストとトラフィック料金を支払うようにしたいとします。

    このビジネス要件を満たすには、OSSで次の設定を構成します。

    1. 運用データが格納されているバケットのACLをprivateに設定します。 詳細については、「バケットACL」をご参照ください。

    2. バケットのpay-by-requesterを有効にします。

    3. バケットポリシーを使用して、バケット内の本番データにアクセスする権限をパートナーに付与します。 詳細については、「チュートリアル: バケットポリシーを追加して別のAlibaba CloudアカウントのRAMユーザーに権限を付与する」をご参照ください。

    重要

    バケット内の本番データにアクセスする権限をパートナーのRAMユーザーに付与してください。 要求者による支払いのために、Alibaba CloudアカウントのRAMユーザーのAccessKeyペアをパートナーと共有しないでください。 それ以外の場合、リクエスト者はAlibaba CloudアカウントのRAMユーザーを使用して本番データにアクセスするため、リクエスト料金とトラフィック料金が請求されます。

リクエスト方法

  • 匿名ユーザーからのリクエストは許可されません

    バケットのpay-by-requesterを有効にすると、匿名ユーザーはバケットにアクセスできません。 リクエスターは認証情報を提供する必要があります。 OSSは、指定された情報に基づいてリクエスタを識別できます。 このように、要求者は要求およびトラフィック料金を請求される。

    要求者がAlibaba CloudアカウントのRAMユーザーを使用してデータを要求する場合、RAMユーザーが属するAlibaba Cloudアカウントは、要求者から送信された要求と生成されたトラフィックに対して課金されます。

  • リクエストにはx-oss-request-payerヘッダーを含める必要があります。

    バケットのpay-by-requesterを有効にした場合、リクエスターはバケットへのリクエストにx-oss-request-payerヘッダーを指定し、ヘッダーの値をrequesterに設定する必要があります。 これは、要求者が要求およびトラフィックに対して課金されることを理解することを確認する。 それ以外の場合、リクエストは認証できません。

    バケット所有者は、バケットにアクセスするために送信されるリクエストにx-oss-request-payerヘッダーを含める必要はありません。 バケット所有者は、独自のリクエストと生成されたトラフィックに対して課金されます。

課金

pay-by-requesterがバケットに対して有効になる前に、バケットの所有者はバケットに関連付けられたすべての料金を支払います。 pay-by-requesterがバケットに対して有効になった後、バケット所有者に適用される請求可能な項目は、pay-by-requesterが有効になる前の項目とは異なります。 次の表に、pay-by-requesterを有効にした後のバケット所有者と要求者の請求可能項目を示します。

課金カテゴリ

課金項目

支払人

Storage

標準LRSオブジェクトのストレージ使用量

バケット所有者

標準ZRSオブジェクトのストレージ使用量

バケット所有者

IA LRSオブジェクトのストレージ使用量

バケット所有者

IA ZRSオブジェクトのストレージ使用量

バケット所有者

アーカイブLRSオブジェクトのストレージ使用量

バケット所有者

アーカイブZRSオブジェクトのストレージ使用量

バケット所有者

コールドアーカイブLRSオブジェクトのストレージ使用量

バケット所有者

Deep Cold Archive LRSオブジェクトのストレージ使用量

バケット所有者

最小保存期間未満で保存されるIA LRSオブジェクトのストレージ使用率

バケット所有者

アーカイブLRSオブジェクトのストレージ使用量は、最小ストレージ期間未満で保存されます。

バケット所有者

最小保存期間未満で保存されているアーカイブZRSオブジェクトのストレージ使用量

バケット所有者

保存された期間が最短保存期間より短いコールドアーカイブオブジェクトのストレージ使用量

バケット所有者

最小保存期間未満で保存されているDeep Cold Archiveオブジェクトのストレージ使用率

バケット所有者

トラフィック

インターネット経由のアウトバウンドトラフィック

リクエスター

インターネット経由のインバウンドトラフィック

無料

内部ネットワーク経由のアウトバウンドトラフィック

無料

内部ネットワーク経由のインバウンドトラフィック

無料

オリジントラフィック

リクエスター

CRR トラフィック

バケット所有者

API操作呼び出し *1

PUT リクエストの数

リクエスター

GET リクエストの数

リクエスター

データ取得要求

バケット所有者

SelectObjectのスキャンされたデータ容量

バケット所有者

IAオブジェクトの検索

リクエスター

アーカイブオブジェクトの検索

リクエスター

リアルタイムアクセスが有効なアーカイブオブジェクトの取得

バケット所有者

Cold Archiveオブジェクトの検索

バケット所有者

Deep Cold Archiveオブジェクトの検索

バケット所有者

オブジェクトのタグ付け

オブジェクトのタグ付け

バケット所有者

転送アクセラレーション

AccM2MIn

バケット所有者

AccM2MOut

バケット所有者

AccM2OIn

バケット所有者

AccM2OOut

バケット所有者

AccO2MIn

バケット所有者

AccO2MOut

バケット所有者

AccO2OIn

バケット所有者

AccO2OOut

バケット所有者

一時ストレージ

一時レプリカ (LRS) 容量

バケット所有者

DDoS保護

予約済みOSS DDoS保護インスタンス

バケット所有者

最小使用期間内にリリースされたOSS DDoS保護インスタンスの残りの期間

バケット所有者

OSS DDoS保護インスタンスによって保護されたトラフィック

バケット所有者

OSS DDoS保護インスタンスによって保護されたAPIリクエスト

バケット所有者

データインデクシング

メタデータ管理

パブリックプレビューで無料

バケットのクエリ

パブリックプレビューで無料

RTC トラフィック料金

RTC 対応 CRR タスク

バケット所有者

説明

* 1リクエスターがGET、HEAD、またはPOSTリクエストにx-oss-request-payer:requesterヘッダーを含めない場合、バケット所有者はPUTおよびGETリクエストに対して課金されます。

手順

OSSコンソールの使用

  1. にログインします。OSSコンソール.

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、バケットの設定 > リクエスタ・ペイ.

  4. On thePay-by-requesterページ、オンにするリクエスタ・ペイ.

  5. 表示されるメッセージで、OK.

    説明

    pay-by-requesterを無効にする場合は、リクエスタ・ペイ をオフにして、表示されるメッセージの OK をクリックします。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、バケットのpay-by-requesterを設定する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してバケットの従量課金リクエストを設定する方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;

public classデモ {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        try {
            // バケットのpay-by-requesterを有効にします。 
            支払人支払人=支払人。リクエスター;
            ossClient.setBucketRequestPayment(bucketName, payer);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (投げられるce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            // Shut down the OSSClient instance. 
            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';
}
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "http://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";

try {
    $config=配列 (
        "provider" => $provider、
        "endpoint" => $end ポイント、
    );
    $ossClient = new OssClient($config);
    $ossClient->putBucketRequestPayment($bucket、"Requester");
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n"); 
const OSS = require('ali-OSS ')

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを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
});

async関数setBucketRequestPayment(bucket, Payer) {
  try {
    // pay-by-requesterを有効にするバケットの名前を指定します。 
    // 支払人をリクエスターまたはBucketOwnerに設定します。 
    // PayerがRequesterに設定されている場合、pay-by-requesterはバケットに対して有効になります。 要求者は、要求者がバケット内のデータを読み取るときに生成されるトラフィックおよび要求料金を課金される。 
    // 支払人がBucketOwnerに設定されている場合、pay-by-requesterはバケットに対して無効になります。 これは、バケットのデフォルト設定です。 この場合、バケット所有者は生成されたリクエスト料金を請求されます。 
    const result = await client.putBucketRequestPayment(bucket, Payer);
    console.log (結果);
  } catch (e) {
    console.log(e);
  }
}

setBucketRequestPayment('bucketName', 'Requester')
# -*-コーディング: utf-8 -*-

oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
oss2.modelsからPAYER_BUCKETOWNER、PAYER_REQUESTERをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 例: examplebucket. 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')

# バケットのpay-by-requesterを有効にします。 デフォルトのリクエスト支払いモードはPAYER_BUCKETOWNERです。 
result = bucket.put_bucket_request_payment(PAYER_REQUESTER)

Aliyun.OSSを使用した
Aliyun.OSS.Common; を使用

// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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");
// バケットの名前を指定します。 
var bucketName = "examplebucket";

// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    // バケットのpay-by-requesterを有効にします。 
    var request = new SetBucketRequestPaymentRequest(bucketName, RequestPayer.Requester);
    client.SetBucketRequestPayment (リクエスト);
    Console.WriteLine("Set bucket:{0} RequestPayment succeed", bucketName);
}
キャッチ (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
キャッチ (例外ex)
{
    Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
} 
の印刷 ("http responstatus:", result.status) 
パッケージメイン

import (import (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インスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("新しいエラー:", err)
os.Exit(-1)
}

// pay-by-requesterモードを初期化します。 
	reqPayConf := oss.RequestPaymentConfiguration {
支払人: "Requester" 、}

// バケットのpay-by-requesterを有効にします。 
	err = client.SetBucketRequestPayment("<yourBucketName>", reqPayConf)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
} 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);

    /* バケットのpay-by-requesterを有効にします。 */
    SetBucketRequestPaymentRequestリクエスト (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();
    0を返します。} 

ossutilの使用

ossutilを使用して、バケットのpay-by-requesterを設定できます。 詳細については、「リクエスト支払い」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketRequestPayment」をご参照ください。