このトピックでは、オブジェクトのアクセス制御リスト (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を設定およびクエリする方法の例を示しています。
パッケージメイン
import (import (import)
"fmt"
"os"
「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 {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。
bucket, err := client.Bucket("yourBucketName")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// オブジェクトのACLを設定します。
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
err = bucket.SetObjectACL("yourObjectName", oss.ACLPublicReadWrite)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// オブジェクトのACLを照会します。
aclRes, err := bucket.GetObjectACL("yourObjectName")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Object ACL:", aclRes.ACL)
}
参考資料
オブジェクトACL管理に使用される完全なサンプルコードについては、『GitHub』をご参照ください。
オブジェクトのACLを設定するために呼び出すAPI操作の詳細については、「PutObjectACL」をご参照ください。
オブジェクトのACLを照会するために呼び出すAPI操作の詳細については、「GetObjectACL」をご参照ください。