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

Object Storage Service:リクエスト元支払いモード (Python SDK V1)

最終更新日:Nov 09, 2025

Object Storage Service (OSS) のバケットでリクエスト元支払いモードが有効になっている場合、リクエストとトラフィック料金はバケットのオーナーではなく、リクエスト元に課金されます。バケットのオーナーにはストレージ料金のみが課金されます。バケットのリクエスト元支払いモードを有効にすると、バケットへのアクセスによって発生するリクエスト料金やトラフィック料金を支払うことなく、バケット内のデータを共有できます。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得されます。アクセス資格情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用してアクセス資格情報を設定する」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。

  • リクエスト元支払いモードを有効にするには、oss:PutBucketRequestPayment 権限が必要です。リクエスト元支払いモードの構成をクエリするには、oss:GetBucketRequestPayment 権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。

リクエスト元支払いモードの設定

次のコードは、バケットのリクエスト元支払いモードを有効にする方法の例を示しています。

# -*- 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())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントが配置されているリージョン (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 response status: ", result.status)

リクエスト元支払いモード構成の取得

次のコードは、バケットのリクエスト元支払いモードの構成をクエリする方法の例を示しています。

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントが配置されているリージョン (cn-hangzhou など) を指定します。このパラメーターは V4 署名に必要であることに注意してください。
region = "cn-hangzhou"

# yourBucketName をバケットの名前に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# リクエスト元支払いモードの構成を取得します。
result = bucket.get_bucket_request_payment()
print('payer:', result.payer)

リクエスト元支払いモードが有効なオブジェクトへのサードパーティアクセス

バケット内のオブジェクトへのアクセスに対してサードパーティに課金するように指定した場合、リクエスターはオブジェクトに対する操作を実行するために、HTTP リクエストに x-oss-request-payer:requester ヘッダーを含める必要があります。このヘッダーが含まれていない場合、エラーが返されます。

次のコードは、PutObjectGetObject、および DeleteObject 操作を呼び出してオブジェクトにアクセスする際に、サードパーティに課金するように指定する方法の例を示しています。このメソッドを使用して、同様の方法で他の API 操作を呼び出してオブジェクトの読み取りおよび書き込み操作を実行するときに、サードパーティに課金するように指定できます。

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.headers import OSS_REQUEST_PAYER

# 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントが配置されているリージョン (cn-hangzhou など) を指定します。このパラメーターは V4 署名に必要であることに注意してください。
region = "cn-hangzhou"

# yourBucketName をバケットの名前に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例: exampledir/exampleobject.txt。
object_name = 'exampledir/exampleobject.txt'
headers = dict()
headers[OSS_REQUEST_PAYER] = "requester"

# ファイルをアップロードするときにヘッダーを指定します。
result = bucket.put_object(object_name, 'test-content', headers=headers)

# ファイルをダウンロードするときにヘッダーを指定します。
result = bucket.get_object(object_name, headers=headers)

# ファイルを削除するときにヘッダーを指定します。
result = bucket.delete_object(object_name, headers=headers)

リファレンス

  • リクエスト元支払いモード機能の完全なサンプルコードについては、「GitHub の例」をご参照ください。

  • リクエスト元支払いモードを有効にするために呼び出すことができる API 操作の詳細については、「PutBucketRequestPayment」をご参照ください。

  • リクエスト元支払いモードの構成をクエリするために呼び出すことができる API 操作の詳細については、「GetBucketRequestPayment」をご参照ください。