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

Object Storage Service:オリジン間リソース共有 (PHP SDK V2)

最終更新日:Nov 09, 2025

ブラウザの同一オリジンポリシーにより、異なるドメイン名間でデータ交換またはリソース共有が行われる際に、クロスオリジンリクエストが拒否される場合があります。このトピックでは、クロスオリジンリソース共有 (CORS) ルールを構成する方法について説明します。CORS ルールでは、リクエストの送信元ドメイン名、クロスオリジンリクエストの送信に使用できるメソッド、および許可されるヘッダーを指定できます。

使用上の注意

  • このトピックのサンプルコードでは、中国 (杭州) リージョン (cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS リージョンとエンドポイント間のマッピングの詳細については、「OSS リージョンとエンドポイント」をご参照ください。

  • CORS ルールを設定するには、oss:PutBucketCors 権限が必要です。CORS ルールを取得するには、oss:GetBucketCors 権限が必要です。CORS ルールを削除するには、oss:DeleteBucketCors 権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。

CORS ルールの構成

次のサンプルコードは、バケットの CORS ルールを構成する方法の例を示しています。

<?php

// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメータの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) バケットの名前を指定します。
];

// コマンドラインパラメータを解析するための長いオプションリストを生成します。
$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"; // 必須パラメータが構成されていないことを指定します。
        exit(1); 
    }
}

// コマンドラインパラメータの値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数を使用して AccessKey ID と AccessKey シークレットを読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 認証プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// バケットの CORS ルールを構成し、CORS で許可される送信元とリクエストメソッドを指定するために、GetBucketCorsRequest オブジェクトを作成します。
$request = new Oss\Models\PutBucketCorsRequest(bucket: $bucket, corsConfiguration: new Oss\Models\CORSConfiguration(
        array(
            new Oss\Models\CORSRule(
                allowedOrigins: ['*'], // すべての送信元からのクロスオリジンリクエストを許可します。
                allowedMethods: ['PUT', 'GET'] // CORS で許可されるリクエストメソッドを指定します。
            )
        )
    )
);

// putBucketCors メソッドを使用して、バケットの CORS 構成を構成します。
$result = $client->putBucketCors($request);

// 返された結果を表示します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // 返された HTTP ステータスコード。
    'request id:' . $result->requestId // リクエストのリクエスト ID。リクエストの一意の識別子です。
);

CORS ルールの照会

次のサンプルコードは、バケットの CORS ルールを照会する方法の例を示しています。

<?php

// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメータの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) バケットの名前を指定します。
];


// Generate a long options list to parse the command line parameters.
$longopts = \array_map(function ($key) {
    return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));

// Parse the command line parameters.
$options = getopt("", $longopts); 

// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // Specify that the required parameters are not configured.
        exit(1); 
    }
}

// Obtain the values of the command line parameters.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.

// Use environment variables to load the AccessKey ID and AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();

// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);

// Specify the region.
$cfg->setRegion($region);

// Specify the endpoint if an endpoint is provided.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Create an OSSClient instance.
$client = new Oss\Client($cfg);

// Create a GetBucketCorsRequest object to query the CORS configurations of a bucket.
$request = new Oss\Models\GetBucketCorsRequest(bucket: $bucket);

// Use the getBucketCors method to query the CORS configurations of the bucket.
$result = $client->getBucketCors($request);

// Display the returned result.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // The returned HTTP status code.
    'request id:' . $result->requestId . PHP_EOL . // The request ID of the request, which is the unique identifier of the request.
    'cors:' . var_export($result->corsConfiguration, true) // The CORS configurations of the bucket.
);

CORS ルールの削除

次のサンプルコードは、バケットのすべての CORS ルールを削除する方法の例を示しています。

<?php

// 依存ライブラリを読み込むために、autoload ファイルを導入します。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメータの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) バケットの名前を指定します。
];

// コマンドラインパラメータを解析するための長いオプションリストを生成します。
$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"; // 必須パラメータが構成されていないことを指定します。
        exit(1); 
    }
}

// コマンドラインパラメータの値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数を使用して AccessKey ID と AccessKey シークレットを読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();

// 認証プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// バケットの CORS 構成を削除するために、DeleteBucketCorsRequest オブジェクトを作成します。
$request = new Oss\Models\DeleteBucketCorsRequest(bucket: $bucket);

// deleteBucketCors メソッドを使用して、バケットの CORS 構成を削除します。
$result = $client->deleteBucketCors($request);

// 返された結果を表示します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // 返された HTTP ステータスコード。
    'request id:' . $result->requestId // リクエストのリクエスト ID。リクエストの一意の識別子です。
);

参考資料

  • CORS の完全なサンプルコードについては、PutBucketCorsGetBucketCors、および DeleteBucketCors をご覧ください。

  • CORS ルールを構成するために呼び出すことができる API 操作の詳細については、「PutBucketCors」をご参照ください。

  • CORS ルールを照会するために呼び出すことができる API 操作の詳細については、「GetBucketCors」をご参照ください。

  • CORS ルールを削除するために呼び出すことができる API 操作の詳細については、「DeleteBucketCors」をご参照ください。