すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ファイルアクセス権限の管理 (Go SDK V1)

最終更新日:Nov 30, 2025

このトピックでは、ファイルのアクセス権限を管理する方法について説明します。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。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」をご参照ください。