このトピックでは、オブジェクトのアクセス制御リスト (ACL) を管理する方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトのACLを設定するには、
oss:PutObjectAcl
権限が必要です。 オブジェクトACLをクエリするには、oss:GetObjectAcl
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
オブジェクトACL
次の表に、オブジェクトに対して構成できるACLを示します。
ACL | 説明 | 値 |
バケットから継承 | オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じです。 | oss.ACLDefault |
プライベート | オブジェクト所有者と承認されたユーザーのみが、オブジェクトに対する読み取りおよび書き込み権限を付与されます。 | oss.ACLPrivate |
一般公開 | オブジェクト所有者と承認されたユーザーのみが、オブジェクトに対する読み取りおよび書き込み権限を付与されます。 他のユーザーには、オブジェクトの読み取り権限のみが付与されます。 ACLをこの値に設定するときは注意してください。 | oss.ACLPublicRead |
パブリック読み取り /書き込み | すべてのユーザーに、オブジェクトに対する読み取りおよび書き込み権限が付与されます。 ACLをこの値に設定するときは注意してください。 | oss.PublicReadWrite |
オブジェクトのACLは、オブジェクトが格納されているバケットのACLよりも優先されます。 たとえば、バケットのACLがプライベートで、バケットに格納されているオブジェクトのACLがパブリック読み取り /書き込みの場合、すべてのユーザーにそのオブジェクトに対する読み取りおよび書き込み権限が付与されます。 オブジェクトのACLが設定されていない場合、オブジェクトのACLは、オブジェクトが格納されているバケットのACLと同じになります。
サンプルコード
次のコードは、オブジェクトのACLを設定およびクエリする方法の例を示しています。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
endpoint := "yourEndpoint"
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// Specify the name of the bucket.
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
}
// Configure the ACL of the object.
// Specify the full path of the object. Do not include the bucket name in the full path.
objectName := "yourObjectName"
err = bucket.SetObjectACL(objectName, oss.ACLPublicReadWrite)
if err != nil {
log.Fatalf("Failed to set object ACL for '%s': %v", objectName, err)
}
// Query the ACL of the object.
aclRes, err := bucket.GetObjectACL(objectName)
if err != nil {
log.Fatalf("Failed to get object ACL for '%s': %v", objectName, err)
}
log.Printf("Object ACL for '%s': %s", objectName, aclRes.ACL)
}
関連ドキュメント
オブジェクトACL管理に使用される完全なサンプルコードについては、『GitHub』をご参照ください。
オブジェクトのACLを設定するために呼び出すことができるAPI操作の詳細については、「SetObjectACL」をご参照ください。
オブジェクトのACLを照会するために呼び出すAPI操作の詳細については、「GetObjectACL」をご参照ください。