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

Object Storage Service:PHP SDK V1 を使用した CORS ルールの管理

最終更新日:Nov 30, 2025

オリジン間リソース共有 (CORS) により、Web アプリケーションは異なるオリジンからリソースにアクセスできます。Object Storage Service (OSS) は、クロスオリジンアクセスの権限をコントロールするための CORS の API 操作を提供します。

注意事項

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

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

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

CORS ルールの設定

次のコードは、examplebucket バケットの CORS ルールを設定する方法の例を示しています。

<?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\CoreOssException;
use OSS\Model\CorsConfig;
use OSS\Model\CorsRule;

// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// endpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// bucket を、ご使用のバケット名 (例: examplebucket) に設定します。
$bucket= "examplebucket";

$corsConfig = new CorsConfig();
$rule = new CorsRule();
// クロスオリジンリクエストで許可されるレスポンスヘッダーを設定します。複数の AllowedHeader 値を設定できます。各値には、最大 1 つのアスタリスク (*) ワイルドカードを含めることができます。
// 特別な要件がない場合は、AllowedHeader をアスタリスク (*) に設定します。
$rule->addAllowedHeader("*");
// ユーザーがアプリケーションからアクセスできるレスポンスヘッダーを設定します。複数の ExposeHeader 値を設定できます。ExposeHeader ではアスタリスク (*) ワイルドカードはサポートされていません。
$rule->addExposeHeader("x-oss-header");
// クロスオリジンリクエストで許可されるオリジンを設定します。複数の AllowedOrigin 値を設定できます。各値には、最大 1 つのアスタリスク (*) ワイルドカードを含めることができます。
$rule->addAllowedOrigin("https://example.com:8080");
$rule->addAllowedOrigin("https://*.aliyun.com");
// すべてのオリジンからのリクエストを許可するには、AllowedOrigin をアスタリスク (*) に設定します。
//$rule->addAllowedOrigin("*");
// クロスオリジンリクエストで許可されるメソッドを設定します。
$rule->addAllowedMethod("POST");
// プリフライト (OPTIONS) リクエストへのレスポンスのキャッシュ期間を設定します。単位は秒です。
$rule->setMaxAgeSeconds(10);
// 各バケットには最大 10 個のルールを追加できます。
$corsConfig->addRule($rule);
// Vary: Origin ヘッダーを返すかどうかを指定します。これを false に設定すると、Vary: Origin ヘッダーは返されません。
$corsConfig->setResponseVary(false);

try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    // 既存のルールは上書きされます。
    $ossClient->putBucketCors($bucket, $corsConfig);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");            

CORS ルールの取得

次のコードは、examplebucket バケットの CORS ルールを取得する方法の例を示しています。

<?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;

try {
    // 環境変数からアクセス認証情報を取得し、プロバイダーに保存します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
    $provider = new EnvironmentVariableCredentialsProvider();
    // endpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // bucket を、ご使用のバケット名 (例: examplebucket) に設定します。
    $bucket= "examplebucket";
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"        
    );
    $ossClient = new OssClient($config);
    $corsConfig = $ossClient->getBucketCors($bucket);

    if ($corsConfig->getResponseVary()){
        printf("Response Vary : true" .PHP_EOL);
    }else{
        printf("Response Vary : false" .PHP_EOL);
    }

    foreach ($corsConfig->getRules() as $key => $rule){
        if($rule->getAllowedHeaders()){
            foreach($rule->getAllowedHeaders() as $header){
                printf("Allowed Headers :" .$header .PHP_EOL);
            }
        }
        if ($rule->getAllowedMethods()){
            foreach($rule->getAllowedMethods() as $method){
                printf("Allowed Methods :" .$method . PHP_EOL);
            }

        }
        if($rule->getAllowedOrigins()){
            foreach($rule->getAllowedOrigins() as $origin){
                printf("Allowed Origins :" .$origin , PHP_EOL);
            }

        }
        if($rule->getExposeHeaders()){
            foreach($rule->getExposeHeaders() as $exposeHeader){
                printf("Expose Headers :" .$exposeHeader . PHP_EOL);
            }
        }
        printf("Max Age Seconds :" .$rule->getMaxAgeSeconds() .PHP_EOL);

    }
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
    return;
}

CORS ルールの削除

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

<?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\CoreOssException;

// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// endpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// bucket を、ご使用のバケット名 (例: examplebucket) に設定します。
$bucket= "examplebucket";

try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    $ossClient->deleteBucketCors($bucket);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");            

関連ドキュメント

  • CORS ルールを管理するための完全なサンプルコードについては、「GitHub」をご参照ください。

  • CORS ルールを設定するための API 操作の詳細については、「PutBucketCors」をご参照ください。

  • CORS ルールを取得するための API 操作の詳細については、「GetBucketCors」をご参照ください。

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