大量のデータを共有する場合は、バケットのリクエスト元支払いモードを有効にします。リクエスト元支払いモードでは、トラフィック料金やリクエスト料金などのデータアクセスにかかるコストがリクエスト元に転嫁されます。バケットのオーナーは、ストレージ料金などの固定費のみを支払います。このモードを有効にすると、匿名アクセスが無効になり、すべてのリクエストで認証が必要になります。
使用上の注意
リクエスト元支払いモードは、リージョン属性を持つバケットでのみ利用できます。
仕組み
Object Storage Service (OSS) は、次のロジックに基づいてリクエストを処理します。
リクエストに
x-oss-request-payerヘッダーが含まれている場合、OSS はリクエスト元を認証します。この場合、リクエスト元がすべてのトラフィック料金とリクエスト料金を負担します。リクエストに
x-oss-request-payerヘッダーが含まれていない場合:リクエスト元がバケットのオーナーである場合、OSS はリクエストを処理し、バケットのオーナーがすべてのコストを支払います。
リクエスト元がバケットのオーナーでない場合、OSS はリクエストを拒否します。
バケットのオーナーとしてリクエスト元支払いモードを設定する
ステップ 1: リクエスト元支払いモードを有効にする
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
Pay-by-requester ページで、リクエスト元による支払い スイッチをオンにします。
表示されるダイアログボックスで、OK をクリックします。
ステップ 2: リクエスト元にアクセス権限を付与する
バケットポリシーを使用して、リクエスト元にアクセス権限を付与します。そうしないと、リクエスト元のアクセス試行は拒否されます。
[バケット] ページで、目的のバケットの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[バケットポリシー] ページで、[GUI で追加] タブの [権限付与] をクリックします。
[権限付与] パネルで、ポリシーを設定します。[承認されたユーザー] で [その他のアカウント] を選択し、リクエスト元の Alibaba Cloud アカウント ID または RAM ロールの Alibaba Cloud リソースネーム (ARN) を入力します。ARN のフォーマットは
arn:sts::{RoleOwnerUid}:assumed-role/{RoleName}/{RoleSessionName}です。[OK] をクリックします。
リクエスト元として有料リクエストを行う
バケットのオーナーがバケットのリクエスト元支払いモードを有効にした後、リクエスト元はリクエストに対して課金されることを理解していることを示す必要があります。
以下のセクションでは、リクエスト元が OSS コンソール、SDK、CLI (ossutil)、または API を使用してこの確認を提供する方法について説明します。
コンソール
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、[お気に入りのパス] の横にあるプラス記号 (+) をクリックします。
[お気に入りのパスを追加] ダイアログボックスで、次の表の説明に従ってパラメーターを設定します。
パラメーター
説明
追加方法
[他の承認済みバケットから追加] を選択して、承認済みバケットをお気に入りのパスに追加します。
リージョン
承認済みバケットが存在するリージョンを選択します。
バケット
承認済みバケットの名前を入力します。
リクエスト元支払いモード
[理解し、同意します] を選択して、関連する料金を支払うことを確認します。結果として生じるトラフィック料金とリクエスト料金が請求されます。
SDK
リクエスト元支払いモードが有効になっているバケットにアクセスする場合、リクエストの支払いに同意することを OSS に伝える必要があります。以下の例は、PutObject、GetObject、または DeleteObject を呼び出すときにこれを行う方法を示しています。オブジェクトを読み書きする他の API にも同じ設定を適用できます。
リクエストにヘッダー x-oss-request-payer: requester を追加します。これがない場合、OSS はエラー応答でリクエストを拒否します。
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{
// この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の エンドポイントを指定してください。他のリージョンのエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。完全なパスにバケット名を含めないでください。
String objectName = "exampledir/exampleobject.txt";
Payer payer = Payer.Requester;
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSS クライアントインスタンスを作成します。
// OSS クライアントが不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 第三者が PutObject 操作を呼び出すときに支払者を指定します。
String content = "hello";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
putObjectRequest.setRequestPayer(payer);
ossClient.putObject(putObjectRequest);
// 第三者が GetObject 操作を呼び出すときに支払者を指定します。
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
getObjectRequest.setRequestPayer(payer);
OSSObject ossObject = ossClient.getObject(getObjectRequest);
ossObject.close();
// 第三者が 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 {
// OSSClient インスタンスをシャットダウンします。
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Python
# -*- 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"
# エンドポイントにマッピングされるリージョンの ID を指定します。例: cn-hangzhou。このパラメーターは、署名アルゴリズム V4 を使用する場合に必要です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。
object_name = 'exampledir/exampleobject.txt'
headers = dict()
headers[OSS_REQUEST_PAYER] = "requester"
# オブジェクトをアップロードするリクエストで x-oss-request-payer ヘッダーを指定します。
result = bucket.put_object(object_name, 'test-content', headers=headers)
# オブジェクトをダウンロードするリクエストで x-oss-request-payer ヘッダーを指定します。
result = bucket.get_object(object_name, headers=headers)
# オブジェクトを削除するリクエストで x-oss-request-payer ヘッダーを指定します。
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() {
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、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 に設定します。実際のエンドポイントを指定してください。
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。実際のリージョンを指定してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名アルゴリズムのバージョンを指定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
payerClient, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("New Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。
payerBucket, err := payerClient.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// リクエスト元支払いモードが有効になっている場合、外部のリクエスト元は承認されたコンテンツにアクセスするために oss.RequestPayer(oss.Requester) パラメーターを設定する必要があります。
// リクエスト元支払いモードが有効になっていない場合、外部のリクエスト元は承認されたコンテンツにアクセスするために oss.RequestPayer(oss.Requester) パラメーターを含める必要はありません。
// オブジェクトをアップロードします。
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: 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)
}
// バケット内のすべてのオブジェクトをリストします。
lor, err := payerBucket.ListObjects(oss.RequestPayer(oss.Requester))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケット内のオブジェクトの名前を表示します。
for _, l := range lor.Objects {
fmt.Println("the Key name is :", l.Key)
}
// オブジェクトをダウンロードします。
body, err := payerBucket.GetObject(key, oss.RequestPayer(oss.Requester))
if err != nil {
fmt.Println("Get Error:", err)
os.Exit(-1)
}
// オブジェクトを読み取った後、取得したストリームを閉じる必要があります。そうしないと、接続リークが発生する可能性があります。その結果、利用可能な接続がなくなり、例外が発生します。
defer body.Close()
// 取得したコンテンツを読み取って表示します。
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
// オブジェクトを削除します。
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({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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,
// バケットの名前を指定します。
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);
// 第三者が 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);
// 第三者が 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);
// 第三者が 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)
{
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
var objectName = "example.txt";
var objectContent = "More than just cloud.";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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);
try
{
byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
MemoryStream requestContent = new MemoryStream(binaryData);
// 第三者が PutObject 操作を呼び出すときに支払者を指定します。
var putRequest = new PutObjectRequest(bucketName, objectName, requestContent);
putRequest.RequestPayer = RequestPayer.Requester;
var result = client.PutObject(putRequest);
// 第三者が GetObject 操作を呼び出すときに支払者を指定します。
var getRequest = new GetObjectRequest(bucketName, objectName);
getRequest.RequestPayer = RequestPayer.Requester;
var getResult = client.GetObject(getRequest);
// 第三者が 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;
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントを指定してください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。
$object = "exampledir/exampleobject.txt";
// バケットのリクエスト元支払いモードを有効にします。
$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);
// 第三者が PutObject 操作を呼び出すときに支払者を指定します。
$content = "hello";
$ossClient->putObject($bucket, $object, $content, $options);
// 第三者が GetObject 操作を呼び出すときに支払者を指定します。
$ossClient->getObject($bucket, $object, $options);
// 第三者が 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)
{
/* OSS へのアクセスに使用するアカウントに関する情報を初期化します。 */
/* リクエスト元がアクセスしたいバケットが配置されているリージョンのエンドポイントを指定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
std::string Region = "yourRegion";
/* リクエスト元がアクセスしたいバケットの名前を指定します。例: examplebucket。 */
std::string BucketName = "examplebucket";
/* リクエスト元がアクセスしたいオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 */
std::string ObjectName = "exampleobject.txt";
/* ネットワークリソースなどのリソースを初期化します。 */
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);
/* オブジェクトをアップロードする際にリクエスト元支払いモードを有効にします。 */
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);
/* オブジェクトをメモリにダウンロードする際にリクエスト元支払いモードを有効にします。 */
GetObjectRequest getrequest(BucketName, ObjectName);
getrequest.setRequestPayer(RequestPayer::Requester);
auto getoutcome = client.GetObject(getrequest);
/* オブジェクトを削除する際にリクエスト元支払いモードを有効にします。 */
DeleteObjectRequest delrequest(BucketName, ObjectName);
delrequest.setRequestPayer(RequestPayer::Requester);
auto deloutcome = client.DeleteObject(delrequest);
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
return 0;
}ossutil
開始する前に ossutil をインストールします。
cp コマンドを使用してオブジェクトをダウンロードするには、--request-payer=requester パラメーターを指定します。
ossutil cp oss://examplebucket/examplefile.txt /localpath --request-payer=requesterAPI
直接 RESTful API リクエストを行うには、リクエストに x-oss-request-payer: requester ヘッダーを含め、このヘッダーが署名計算に含まれていることを確認します。詳細な手順については、「ヘッダーに署名を含める」をご参照ください。
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=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e本番環境での適用
RAM ロールアクセスに対する課金の帰属: リクエスト元が RAM ロールを偽装してデータにアクセスする場合、RAM ロールが属するアカウントがリクエストの料金を支払います。
誤った実践: リクエスト元にバケットオーナーのアカウントから RAM ロールを偽装させてアクセス権限を取得させること。すべてのリクエストはバケットオーナーとして実行され、バケットオーナーにリクエスト料金とトラフィック料金が請求されるため、リクエスト元支払いモードの目的が損なわれます。
正しい実践: バケットポリシーを通じてリクエスト元に直接アクセス権限を付与します。
署名付き URL の落とし穴:
誤った実践: バケットオーナーが認証情報 (AccessKey ペアまたは STS 一時認証情報) を使用して署名付き URL を生成し、共有すること。リクエスト元はバケットオーナーとしてリクエストを実行し、バケットオーナーに課金されます。
正しい実践: リクエスト元が認証情報 (AccessKey ペアまたは STS 一時認証情報) を使用して署名付き URL を生成し、
x-oss-request-payer=requesterパラメーターを含めること。署名計算の詳細については、「URL に署名を含める」をご参照ください。この URL を使用すると、それを生成したリクエスト元に課金されます。
互換性のリスク: リクエスト元支払いモードを有効にすると、静的 Web サイトホスティングに必要な匿名アクセスが無効になります。Web サイトが利用できなくなります。この問題を回避するには、Web サイトのフロントエンドアセット (HTML、CSS、JS) を、リクエスト元支払いモードが必要なデータとは別のバケットでホストします。
課金
リクエスト元支払いモードが有効になっている場合、リクエスト元は以下の課金項目を支払います。バケットのオーナーは、他のすべての項目を引き続き支払います。課金項目の完全なリストについては、「OSS 料金」をご参照ください。
料金 | 課金項目 |
インターネット経由のアウトバウンドトラフィック | |
オリジントラフィック | |
PUT リクエスト数 | |
GET リクエスト数 | |
IA オブジェクトの取得 | |
アーカイブオブジェクトの取得 |