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

Object Storage Service:OSS SDK for PHP 2.0

最終更新日:Dec 18, 2025

GitHubOSS SDK for PHP 2.0 開発者ガイドSDK リリース

クイック統合

OSS SDK for PHP 2.0 を統合するには、次の手順を実行します。

image

前提条件

PHP 7.4 以降が必要です。詳細については、composer の公式サイトにアクセスして、Composer パッケージ管理ツールをダウンロードしてください。

php -version コマンドを実行して PHP のバージョンを確認できます。PHP がインストールされていない場合、またはバージョンが 7.4 より前の場合は、PHP をダウンロードしてインストールできます。

SDK のインストール

  1. プロジェクトディレクトリを作成します。次に、以下のコマンドを実行して、Composer を使用して OSS SDK for PHP 2.0 を取得します。要件に基づいて OSS SDK for PHP 2.0 のバージョンを選択します。このトピックのサンプルコードが期待どおりに実行されるように、最新バージョンを使用することを推奨します。

    mkdir oss-php-example && cd oss-php-example && composer require alibabacloud/oss-v2
  2. 次のコードを使用して、OSS SDK for PHP 2.0 パッケージをインポートします。

    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;

アクセス認証情報の設定

RAM ユーザーの AccessKey ペアを使用してアクセス認証情報を設定します。

  1. RAM コンソールで、永続的な [AccessKey ペア] を使用してアクセスする RAM ユーザーを作成します。AccessKey ペアを保存し、RAM ユーザーに AliyunOSSFullAccess 権限を付与します。

  2. RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。

    Linux

    1. 次のコマンドを実行して、環境変数の設定を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 次のコマンドを実行して変更を適用します。

        source ~/.bashrc
      2. 次のコマンドを実行して、環境変数が設定されているかどうかを確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。

      echo $SHELL
      1. デフォルトのシェルタイプに基づいて、次の手順を実行します。

        Zsh

        1. 次のコマンドを実行して、環境変数の設定を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 次のコマンドを実行して変更を適用します。

          source ~/.zshrc
        3. 次のコマンドを実行して、環境変数が設定されているかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数の設定を ~/.bash_profile ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. 以下のコマンドを実行して、変更を適用します。

          source ~/.bash_profile
        3. 次のコマンドを実行して、環境変数が設定されているかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. コマンドプロンプトウィンドウで次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 次のコマンドを実行して、環境変数が設定されているかどうかを確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell で次のコマンドを実行します。

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. 次のコマンドを実行して、環境変数が設定されているかどうかを確認します。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

クライアントの初期化

リージョンとエンドポイントを指定して OSSClient を初期化します。次に、テストコードを実行します。

<?php

/**
 * OSS SDK for PHP 2.0 クライアント設定の完全ガイド
 *
 * ===========================================
 * V4 署名とリージョン設定
 * ===========================================
 * • OSS SDK for PHP 2.0 は、デフォルトで V4 署名アルゴリズムを使用します。
 * • クライアントを初期化する際、リクエストリージョンを識別するために Alibaba Cloud リージョン ID を指定する必要があります。
 * • この例では、中国 (杭州) リージョン ID:cn-hangzhou を使用します。他のリージョン ID については、「リージョンとエンドポイント」をご参照ください。
 *
 * ===========================================
 * エンドポイント設定
 * ===========================================
 * • OSS SDK for PHP 2.0 では、endpoint パラメーターを使用してサービスリクエストのエンドポイントをカスタマイズできます。
 * • エンドポイントを指定しない場合、SDK はリージョン情報に基づいてパブリックエンドポイントを構築します。
 * • たとえば、リージョンが 'cn-hangzhou' の場合、構築されるエンドポイントは 'https://oss-cn-hangzhou.aliyuncs.com' です。
 *
 * ===========================================
 * プロトコルの選択
 * ===========================================
 * • OSS SDK for PHP 2.0 は、エンドポイントを構築する際にデフォルトで HTTPS プロトコルを使用します。これは推奨されるプロトコルです。
 * • HTTP プロトコルを使用するには、エンドポイントを設定する際に明示的に http を指定します。
 * • HTTPS の例:'https://oss-cn-hangzhou.aliyuncs.com'
 * • HTTP の例:'http://oss-cn-hangzhou.aliyuncs.com'
 */

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// 方法 1:リージョンのみを指定します (推奨)。SDK は自動的に HTTPS エンドポイントを構築します。
// 中国 (杭州):cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");

// // 方法 2:リージョンとエンドポイントの両方を指定します。
// $cfg->setRegion(region: 'cn-hangzhou')->setEndpoint(endpoint: 'https://oss-cn-hangzhou.aliyuncs.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// アップロードするデータ。
$data = 'Hello OSS';

// PutObjectRequest オブジェクトを作成してオブジェクトをアップロードします。
$request = new Oss\Models\PutObjectRequest(
                bucket: "ご利用のバケット名",
                key: "ご利用のオブジェクトキー",
            );
$request->body = Oss\Utils::streamFor($data); // リクエストボディをデータストリームに設定します。

// アップロード操作を実行します。
$result = $client->putObject($request);

// アップロード結果を出力します。
printf(
    'status code: %s' . PHP_EOL . // HTTP ステータスコード。
    'request id: %s' . PHP_EOL .  // リクエスト ID。
    'etag: %s' . PHP_EOL,         // オブジェクトの ETag。
    $result->statusCode,
    $result->requestId,
    $result->etag
);

コードを実行すると、次の結果が返され、ファイルがアップロードされたことを示します。

status code: 200
request id: 687F2BEEDC44E0313527BA07
etag: "F0F18C2C66AE1DD512BDCD4366F76DA3"

クライアント設定

サポートされているクライアント設定は何ですか?

パラメーター

説明

region

(必須) リクエストが送信されるリージョン。

setRegion("cn-hangzhou")

credentialsProvider

(必須) アクセス認証情報。

setCredentialsProvider(provider)

endpoint

エンドポイント。

setEndpoint("oss-cn-hanghzou.aliyuncs.com")

retryMaxAttempts

HTTP リクエストの最大リトライ回数。デフォルト値は 3 です。

setRetryMaxAttempts(5)

retryer

HTTP リクエストのリトライ実装。

setRetryer(customRetryer)

connectTimeout

接続を確立するためのタイムアウト期間。デフォルト値は 10 秒です。

setConnectTimeout(5* time.Second)

readWriteTimeout

データの読み書きのタイムアウト期間。デフォルト値は 20 秒です。

setReadWriteTimeout(30 * time.Second)

insecureSkipVerify

SSL 証明書検証をスキップするかどうかを指定します。デフォルトでは、SSL 証明書は検証されます。

setInsecureSkipVerify(true)

enabledRedirect

HTTP リダイレクトを有効にするかどうかを指定します。デフォルトでは、この機能は無効になっています。

setEnabledRedirect(true)

proxyHost

プロキシサーバーを設定します

setProxyHost(‘http://user:passswd@proxy.example-***.com’)

signatureVersion

署名バージョン。デフォルト値は v4 です。

setSignatureVersion("v1")

disableSSL

HTTPS リクエストを使用するかどうかを指定します。デフォルトでは、HTTPS が使用されます。

setDisableSSL(true)

usePathStyle

パス形式の URL を使用するかどうかを指定します。デフォルトでは、仮想ホスト形式の URL が使用されます。

setUsePathStyle(true)

useCName

カスタムドメイン名を使用するかどうかを指定します。デフォルトでは、カスタムドメイン名は使用されません。

setUseCName(true)

useDualStackEndpoint

デュアルスタックエンドポイントを使用するかどうかを指定します。デフォルトでは、デュアルスタックエンドポイントは使用されません。

setUseDualStackEndpoint(true)

useAccelerateEndpoint

アクセラレーションエンドポイントを使用するかどうかを指定します。デフォルトでは、アクセラレーションエンドポイントは使用されません。

setUseAccelerateEndpoint(true)

useInternalEndpoint

内部エンドポイントを使用するかどうかを指定します。デフォルトでは、内部エンドポイントは使用されません。

setUseInternalEndpoint(true)

additionalHeaders

署名される追加のリクエストヘッダー。このパラメーターは V4 署名に対してのみ有効です。

setAdditionalHeaders([‘content-length’])

userAgent

追加の User-Agent 情報。

setUserAgent(‘user identifier’)

カスタムドメイン名の使用

デフォルトの OSS エンドポイントを使用すると、ファイルにアクセスできない、またはプレビューできないなどの問題が発生する可能性があります。これを解決するには、カスタムドメイン名を使用して OSS にアクセスできます。この方法により、ブラウザでファイルをプレビューしたり、Alibaba Cloud CDN を使用してコンテンツ配信を高速化したりできます。

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
// カスタムドメイン名を指定します。例:www.example-***.com。CNAME オプションを有効にするには、setUseCname を true に設定する必要があることに注意してください。そうしないと、カスタムドメイン名を使用できません。
// PutCname 操作を呼び出すには、PHP 8 以降を使用する必要があります。
$cfg->setRegion('cn-hangzhou')->setEndpoint('www.example-***.com')->setUseCname(true);

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

タイムアウト制御

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
$cfg->setRegion(region: "cn-hangzhou");

# 接続タイムアウト期間を設定します。
$cfg->setConnectTimeout(connectTimeout: 30);

# データの読み書きのタイムアウト期間を設定します。
$cfg->setReadwriteTimeout(readwriteTimeout:30);

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

最大リトライ回数

リクエストが失敗した場合、OSSClient はデフォルトでリクエストを 3 回リトライします。

高並行性または不安定なネットワークシナリオでは、setRetryMaxAttempts を使用してリトライ回数を増やすことができます。これにより、リクエストの成功率が向上します。

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// 中国 (杭州):cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");

// HTTP リクエストの最大リトライ回数を設定します。デフォルト値は 3 です。
$cfg->setRetryMaxAttempts(5);

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

HTTP/HTTPS プロトコル

setDisableSSL(true) を使用して HTTPS プロトコルを無効にできます。

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// 中国 (杭州):cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");

// SSL を無効にします。
$cfg->setDisableSSL(true);

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

Swoole フレームワークでのコルーチンの使用

次のコードは、Swoole フレームワークに基づいてコルーチンをサポートする OSS クライアントを作成する方法の例を示しています。

<?php
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;
use GuzzleHttp\HandlerStack;
use Hyperf\Guzzle\CoroutineHandler;
use function Hyperf\Coroutine\co;

// OSS クライアントを設定します。
$region = 'cn-hangzhou'; // OSS リージョン。
$bucket = 'bucket-name'; // 宛先バケット。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); // 環境変数から認証情報を読み込みます。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion(region: $region); // リージョンを設定します。
$cfg->setEndpoint(endpoint: 'http://oss-cn-hangzhou.aliyuncs.com'); // エンドポイントを設定します。

// コルーチンをサポートする OSS クライアントを作成します。
$client = new Oss\Client(config: $cfg, options: ['handler' => HandlerStack::create(handler: new CoroutineHandler())]);

// コルーチンタスク 1:swoole.txt をアップロードします。
co(function () use ($client, $bucket) {
    try {
        $key = 'swoole.txt'; // オブジェクト名。
        $data = 'Hello OSS'; // オブジェクトの内容。
        $request = new Oss\Models\PutObjectRequest($bucket, $key); // アップロードリクエストを作成します。
        $request->body = Oss\Utils::streamFor($data); // リクエストボディを設定します。
        $result = $client->putObject(request: $request); // アップロードを実行します。
        echo "Task 1 Result:\n" . var_export($result, true) . "\n"; // 結果を出力します。
    } catch (\Exception $e) {
        echo "Task 1 Error: " . $e->getMessage() . "\n"; // 例外をキャッチします。
    }
});

// コルーチンタスク 2:hyperf.txt をアップロードします。
co(function () use ($client, $bucket) {
    try {
        $key = 'hyperf.txt'; // オブジェクト名。
        $data = 'Hello OSS'; // オブジェクトの内容。
        $request = new Oss\Models\PutObjectRequest($bucket, $key); // アップロードリクエストを作成します。
        $request->body = Oss\Utils::streamFor($data); // リクエストボディを設定します。
        $result = $client->putObject($request); // アップロードを実行します。
        echo "Task 2 Result:\n" . var_export($result, true) . "\n"; // 結果を出力します。
    } catch (\Exception $e) {
        echo "Task 2 Error: " . $e->getMessage() . "\n"; // 例外をキャッチします。
    }
});

内部エンドポイントの使用

ご利用のアプリケーションが Alibaba Cloud Elastic Compute Service (ECS) インスタンスにデプロイされており、同じリージョン内の OSS リソースに頻繁にアクセスする必要がある場合は、内部エンドポイントを使用してトラフィックコストを削減し、アクセス速度を向上させることができます。

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

// 方法 1:リージョンを指定し、setUseInternalEndpoint を true に設定します。
// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
$cfg->setRegion('cn-hangzhou')->setUseInternalEndpoint(true);

// // 方法 2:リージョンとエンドポイントを直接指定します。
// // バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
// // バケットのリージョンの内部エンドポイントを指定します。たとえば、中国 (杭州) の場合は、エンドポイントを 'https://oss-cn-hangzhou-internal.aliyuncs.com' に設定します。
// // HTTP プロトコルを使用するには、エンドポイントを 'http://oss-cn-hangzhou-internal.aliyuncs.com' に設定します。
// $cfg->setRegion('cn-hangzhou')->setEndpoint('https://oss-cn-hanghzou-internal.aliyuncs.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

アクセラレーションエンドポイントの使用

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

// 方法 1:リージョンを指定し、setUseAccelerateEndpoint を true に設定します。
// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
$cfg->setRegion('cn-hangzhou')->setUseAccelerateEndpoint(true);

// // 方法 2:リージョンとエンドポイントを直接指定します。
// // バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
// // バケットのリージョンのアクセラレーションエンドポイントを指定します。たとえば、中国 (杭州) の場合は、エンドポイントを 'https://oss-accelerate.aliyuncs.com' に設定します。
// $cfg->setRegion('cn-hangzhou')->setEndpoint('https://oss-accelerate.aliyuncs.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

プライベートドメインの使用

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
// プライベートドメインを指定します。例:https://service.corp.example.com
$cfg->setRegion('cn-hangzhou')->setEndpoint('https://service.corp.example.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

Alibaba Gov Cloud エンドポイントの使用

次のコードは、Alibaba Gov Cloud エンドポイントを使用して OSSClient を設定する方法の例を示しています。

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定を読み込み、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

// バケットが配置されているリージョンを指定します。たとえば、中国 (北京) Alibaba Gov Cloud 1 の場合は、リージョンを cn-north-2-gov-1 に設定します。
// バケットのリージョンの内部エンドポイントを指定します。たとえば、中国 (北京) Alibaba Gov Cloud 1 の場合は、エンドポイントを 'https://oss-cn-north-2-gov-1-internal.aliyuncs.com' に設定します。
// HTTP プロトコルを使用するには、エンドポイントを 'http://oss-cn-north-2-gov-1-internal.aliyuncs.com' に設定します。
$cfg->setRegion('cn-north-2-gov-1')->setEndpoint('https://oss-cn-north-2-gov-1-internal.aliyuncs.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

アクセス認証情報の設定

OSS は、認証情報を初期化するための複数の方法を提供しています。認証と権限付与の要件に基づいて方法を選択できます。

アクセス認証情報の選択方法

認証情報プロバイダーの初期化方法

シナリオ

既存の AccessKey ペアまたは STS トークンが必要です

基盤となる認証情報

認証情報の有効期間

認証情報のローテーションまたは更新方法

RAM ユーザーの AccessKey ペアの使用

安全で安定した環境にデプロイされ、外部攻撃の影響を受けにくいアプリケーション。これらのアプリケーションは、頻繁な認証情報のローテーションなしで Alibaba Cloud サービスへの長期的なアクセスを必要とします。

はい

AccessKey ペア

長期間

手動ローテーション

STS トークンの使用

信頼できない環境にデプロイされたアプリケーション。アクセスの有効期間と権限を制御したい場合。

はい

STS トークン

一時的

手動更新

RAM ロールの ARN の使用

クロスアカウントアクセスなど、Alibaba Cloud サービスへの承認済みアクセスを必要とするアプリケーション。

はい

STS トークン

一時的

自動更新

インスタンス RAM ロールの使用

Alibaba Cloud ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes のワーカーノードにデプロイされたアプリケーション。

いいえ

STS トークン

一時的

自動更新

OIDC ロールの ARN の使用

Container Service for Kubernetes のワーカーノードにデプロイされた信頼できないアプリケーション。

いいえ

STS トークン

一時的

自動更新

カスタム認証情報プロバイダー

前述の認証情報設定方法のいずれも要件を満たさない場合は、認証情報を取得する方法をカスタマイズできます。

カスタム

カスタム

カスタム

カスタム

RAM ユーザーの AccessKey ペアの使用

Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペア (AccessKey ID と AccessKey Secret) を使用して、認証情報プロバイダーを初期化できます。この方法は、ご利用のアプリケーションが安全で安定した環境にデプロイされており、外部攻撃の影響を受けにくく、OSS への長期的なアクセスが必要で、認証情報を頻繁にローテーションできない場合に適しています。この方法では AccessKey ペアを手動で維持する必要があり、セキュリティリスクとメンテナンスの複雑さが増すことに注意してください。

警告
  • Alibaba Cloud アカウントは、すべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、システムに重大なリスクが生じます。最小限の必要な権限が付与された RAM ユーザーの AccessKey ペアを使用することを推奨します。

  • RAM ユーザーの AccessKey ペアを作成する方法の詳細については、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID と AccessKey Secret は、AccessKey ペアが作成されたときにのみ表示されます。すぐに保存する必要があります。AccessKey ペアを忘れた場合は、ローテーションのために新しいものを作成してください。

環境変数

  1. RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。

    Linux

    1. CLI で次のコマンドを実行して、環境変数の設定を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 変更を適用します。

        source ~/.bashrc
      2. 環境変数が有効になっているかどうかを確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。

      echo $SHELL
      1. デフォルトのシェルタイプに基づいて環境変数を設定します。

        Zsh

        1. 次のコマンドを実行して、環境変数の設定を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 変更を適用します。

          source ~/.zshrc
        3. 環境変数が有効になっているかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数の設定を ~/.bash_profile ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. 変更を適用します。

          source ~/.bash_profile
        3. 環境変数が有効になっているかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. CMD で次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 環境変数が有効になっているかどうかを確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell で次のコマンドを実行します。

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. 環境変数が有効になっているかどうかを確認します。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. システム環境変数を変更した後は、開発環境を再起動または更新して、最新のシステム環境変数が読み込まれるようにする必要があります。これには、IDE、コマンドラインインターフェイス、その他のデスクトップアプリケーション、およびバックエンドサービスが含まれます。

  3. 環境変数を使用して認証情報を渡します。

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    # バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
    $region = "cn-hangzhou";
    
    // EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // デフォルトの SDK 設定を使用します。
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
    $cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作に使用します。

静的認証情報

次のサンプルコードは、使用する AccessKey ペアを明示的に設定することで、アクセス認証情報をハードコーディングする方法を示しています。

警告

本番環境のアプリケーションにアクセス認証情報を埋め込まないでください。この方法はテスト目的でのみ使用します。

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

# バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
$region = "cn-hangzhou";

# 静的な認証情報プロバイダーを作成し、AccessKey ID と AccessKey Secret を明示的に設定します。ご利用の RAM ユーザーの AccessKey ID と AccessKey Secret に置き換えてください。
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider("RAM AccessKey ID","RAM AccessKey Secret");

// デフォルトの SDK 設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

STS トークンの使用

ご利用のアプリケーションが OSS への一時的なアクセスを必要とする場合は、Security Token Service (STS) から取得した一時的な ID 認証情報 (AccessKey ID、AccessKey Secret、および STS トークン) を使用して認証情報プロバイダーを初期化できます。この方法では STS トークンを手動で維持する必要があり、セキュリティリスクとメンテナンスの複雑さが増すことに注意してください。さらに、OSS に複数回一時的にアクセスしたい場合は、STS トークンを手動で更新する必要があります。

重要
  • OpenAPI を使用して STS トークンを迅速に取得する方法については、「AssumeRole」をご参照ください。

  • SDK を使用して STS トークンを取得する方法については、「STS トークンを使用して OSS にアクセスする」をご参照ください。

  • STS トークンには、トークンが生成されるときに指定された有効期限があることに注意してください。トークンの有効期限が切れると、無効になり使用できなくなります。

  • STS サービスエンドポイントのリストについては、「エンドポイント」をご参照ください。

環境変数

  1. 一時的な ID 認証情報を使用して環境変数を設定します。

    Mac OS X/Linux/UNIX

    警告
    • STS から取得した一時的な ID 認証情報 (AccessKey ID、AccessKey Secret、および STS トークン) を使用します。RAM ユーザーの AccessKey ペアは使用しないでください。

    • STS から取得した AccessKey ID は「STS」で始まることに注意してください。例:「STS.****************」。

    export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>

    Windows

    警告
    • STS から取得した一時的な ID 認証情報 (AccessKey ID、AccessKey Secret、および STS トークン) を使用します。RAM ユーザーの AccessKey ペアは使用しないでください。

    • STS から取得した AccessKey ID は「STS」で始まることに注意してください。例:「STS.****************」。

    set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>
  2. 環境変数を使用して認証情報を渡します。

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    # バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
    $region = "cn-hangzhou";
    
    // EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID、AccessKey Secret、および STS トークンを読み取ります。
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // デフォルトの SDK 設定を使用します。
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
    $cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作に使用します。

静的認証情報

使用する一時的な AccessKey ペアを明示的に設定することで、アプリケーションに認証情報をハードコーディングできます。

警告

本番環境のアプリケーションにアクセス認証情報を埋め込まないでください。この方法はテスト目的でのみ使用します。

<?php

// autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

# バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
$region = "cn-hangzhou";

# 取得した一時的な AccessKey ID と AccessKey Secret を指定します。Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret は使用しないでください。
# STS から取得した AccessKey ID は、次の例のように STS で始まることに注意してください。
$stsAccessKeyId = 'STS.****************';
$stsAccessKeySecret = 'yourAccessKeySecret';
# 取得した STS トークンを指定します。
$stsSecurityToken = 'yourSecurityToken';

# 静的な認証情報プロバイダーを作成し、一時的な AccessKey ID、AccessKey Secret、および STS トークンを明示的に設定します。
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider($stsAccessKeyId, $stsAccessKeySecret, $stsSecurityToken);

// デフォルトの SDK 設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作に使用します。

RAM ロールの ARN の使用

ご利用のアプリケーションがクロスアカウントアクセスなど、OSS への承認済みアクセスを必要とする場合は、RAM ロールの Alibaba Cloud リソースネーム (ARN) を使用して認証情報プロバイダーを初期化できます。この方法は STS トークンを使用します。RAM ロールの ARN を指定することにより、Credentials ツールは STS から STS トークンを取得し、現在のトークンが有効期限切れになる前に AssumeRole 操作を呼び出して新しい STS トークンをリクエストします。policy パラメーターに値を割り当てて、RAM ロールにより小さな権限セットを付与することもできます。

重要
  • Alibaba Cloud アカウントは、すべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、システムに重大なリスクが生じます。最小限の必要な権限が付与された RAM ユーザーの AccessKey ペアを使用することを推奨します。

  • RAM ユーザーの AccessKey ペアを作成する方法の詳細については、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID と AccessKey Secret は、AccessKey ペアが作成されたときにのみ表示されます。すぐに保存する必要があります。AccessKey ペアを忘れた場合は、ローテーションのために新しいものを作成してください。

  • RAM ロールの ARN を取得する方法の詳細については、「CreateRole」をご参照ください。

  1. Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。

    composer require alibabacloud/credentials
  2. AccessKey ペアと RAM ロールの ARN をアクセス認証情報として設定します。

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // 認証情報の種類と関連情報を定義するための設定オブジェクトを作成します。
    $config = new Credential\Config([
        // 認証情報の種類を指定します。この例では、RAM ロールの ARN タイプが使用されます。
        'type' => 'ram_role_arn',
    
        // Alibaba Cloud アカウントの AccessKey ID。
        'accessKeyId' => 'AccessKeyId',
    
        // Alibaba Cloud アカウントの AccessKey Secret。
        'accessKeySecret' => 'AccessKeySecret',
    
        // RAM ロールの ARN。例:acs:ram::USER_Id:role/ROLE_NAME。
        'roleArn' => 'RoleArn',
    
        // 現在のセッションを識別するために使用されるロールセッション名。
        'roleSessionName' => 'yourRoleSessionName',
    
        // オプション。STS トークンの権限を制限するために使用されるポリシー。
        'policy' => 'Policy',
    ]);
    
    // 設定オブジェクトを使用して認証情報インスタンスを初期化します。
    $credential = new Credential($config);
    
    // デフォルトの SDK 設定を読み込みます。
    $cfg = Oss\Config::loadDefault();
    
    // コールバック関数を使用して動的に認証情報を生成するように認証情報プロバイダーを設定します。
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 一時的な認証情報 (STS トークン) を取得します。
        $cred = $credential->getCredential();
    
        // AccessKey ID、AccessKey Secret、および STS トークンを含む認証情報オブジェクトを返します。
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 一時的な AccessKey ID。
            accessKeySecret: $cred->getAccessKeySecret(),   // 一時的な AccessKey Secret。
            securityToken: $cred->getSecurityToken()      // STS トークン。
        );
    }));
    
    // OSS クライアントのリージョン情報を設定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作に使用します。

インスタンス RAM ロールの使用

アプリケーションが ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes のワーカーノードで実行されている場合、RAM ロールを使用して資格情報プロバイダーを初期化することをお勧めします。このメソッドの基盤となるロジックは、セキュリティトークンサービス (STS) トークンに基づいています。RAM ロールを使用すると、ロールを ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes のワーカーノードに関連付けて、インスタンス内の STS トークンを自動的にリフレッシュできます。このメソッドでは AccessKey ペアまたは STS トークンは不要なため、これらの資格情報を手動で管理することに伴うリスクが排除されます。RAM ロールの取得方法の詳細については、「CreateRole」をご参照ください。

  1. Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。

    composer require alibabacloud/credentials
  2. インスタンス RAM ロールをアクセス認証情報として設定します。

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // 認証情報の種類と関連情報を定義するための設定オブジェクトを作成します。
    $config = new Credential\Config([
        // 認証情報の種類を指定します。この例では、ECS インスタンス RAM ロールタイプが使用されます。値は ecs_ram_role に固定されます。
        'type' => 'ecs_ram_role',
    
        // ECS インスタンスにアタッチされている RAM ロールの名前を指定します。
        'roleName' => "<role_name>",  // 実際の RAM ロール名に置き換えてください。
    ]);
    
    // 設定オブジェクトを使用して認証情報インスタンスを初期化します。
    $credential = new Credential($config);
    
    // デフォルトの設定を読み込み、OSS 設定オブジェクトを取得します。
    $cfg = Oss\Config::loadDefault();
    
    // コールバック関数を使用して動的に認証情報を生成するように認証情報プロバイダーを設定します。
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 一時的な認証情報 (STS トークン) を取得します。
        $cred = $credential->getCredential();
    
        // AccessKey ID、AccessKey Secret、および STS トークンを含む認証情報オブジェクトを返します。
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 一時的な AccessKey ID。
            accessKeySecret: $cred->getAccessKeySecret(), // 一時的な AccessKey Secret。
            securityToken: $cred->getSecurityToken()   // STS トークン。
        );
    }));
    
    // OSS クライアントのリージョン情報を設定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作に使用します。
    

OIDC ロールの ARN の使用

Container Service for Kubernetes (ACK) のワーカーノードに RAM ロールを割り当てた後、そのノード上の Pod 内のアプリケーションは、ECS インスタンス上のアプリケーションと同様に、メタデータサービスから STS トークンを取得できます。ただし、顧客からのアプリケーションなど、信頼できないアプリケーションがワーカーノードのインスタンス RAM ロールの STS トークンを取得することを望まない場合があります。これらのアプリケーションが必要な STS トークンを最小限の権限で取得できるようにしつつ、クラウドリソースを保護するには、RAM Roles for Service Account (RRSA) 機能を使用できます。この方法は STS トークンを使用します。ACK は、各アプリケーション Pod に対して OpenID Connect (OIDC) トークンファイルを作成してマウントし、環境変数に設定情報を注入します。Credentials ツールはこれらの変数を読み取り、STS の AssumeRoleWithOIDC 操作を呼び出して、アタッチされたロールの STS トークンを取得します。この方法では、AccessKey ペアや STS トークンを提供する必要がないため、手動での認証情報管理のリスクが排除されます。詳細については、「RRSA を使用して ServiceAccount の RAM 権限を設定し、Pod の権限を分離する」をご参照ください。

  1. Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。

    composer require alibabacloud/credentials
  1. OIDC ロールの ARN をアクセス認証情報として設定します。

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    
    // 認証情報の種類と関連情報を定義するための設定オブジェクトを作成します。
    $config = new Credential\Config([
        // 認証情報の種類を指定します。この例では、OIDC ロールの ARN タイプが使用されます。
        'type' => 'oidc_role_arn',
    
        // OIDC ID プロバイダーの ARN を指定します。これは ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を使用して設定できます。
        'oidcProviderArn' => '<oidc_provider_arn>',  // 実際の OIDC プロバイダーの ARN に置き換えてください。
    
        // OIDC トークンファイルのパスを指定します。これは ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を使用して設定できます。
        'oidcTokenFilePath' => '<oidc_token_file_path>',  // 実際の OIDC トークンファイルのパスに置き換えてください。
    
        // RAM ロールの ARN を指定します。これは ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定できます。
        'roleArn' => '<role_arn>',  // 実際の RAM ロールの ARN に置き換えてください。
    
        // ロールセッション名を指定します。これは ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定できます。
        'roleSessionName' => '<role_session_name>',  // 実際のロールセッション名に置き換えてください。
    
        // オプション。RAM ロールの権限を制限するための権限ポリシーを指定します。
        // ポリシーの例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        'policy' => '',  // 権限を制限するには、これを実際のポリシー JSON 文字列に置き換えてください。
    
        // オプション。セッションの有効期間を秒単位で指定します。デフォルト値は 3,600 秒です。
        'roleSessionExpiration' => 3600,  // 有効期間を調整するには、この値を変更してください。
    ]);
    
    // 設定オブジェクトを使用して認証情報インスタンスを初期化します。
    $credential = new Credential($config);
    
    // デフォルトの設定を読み込み、OSS 設定オブジェクトを取得します。
    $cfg = Oss\Config::loadDefault();
    
    // コールバック関数を使用して動的に認証情報を生成するように認証情報プロバイダーを設定します。
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 一時的な認証情報 (STS トークン) を取得します。
        $cred = $credential->getCredential();
    
        // AccessKey ID、AccessKey Secret、および STS トークンを含む認証情報オブジェクトを返します。
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 一時的な AccessKey ID。
            accessKeySecret: $cred->getAccessKeySecret(), // 一時的な AccessKey Secret。
            securityToken: $cred->getSecurityToken()   // STS トークン。
        );
    }));
    
    // OSS クライアントのリージョン情報を設定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作に使用します。

カスタムアクセス認証情報の使用

前述の認証情報設定方法が要件を満たさない場合は、認証情報を取得する方法をカスタマイズできます。SDK は複数の実装方法をサポートしています。

  1. Oss\Credentials\CredentialsProviderFunc の使用

    Oss\Credentials\CredentialsProviderFunc は、Oss\Credentials\CredentialsProvider のユーザビリティラッパーです。

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once 'vendor/autoload.php';
    
    // 必要な名前空間をインポートします。
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // 無名関数を使用して動的に認証情報を生成する認証情報プロバイダーを作成します。
    $provider = new Oss\Credentials\CredentialsProviderFunc(
        function () {
            // 長期的な認証情報を返します。これには AccessKey ID と AccessKey Secret のみが含まれます。
            return new Credentials(
                accessKeyId: 'id',         // 実際の RAM AccessKey ID に置き換えてください。
                accessKeySecret: 'secret'  // 実際の RAM AccessKey Secret に置き換えてください。
            );
    
            // STS トークンを含む一時的な認証情報を返すには、次のコードのコメントを解除し、値を実際の値に置き換えることができます。
            /*
            return new Credentials(
                accessKeyId: 'id',          // 実際の一時的な AccessKey ID に置き換えてください。
                accessKeySecret: 'secret', // 実際の一時的な AccessKey Secret に置き換えてください。
                securityToken: 'token'     // 実際の STS トークンに置き換えてください。
            );
            */
        }
    );
    
    // デフォルトの設定を読み込み、OSS 設定オブジェクトを取得します。
    $cfg = Oss\Config::loadDefault();
    
    // 認証情報プロバイダーを動的に生成された認証情報プロバイダーに設定します。
    $cfg->setCredentialsProvider($provider);
    
    // OSS クライアントのリージョン情報を設定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作に使用します。
    
  2. Oss\Credentials\CredentialsProvider の実装

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once 'vendor/autoload.php';
    
    // 必要な名前空間をインポートします。
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // CredentialsProvider インターフェイスを実装するカスタム認証情報プロバイダークラス。
    class CustomerCredentialsProvider implements Oss\Credentials\CredentialsProvider
    {
        /**
         * 認証情報を取得するメソッド。長期的または一時的な認証情報を返します。
         *
         * @return Credentials AccessKey ペア情報を含む認証情報オブジェクトを返します。
         */
        public function getCredentials(): Credentials
        {
            // 長期的な認証情報を返します。これには AccessKey ID と AccessKey Secret のみが含まれます。
            return new Credentials(
                accessKeyId: 'id',         // 実際の RAM AccessKey ID に置き換えてください。
                accessKeySecret: 'secret'  // 実際の RAM AccessKey Secret に置き換えてください。
            );
    
            // STS トークンを含む一時的な認証情報を返すには、次のコードのコメントを解除し、値を実際の値に置き換えることができます。
            /*
            return new Credentials(
                accessKeyId: 'id',          // 実際の一時的な AccessKey ID に置き換えてください。
                accessKeySecret: 'secret', // 実際の一時的な AccessKey Secret に置き換えてください。
                securityToken: 'token'     // 実際の STS トークンに置き換えてください。
            );
            */
        }
    }
    
    // カスタム認証情報プロバイダーをインスタンス化します。
    $provider = new CustomerCredentialsProvider();
    
    // デフォルトの設定を読み込み、OSS 設定オブジェクトを取得します。
    $cfg = Oss\Config::loadDefault();
    
    // 認証情報プロバイダーをカスタム認証情報プロバイダーに設定します。
    $cfg->setCredentialsProvider($provider);
    
    // OSS クライアントのリージョン情報を設定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作に使用します。
    

エラーのトラブルシューティング

OSS SDK for PHP 2.0 を使用して OSS にアクセスする際にエラーが発生した場合、OSS は HTTP ステータスコード、メッセージ、リクエスト ID、エラーコード (EC) などの情報を返します。EC はエラーの特定の原因に対応しています。EC を使用してエラーをトラブルシューティングできます。

  1. たとえば、次のコードを使用して存在しないファイルをダウンロードします。

    <?php
    
    // autoload ファイルをインポートして、依存関係が正しく読み込まれるようにします。
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    // コマンドライン引数の説明を定義します。
    $optsdesc = [
        "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // バケットが配置されているリージョン (必須)。
        "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // エンドポイント (オプション)。
        "bucket" => ['help' => 'バケットの名前', 'required' => True], // バケット名 (必須)。
        "key" => ['help' => 'オブジェクトの名前', 'required' => True], // オブジェクト名 (必須)。
    ];
    
    // パラメーターの説明を getopt で必要なロングオプション形式に変換します。
    // 各パラメーターの後のコロン「:」は、パラメーターが値を必要とすることを示します。
    $longopts = \array_map(function ($key) {
        return "$key:";
    }, array_keys($optsdesc));
    
    // コマンドライン引数を解析します。
    $options = getopt("", $longopts);
    
    // すべての必須パラメーターが存在することを確認します。
    foreach ($optsdesc as $key => $value) {
        if ($value['required'] === True && empty($options[$key])) {
            $help = $value['help']; // パラメーターのヘルプ情報を取得します。
            echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
            exit(1); // 必須パラメーターが欠落している場合はプログラムを終了します。
        }
    }
    
    // 解析されたパラメーターから値を抽出します。
    $region = $options["region"]; // バケットが配置されているリージョン。
    $bucket = $options["bucket"]; // バケット名。
    $key = $options["key"];       // オブジェクト名。
    
    // 環境変数から認証情報を読み込みます。
    // EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // デフォルトの SDK 設定を使用します。
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
    $cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
    if (isset($options["endpoint"])) {
        $cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを設定します。
    }
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 指定されたオブジェクトのコンテンツを取得するための GetObjectRequest オブジェクトを作成します。
    $request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);
    
    // オブジェクト取得操作を実行します。
    $result = $client->getObject($request);
    
    // コンテンツを保存するローカルファイルパスを定義します。
    $localFilePath = './test/file.txt'; // 実際のファイルパスに置き換えてください。
    
    // コンテンツをローカルファイルに書き込みます。
    file_put_contents( $localFilePath, $result->body->getContents());
    
    // 結果を出力します。
    // HTTP ステータスコード、リクエスト ID、およびオブジェクトのコンテンツを出力します。
    printf(
        'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、200 は成功を示します。
        'request id:' . $result->requestId . PHP_EOL  // リクエスト ID。デバッグやリクエストの追跡に使用されます。
    );
    
  2. 次のサンプル応答が返されます。応答には 'EC': '0026-00000001' が含まれており、これはエラーの原因の一意の識別子です。

  3. 前述のサンプルエラーリクエストで返された EC に基づいて、問題の原因と対応するソリューションを見つけるには、次の手順を実行します。

    1. OpenAPI トラブルシューティングセンターを開きます。

    2. 検索ボックスに EC (例:0026-00000001) を入力します。

    3. 検索結果で問題の原因と対応するソリューションを見つけます。

サンプルコード

OSS SDK for PHP 2.0 は、参照用に豊富なサンプルコードを提供しています。

サンプル内容

GitHub サンプルファイル

バケットの作成 (OSS SDK for PHP 2.0)

PutBucket.php

バケットのリスト表示 (OSS SDK for PHP 2.0)

ListBuckets.php

バケットの存在確認 (OSS SDK for PHP 2.0)

IsBucketExist.php

バケットのリージョン取得 (OSS SDK for PHP 2.0)

GetBucketLocation.php

バケット情報の取得 (OSS SDK for PHP 2.0)

GetBucketInfo.php

バケットのストレージ容量取得 (OSS SDK for PHP 2.0)

GetBucketStat.php

バケットの削除 (OSS SDK for PHP 2.0)

DeleteBucket.php

バケットタギング (OSS SDK for PHP 2.0)

リクエスタ支払い (OSS SDK for PHP 2.0)

シンプルアップロード (OSS SDK for PHP 2.0)

PutObject.php

追加アップロード (OSS SDK for PHP 2.0)

AppendObject.php

マルチパートアップロード (OSS SDK for PHP 2.0)

CompleteMultipartUpload.php

フォームアップロード (OSS SDK for PHP 2.0)

PostObject.php

署名付き URL を使用したオブジェクトのアップロード (OSS SDK for PHP 2.0)

Presign.php

ファイルアップロードマネージャー (OSS SDK for PHP 2.0)

Uploader.php

シンプルダウンロード (OSS SDK for PHP 2.0)

GetObject.php

範囲ダウンロード (OSS SDK for PHP 2.0)

GetObject.php

署名付き URL を使用したオブジェクトのダウンロード (OSS SDK for PHP 2.0)

Presign.php

ファイルダウンロードマネージャー (OSS SDK for PHP 2.0)

Downloader.php

オブジェクトのコピー (OSS SDK for PHP 2.0)

CopyObject.php

マルチパートコピー (OSS SDK for PHP 2.0)

UploadPartCopy.php

ファイルコピーマネージャー (OSS SDK for PHP 2.0)

Copier.php

オブジェクトの存在確認 (OSS SDK for PHP 2.0)

IsObjectExist.php

オブジェクトのリスト表示 (OSS SDK for PHP 2.0)

ListObjectsV2.php

オブジェクトの削除 (OSS SDK for PHP 2.0)

DeleteObject.php

ファイルの復元

RestoreObject.php

オブジェクトのメタデータ管理 (OSS SDK for PHP 2.0)

HeadObject.php

オブジェクトストレージクラスの変換 (OSS SDK for PHP 2.0)

CopyObject.php

ファイル名の変更 (OSS SDK for PHP 2.0)

CopyObject.php

シンボリックリンクの管理 (OSS SDK for PHP 2.0)

オブジェクトタグの設定 (OSS SDK for PHP 2.0)

オブジェクトタグの取得 (OSS SDK for PHP 2.0)

オブジェクトタグの削除 (OSS SDK for PHP 2.0)

バケット ACL の管理 (OSS SDK for PHP 2.0)

オブジェクト ACL の管理 (OSS SDK for PHP 2.0)

バケットポリシー (OSS SDK for PHP 2.0)

バージョン管理 (OSS SDK for PHP 2.0)

ホットリンク保護 (OSS SDK for PHP 2.0)

オリジン間リソース共有 (OSS SDK for PHP 2.0)

保持ポリシー (OSS SDK for PHP 2.0)

サーバーサイド暗号化 (OSS SDK for PHP 2.0)

クライアントサイド暗号化 (OSS SDK for PHP 2.0)

EncryptionClient.php

データレプリケーション (OSS SDK for PHP 2.0)

アクセス追跡 (OSS SDK for PHP 2.0)

ライフサイクル管理 (OSS SDK for PHP 2.0)

静的ウェブサイトホスティング (OSS SDK for PHP 2.0)

ログストレージ (OSS SDK for PHP 2.0)

アーカイブオブジェクトのリアルタイムアクセス (OSS SDK for PHP 2.0)

PutBucketArchiveDirectRead.php

スカラー検索 (OSS SDK for PHP 2.0)

ベクトル検索 (OSS SDK for PHP 2.0)

カスタムドメイン名のバインド (OSS SDK for PHP 2.0)

転送アクセラレーション (OSS SDK for PHP 2.0)

同期処理 (OSS SDK for PHP 2.0)

ProcessObject.php

非同期処理 (OSS SDK for PHP 2.0)

AsyncProcessObject.php

グローバルパブリックアクセスブロック (OSS SDK for PHP 2.0)

PutPublicAccessBlock.php

バケットレベルのパブリックアクセスブロック (OSS SDK for PHP 2.0)

PutBucketPublicAccessBlock.php