バケットは、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(®ion, "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」をご参照ください。