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

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

最終更新日:Nov 09, 2025

ブラウザの同一オリジンポリシーは、異なるドメイン名間でデータが交換されたりリソースが共有されたりする際のクロスオリジンリクエストを禁止します。このトピックでは、指定されたドメイン名からのアクセス、指定されたメソッドの使用、および指定されたリクエストヘッダーを許可するクロスオリジンアクセスポリシーを設定することで、これらのクロスドメインの問題を解決する方法について説明します。

使用上の注意

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

  • このトピックの例では、環境変数からアクセス資格情報を取得する方法を示します。アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

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

サンプルコード

オリジン間リソース共有ルールの設定

次のコードを使用して、指定したバケットのオリジン間ルールを設定できます。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットの CORS ルールを設定するリクエストを作成します。
	request := &oss.PutBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		CORSConfiguration: &oss.CORSConfiguration{
			CORSRules: []oss.CORSRule{
				{
					AllowedOrigins: []string{"*"},             // すべてのオリジンからのリクエストを許可します。
					AllowedMethods: []string{"PUT", "GET"},    // 許可されるメソッド。
					AllowedHeaders: []string{"Authorization"}, // 許可されるリクエストヘッダー。
				},
				{
					AllowedOrigins: []string{"http://example.com", "http://example.net"}, // 指定されたオリジンからのリクエストを許可します。
					AllowedMethods: []string{"GET"},                                      // 許可されるメソッド。
					AllowedHeaders: []string{"Authorization"},                            // 許可されるリクエストヘッダー。
					ExposeHeaders:  []string{"x-oss-test", "x-oss-test1"},                // 公開されるレスポンスヘッダー。
					MaxAgeSeconds:  oss.Ptr(int64(100)),                                  // 最大キャッシュ時間 (秒)。
				},
			},
			ResponseVary: oss.Ptr(false), // レスポンスに Vary ヘッダーを含めるかどうかを指定します。
		},
	}

	// バケットの CORS ルールを設定するリクエストを送信します。
	result, err := client.PutBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket cors %v", err)
	}

	// バケットの CORS ルールを設定した結果を出力します。
	log.Printf("put bucket cors result:%#v\n", result)
}

オリジン間リソース共有ルールの照会

次のコードを使用して、オリジン間ルールを照会できます。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットの CORS 設定を照会するリクエストを作成します。
	request := &oss.GetBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
	}

	// バケットの CORS 設定を照会し、結果を処理します。
	getResult, err := client.GetBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get bucket cors %v", err)
	}

	// バケットの CORS 設定を照会した結果を出力します。
	log.Printf("get bucket cors result:%#v\n", getResult.CORSConfiguration.CORSRules)
}

オリジン間リソース共有ルールの削除

次のコードを使用して、指定したバケットのすべてのオリジン間ルールを削除できます。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットの CORS 設定を削除するリクエストを作成します。
	request := &oss.DeleteBucketCorsRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
	}

	// バケットの CORS 設定を削除し、結果を処理します。
	result, err := client.DeleteBucketCors(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket cors %v", err)
	}

	// バケットの CORS 設定を削除した結果を出力します。
	log.Printf("delete bucket cors result:%#v\n", result)
}

関連情報

  • オリジン間リソース共有の完全なサンプルコードについては、「put_bucket_cors.go」、「get_bucket_cors.go」、および「delete_bucket_cors.go」をご参照ください。

  • オリジン間ルールを設定するために呼び出すことができる API 操作の詳細については、「PutBucketCors」をご参照ください。

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

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