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

Object Storage Service:バケットの ACL の管理 (Go SDK V2)

最終更新日:Nov 09, 2025

バケットは、Object Storage Service (OSS) でオブジェクトを格納するために使用されるコンテナーです。この Topic では、Go SDK V2 を使用してバケットのアクセスコントロールリスト (ACL) を設定および取得する方法について説明します。

使用上の注意

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

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

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

ACL の種類

バケットでは、次の 3 種類の ACL を使用できます。

ACL

説明

メソッド

非公開

このバケットの所有者または承認されたユーザーのみがオブジェクトの読み書きを行えます。他のユーザーはバケット内のオブジェクトにアクセスできません。

oss.BucketACLPrivate

パブリック読み取り

このバケットの所有者または承認されたユーザーのみがオブジェクトの読み書きを行えます。匿名ユーザーを含む他のユーザーは、バケット内のオブジェクトの読み取りのみを行えます。この値に ACL を設定する場合は注意が必要です。

oss.BucketACLPublicRead

パブリック読み書き

匿名ユーザーを含むすべてのユーザーがオブジェクトの読み書きを行えます。この値に ACL を設定する場合は注意が必要です。

oss.BucketACLPublicReadWrite

サンプルコード

次のコードを使用して、バケットの ACL を設定および取得できます。

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)

	// バケット ACL を設定するリクエストを作成します。
	putRequest := &oss.PutBucketAclRequest{
		Bucket: oss.Ptr(bucketName),  // バケット名。
		Acl:    oss.BucketACLPrivate, // アクセス権限を private に設定します。
	}

	// バケット ACL を設定する操作を実行します。
	putResult, err := client.PutBucketAcl(context.TODO(), putRequest)
	if err != nil {
		log.Fatalf("failed to put bucket acl %v", err)
	}

	// バケット ACL の設定結果を出力します。
	log.Printf("put bucket acl result: %#v\n", putResult)

	// バケット ACL を取得するリクエストを作成します。
	getRequest := &oss.GetBucketAclRequest{
		Bucket: oss.Ptr(bucketName), // バケット名。
	}

	// バケット ACL を取得する操作を実行します。
	getResult, err := client.GetBucketAcl(context.TODO(), getRequest)
	if err != nil {
		log.Fatalf("failed to get bucket acl %v", err)
	}

	// バケット ACL の取得結果を出力します。
	log.Printf("get bucket acl result:%#v\n", getResult)
}

参考資料

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

  • バケットの ACL を設定するための API 操作の詳細については、「PutBucketAcl」をご参照ください。

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

  • バケットの ACL を取得するための API 操作の詳細については、「GetBucketACL」をご参照ください。