このトピックでは、ファイルのアクセス権限を管理する方法について説明します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。Object Storage Service (OSS) と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
オブジェクトのアクセス制御リスト (ACL) を設定するには、
oss:PutObjectAcl権限が必要です。オブジェクトの ACL をクエリするには、oss:GetObjectAcl権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
読み取り/書き込み権限のタイプ
オブジェクトには、4 種類のアクセス制御リスト (ACL) があります。
アクセス権限 | 説明 | ACL 値 |
バケットから継承 | オブジェクトはバケットの ACL を継承します。 | oss.ACLDefault |
非公開 | オブジェクト所有者と承認されたユーザーのみがオブジェクトに対する読み取り/書き込み権限を持ちます。他のユーザーはオブジェクトにアクセスできません。 | oss.ACLPrivate |
公開読み取り | オブジェクト所有者と承認されたユーザーはオブジェクトに対する読み取り/書き込み権限を持ち、他のユーザーは読み取り権限のみを持ちます。この権限は慎重に使用してください。 | oss.ACLPublicRead |
公開読み書き | すべてのユーザーがオブジェクトに対する読み取り/書き込み権限を持ちます。この権限は慎重に使用してください。 | oss.PublicReadWrite |
オブジェクトの ACL は、バケットの ACL よりも優先されます。たとえば、バケットの ACL が非公開であっても、バケット内のオブジェクトの ACL が公開読み書きである場合、すべてのユーザーがそのオブジェクトに対する読み取り/書き込み権限を持ちます。オブジェクトに ACL が設定されていない場合、オブジェクトはバケットの ACL を継承します。
サンプルコード
次のコードは、オブジェクトのアクセス権限を設定および取得する方法の完全な例です。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンの場合は、必要に応じてエンドポイントを設定します。
// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、値を cn-hangzhou に設定します。他のリージョンの場合は、必要に応じて値を設定します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// yourBucketName をバケットの名前に設定します。
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
}
// オブジェクトの ACL を設定します。
// yourObjectName をオブジェクトの完全なパスに設定します。バケット名は含めないでください。
objectName := "yourObjectName"
err = bucket.SetObjectACL(objectName, oss.ACLPublicReadWrite)
if err != nil {
log.Fatalf("Failed to set object ACL for '%s': %v", objectName, err)
}
// オブジェクトの ACL を取得します。
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」をご参照ください。