このトピックでは、OSS SDK for Go V2を使用してバケットのアクセス制御リスト (ACL) を設定およびクエリする方法について説明します。
使用上の注意
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョンID
cn-hangzhou
を使用しています。 デフォルトでは、パブリックエンドポイントはバケット内のリソースにアクセスするために使用されます。 バケットが配置されているリージョン内の他のAlibaba Cloudサービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 Object Storage Service (OSS) でサポートされているリージョンとエンドポイントの詳細については、「OSSリージョンとエンドポイント」をご参照ください。このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
オブジェクトのACLを設定するには、
oss:PutObjectAcl
権限が必要です。 オブジェクトのACLを照会するには、oss:GetObjectAcl
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーの付与」をご参照ください。
ACLのタイプ
次の表に、オブジェクトのACLを示します。
ACL | 説明 | アクセス許可 |
バケットから継承 | オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じです。 | oss.ObjectACLDefault |
プライベート | 所有者と承認されたユーザーのみが、オブジェクトに対する読み取りおよび書き込み権限を付与されます。 他のユーザーには操作を実行する権限が付与されません。 | oss. ObjectACLDrivate |
一般公開 | 所有者と承認されたユーザーのみが、オブジェクトに対する読み取りおよび書き込み権限を付与されます。 他のユーザーには読み取り権限のみが付与されます。 ACLをこの値に設定するときは注意してください。 | ObjectACLPublicRead |
パブリック読み取り /書き込み | すべてのユーザーに、オブジェクトに対する読み取りおよび書き込み権限が付与されます。 ACLをこの値に設定するときは注意してください。 | oss.ObjectACLPublicReadWrite |
オブジェクトのACLは、オブジェクトが格納されているバケットのACLよりも優先されます。 たとえば、プライベートバケット内のオブジェクトのACLがpublic-readに設定されている場合、匿名ユーザーを含むすべてのユーザーがオブジェクトを読み取ることができます。 オブジェクトのACLが設定されていない場合、オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じになります。
サンプルコード
次のコードは、オブジェクトの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"
)
// Define global variables.
var (
region string // Region in which your bucket is located.
bucketName string // Name of the bucket.
objectName string // Name of the object.
)
// Specify the init function used to initialize command line parameters.
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
// Parse command line parameters.
flag.Parse()
// Check whether the region is specified.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// Check whether the name of the bucket is specified.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// Check whether the name of the object is specified.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// Load the default configurations and specify the credential provider and region.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Create an OSS client.
client := oss.NewClient(cfg)
// Create a request to configure the ACL of the object.
putRequest := &oss.PutObjectAclRequest{
Bucket: oss.Ptr(bucketName), // The name of the bucket.
Key: oss.Ptr(objectName), // The name of the object.
Acl: oss.ObjectACLPrivate, // Set the ACL of the object to private.
}
// Perform the operation to configure the ACL.
putResult, err := client.PutObjectAcl(context.TODO(), putRequest)
if err != nil {
log.Fatalf("failed to put object acl %v", err)
}
// Display the result.
log.Printf("put object acl result:%#v\n", putResult)
// Create a request to query the ACL.
getRequest := &oss.GetObjectAclRequest{
Bucket: oss.Ptr(bucketName), // The name of the bucket.
Key: oss.Ptr(objectName), // The name of the object.
}
// Perform the query operation.
getResult, err := client.GetObjectAcl(context.TODO(), getRequest)
if err != nil {
log.Fatalf("failed to get object acl %v", err)
}
// Display the query result.
log.Printf("get object acl result:%#v\n", getResult)
}
関連ドキュメント
オブジェクトのACLの設定に使用される完全なサンプルコードについては、GitHub sampleをご覧ください。
オブジェクトのACLを設定するために呼び出すAPI操作の詳細については、「PutObjectAcl」をご参照ください。
オブジェクトのACLのクエリに使用される完全なサンプルコードについては、GitHub sampleをご覧ください。
オブジェクトのACLを照会するために呼び出すAPI操作の詳細については、「GetObjectAcl」をご参照ください。