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

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

最終更新日:Nov 09, 2025

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

注意事項

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

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

メソッド定義

CORS ルールの構成

put_bucket_cors(request: PutBucketCorsRequest, **kwargs) → PutBucketCorsResult

CORS ルールのクエリ

get_bucket_cors(request: GetBucketCorsRequest, **kwargs) → GetBucketCorsResult

CORS ルールの削除

delete_bucket_cors(request: DeleteBucketCorsRequest, **kwargs) → DeleteBucketCorsResult

リクエストパラメータ

パラメータ

タイプ

説明

request

PutBucketCorsRequest

リクエストパラメータ。詳細については、PutBucketCorsRequest をご参照ください。

GetBucketCorsRequest

リクエストパラメータ。詳細については、GetBucketCorsRequest をご参照ください。

DeleteBucketCorsRequest

リクエストパラメータ。詳細については、DeleteBucketCorsRequest をご参照ください。

レスポンスパラメータ

タイプ

説明

PutBucketCorsResult

戻り値。詳細については、PutBucketCorsResult をご参照ください。

GetBucketCorsResult

戻り値。詳細については、GetBucketCorsResult をご参照ください。

DeleteBucketCorsResult

戻り値。詳細については、DeleteBucketCorsResult をご参照ください。

CORS ルールの構成の詳細については、「put_bucket_cors」をご参照ください。

CORS ルールの照会について詳しくは、「get_bucket_cors」をご参照ください。

CORS ルールの削除について詳しくは、「delete_bucket_cors」をご参照ください。

サンプルコード

CORS ルールの設定

次のコードを使用して、特定のバケットの CORS ルールを設定できます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します: バケットの CORS を設定します。
parser = argparse.ArgumentParser(description="put bucket cors sample")

# 必須のリージョンとバケット名、オプションのエンドポイントと response_vary を含むコマンドライン引数を定義します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--response_vary', help='Indicates whether the Vary: Origin header was returned. Default value: false', default='false')

def main():
    # コマンドライン引数を解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # ID 検証のために環境変数からアクセス資格情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を使用して設定オブジェクトを作成し、認証プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが指定したコマンドライン引数に基づいて、設定オブジェクトのリージョンプロパティを設定します。
    cfg.region = args.region

    # カスタムエンドポイントが指定されている場合は、設定オブジェクトのエンドポイントプロパティを更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 上記の設定を使用して OSS クライアントを初期化し、OSS と対話します。
    client = oss.Client(cfg)

    # 指定されたバケットの CORS を設定するリクエストを送信します。
    result = client.put_bucket_cors(oss.PutBucketCorsRequest(
            bucket=args.bucket,  # バケット名。
            cors_configuration=oss.CORSConfiguration(
                cors_rules=[
                    # 最初の CORS ルール。
                    oss.CORSRule(
                        allowed_origins=['*'],  # すべてのオリジンを許可します。
                        allowed_methods=['GET', 'HEAD'],  # 許可されるメソッド。
                        allowed_headers=['GET'],  # 許可されるリクエストヘッダー。
                        expose_headers=['x-oss-test', 'x-oss-test1'],  # 公開されるレスポンスヘッダー。
                        max_age_seconds=33012,  # プリフライトリクエストの有効期間。
                    ),
                    # 2 番目の CORS ルール。
                    oss.CORSRule(
                        allowed_origins=['http://www.example.com'],  # 特定のオリジンを許可します。
                        allowed_methods=['PUT', 'POST'],  # 許可されるメソッド。
                        allowed_headers=['*'],  # すべてのリクエストヘッダーを許可します。
                        expose_headers=['x-oss-test2', 'x-oss-test3'],  # 公開されるレスポンスヘッダー。
                        max_age_seconds=33012,  # プリフライトリクエストの有効期間。
                    )
                ],
                response_vary=args.response_vary,  # Vary: Origin ヘッダーを返すかどうかを指定します。デフォルト値は False です。
            ),
    ))

    # 操作結果のステータスコードとリクエスト ID を出力して、リクエストのステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

# このスクリプトが直接実行される場合、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。プログラムのフローはここから始まります。

CORS ルールのクエリ

次のコードを使用して CORS ルールをクエリできます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します: バケットの CORS 設定をクエリします。
parser = argparse.ArgumentParser(description="get bucket cors sample")

# 必須のリージョンとバケット名、オプションのエンドポイントを含むコマンドライン引数を定義します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # コマンドライン引数を解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # ID 検証のために環境変数からアクセス資格情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を使用して設定オブジェクトを作成し、認証プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが指定したコマンドライン引数に基づいて、設定オブジェクトのリージョンプロパティを設定します。
    cfg.region = args.region

    # カスタムエンドポイントが指定されている場合は、設定オブジェクトのエンドポイントプロパティを更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 上記の設定を使用して OSS クライアントを初期化し、OSS と対話します。
    client = oss.Client(cfg)

    # 指定されたバケットの CORS 設定をクエリするリクエストを送信します。
    result = client.get_bucket_cors(oss.GetBucketCorsRequest(
            bucket=args.bucket,  # バケット名。
    ))

    # 操作結果のステータスコード、リクエスト ID、およびレスポンスの vary 値を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' response vary: {result.cors_configuration.response_vary},'
          )

    # 各 CORS ルールの詳細を走査して出力します。
    for r in result.cors_configuration.cors_rules:
        print(f'result: {r.max_age_seconds}, {r.allowed_origins}, {r.allowed_methods}, {r.allowed_headers}, {r.expose_headers}')

# このスクリプトが直接実行される場合、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。プログラムのフローはここから始まります。

CORS ルールの削除

次のコードを使用して、特定のバケットのすべての CORS ルールを削除できます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します: バケットの CORS 設定を削除します。
parser = argparse.ArgumentParser(description="delete bucket cors sample")

# 必須のリージョンとバケット名、オプションのエンドポイントを含むコマンドライン引数を定義します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # コマンドライン引数を解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # ID 検証のために環境変数からアクセス資格情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を使用して設定オブジェクトを作成し、認証プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが指定したコマンドライン引数に基づいて、設定オブジェクトのリージョンプロパティを設定します。
    cfg.region = args.region

    # カスタムエンドポイントが指定されている場合は、設定オブジェクトのエンドポイントプロパティを更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 上記の設定を使用して OSS クライアントを初期化し、OSS と対話します。
    client = oss.Client(cfg)

    # 指定されたバケットの CORS 設定を削除するリクエストを送信します。
    result = client.delete_bucket_cors(oss.DeleteBucketCorsRequest(
            bucket=args.bucket,  # バケット名。
    ))

    # 操作結果のステータスコードとリクエスト ID を出力して、リクエストのステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

# このスクリプトが直接実行される場合、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。プログラムのフローはここから始まります。

関連情報

  • 一般的な CORS 設定エラーのトラブルシューティングの詳細については、「34-CORS」をご参照ください。

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

  • CORS ルールをクエリするための完全なサンプルコードについては、「get_bucket_cors.py」をご参照ください。

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