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

Object Storage Service:バケットポリシー (Go SDK V2)

最終更新日:Nov 09, 2025

バケットポリシーは、バケット用の OSS 権限付与ポリシーです。バケットポリシーを使用すると、匿名ユーザーまたは Alibaba Cloud アカウント、RAM ユーザー、RAM ロールなどの指定されたユーザーに対して、特定の OSS リソースへの詳細なアクセスを許可または拒否できます。たとえば、別の Alibaba Cloud アカウントに属する RAM ユーザーに、特定の OSS リソースに対する読み取り専用権限を付与できます。

注意

  • バケットポリシーを設定する前に、この機能についてよく理解していることを確認してください。詳細については、「バケットポリシー」をご参照ください。

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

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

  • バケットポリシーを設定するには、oss:PutBucketPolicy 権限が必要です。バケットポリシーを取得するには、oss:GetBucketPolicy 権限が必要です。バケットポリシーを削除するには、oss:DeleteBucketPolicy 権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーの付与」をご参照ください。

サンプルコード

バケットポリシーの設定

次のコードを使用して、バケットポリシーを設定できます。

package main

import (
	"context"
	"flag"
	"log"
	"strings"

	"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)

	// バケットポリシーを定義します。
	policy := `{
		"Version": "1",
		"Statement": [
			{
				"Action": [
					"oss:PutObject",
					"oss:GetObject"
				],
				"Effect": "Deny",
				"Principal": ["1234567890"],
				"Resource": ["acs:oss:*:1234567890:*/*"]
			}
		]
	}`

	// バケットポリシーを設定するリクエストを作成します。
	request := &oss.PutBucketPolicyRequest{
		Bucket: oss.Ptr(bucketName),       // バケット名。
		Body:   strings.NewReader(policy), // バケットポリシー。
	}

	// バケットポリシーを設定する操作を実行します。
	result, err := client.PutBucketPolicy(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket policy %v", err)
	}

	// バケットポリシーの設定結果を出力します。
	log.Printf("put bucket policy 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)

	// バケットポリシーを取得するリクエストを作成します。
	request := &oss.GetBucketPolicyRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// バケットポリシーを取得する操作を実行します。
	result, err := client.GetBucketPolicy(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get bucket policy %v", err)
	}

	// バケットポリシーの取得結果を出力します。
	log.Printf("get bucket policy 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)

	// バケットポリシーを削除するリクエストを作成します。
	request := &oss.DeleteBucketPolicyRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// バケットポリシーを削除する操作を実行します。
	result, err := client.DeleteBucketPolicy(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket policy %v", err)
	}

	// バケットポリシーの削除結果を出力します。
	log.Printf("delete bucket policy result:%#v\n", result)
}

参考資料

  • バケットポリシーを設定するための完全なサンプルコードについては、「GitHub の例」をご参照ください。

  • バケットポリシーを設定するための API 操作については、「PutBucketPolicy」をご参照ください。

  • バケットポリシーを取得するための完全なサンプルコードについては、「GitHub の例」をご参照ください。

  • バケットポリシーを取得するための API 操作については、「GetBucketPolicy」をご参照ください。

  • バケットポリシーを削除するための完全なサンプルコードについては、「GitHub の例」をご参照ください。

  • バケットポリシーを削除するための API 操作については、「DeleteBucketPolicy」をご参照ください。