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

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

最終更新日:Nov 29, 2025

異なるドメイン間でデータを交換したり、リソースを共有したりする場合、ブラウザの同一オリジンポリシーによりクロスオリジンリクエストは拒否されます。この問題を解決するには、特定のドメイン名、メソッド、リクエストヘッダーからのアクセスを許可するオリジン間リソース共有 (CORS) ルールを設定します。

注意事項

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

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

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

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

サンプルコード

CORS ルールの設定

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

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// bucketName をお使いのバケット名に設定します。
	bucketName := "yourBucketName"

	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンの場合は、実際のエンドポイントを使用してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンの場合は、実際のリージョンを使用してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	isTrue := true
	rule1 := oss.CORSRule{
		AllowedOrigin: []string{"*"},
		AllowedMethod: []string{"PUT", "GET", "POST"},
		AllowedHeader: []string{},
		ExposeHeader:  []string{},
		MaxAgeSeconds: 100,
	}

	rule2 := oss.CORSRule{
		AllowedOrigin: []string{"http://www.a.com", "http://www.b.com"},
		AllowedMethod: []string{"GET"},
		AllowedHeader: []string{"Authorization"},
		ExposeHeader:  []string{"x-oss-test-01", "x-oss-test-02"},
		MaxAgeSeconds: 100,
	}

	put := oss.PutBucketCORS{}
	put.CORSRules = []oss.CORSRule{rule1, rule2}
	put.ResponseVary = &isTrue

	// CORS ルールを設定します。
	err = client.SetBucketCORSV2(bucketName, put)
	if err != nil {
		log.Fatalf("Error setting CORS rules: %v", err)
	}

	log.Println("Set Success")
}

CORS ルールの取得

次のコードは、指定されたバケットの CORS ルールを取得する方法を示しています。

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// bucketName をお使いのバケット名に設定します。
	bucketName := "yourBucketName"

	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンの場合は、実際のエンドポイントを使用してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンの場合は、実際のリージョンを使用してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// CORS ルールを取得します。
	corsRes, err := client.GetBucketCORS(bucketName)
	if err != nil {
		log.Fatalf("Error getting CORS rules: %v", err)
	}

	// CORS ルールを出力します。
	for _, rule := range corsRes.CORSRules {
		log.Printf("Cors Rules Allowed Origin: %v", rule.AllowedOrigin)
		log.Printf("Cors Rules Allowed Method: %v", rule.AllowedMethod)
		log.Printf("Cors Rules Allowed Header: %v", rule.AllowedHeader)
		log.Printf("Cors Rules Expose Header: %v", rule.ExposeHeader)
		log.Printf("Cors Rules Max Age Seconds: %d", rule.MaxAgeSeconds)
	}

	if corsRes.ResponseVary != nil {
		log.Printf("Cors Rules Response Vary: %t", *corsRes.ResponseVary)
	}
}

CORS ルールの削除

次のコードは、指定されたバケットのすべての CORS ルールを削除する方法を示しています。

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンの場合は、実際のエンドポイントを使用してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンの場合は、実際のリージョンを使用してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// bucketName をバケット名 (例: examplebucket) に設定します。
	bucketName := "examplebucket"

	// CORS ルールを削除します。
	err = client.DeleteBucketCORS(bucketName)
	if err != nil {
		log.Fatalf("Error deleting CORS rules: %v", err)
	}

	log.Println("Delete Bucket CORS Success")
}

関連ドキュメント

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

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

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

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