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

Object Storage Service:オブジェクト ACL の管理 (Java SDK V1)

最終更新日:Nov 26, 2025

Object Storage Service (OSS) は、バケットレベルのアクセス制御リスト (ACL) に加えて、オブジェクトレベルの ACL も提供します。オブジェクトをアップロードする際に ACL を設定したり、既存のオブジェクトの ACL をいつでも変更したりできます。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、リージョンとエンドポイントをご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、アクセス認証情報の設定をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、一般的なシナリオの設定例をご参照ください。

  • オブジェクトの ACL を設定するには、oss:PutObjectAcl 権限が必要です。オブジェクトの ACL をクエリするには、oss:GetObjectAcl 権限が必要です。詳細については、RAM ユーザーへのカスタムポリシーのアタッチをご参照ください。

ACL の種類

オブジェクトは、次の 4 種類のアクセス制御リスト (ACL) をサポートしています:

説明

オブジェクトの ACL は、そのオブジェクトが格納されているバケットの ACL よりも優先されます。たとえば、非公開バケット内のオブジェクトの ACL が公開読み取りに設定されている場合、匿名ユーザーを含むすべてのユーザーがそのオブジェクトを読み取ることができます。

ACL の種類

説明

バケットから継承 (デフォルト)

オブジェクトは、格納されているバケットの ACL を継承します。これはオブジェクトのデフォルトの ACL です。

CannedAccessControlList.Default

非公開

オブジェクト所有者のみがオブジェクトの読み書きを行えます。他のユーザーはオブジェクトにアクセスできません。

CannedAccessControlList.Private

公開読み取り

オブジェクト所有者のみがオブジェクトへの書き込みを行えます。匿名ユーザーを含むすべてのユーザーがオブジェクトを読み取ることができます。

警告

これにより、バケット内のデータへの不正アクセスや高額な料金が発生する可能性があります。オブジェクトの ACL を公開読み取りに設定する場合は、注意が必要です。

CannedAccessControlList.PublicRead

公開読み書き

匿名ユーザーを含むすべてのユーザーがオブジェクトの読み書きを行えます。

警告

オブジェクトの ACL をこの値に設定すると、すべてのユーザーがインターネット経由でオブジェクトにアクセスし、データを書き込むことができます。これにより、バケット内のデータへの不正アクセスや高額な料金が発生する可能性があります。ユーザーが禁止されているデータや情報をバケットにアップロードした場合、お客様の正当な利益や権利が侵害される可能性があります。したがって、必要でない限り、バケットの ACL を公開読み書きに設定しないことを推奨します。

CannedAccessControlList.PublicReadWrite

オブジェクト ACL の設定

次のコードは、オブジェクトの ACL を設定する方法の例を示しています:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.CannedAccessControlList;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:testfolder/exampleobject.txt。
        String objectName = "testfolder/exampleobject.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトの ACL を公開読み取りに設定します。
            ossClient.setObjectAcl(bucketName, objectName, CannedAccessControlList.PublicRead);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}            

オブジェクト ACL のクエリ

次のコードは、オブジェクトの ACL をクエリする方法の例を示しています:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.ObjectAcl;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:testfolder/exampleobject.txt。
        String objectName = "testfolder/exampleobject.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトの ACL をクエリします。
            ObjectAcl objectAcl = ossClient.getObjectAcl(bucketName, objectName);
            System.out.println(objectAcl.getPermission().toString());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}            

関連ドキュメント

  • オブジェクト ACL の完全なサンプルコードについては、GitHub の例をご参照ください。

  • オブジェクトの ACL を設定する API 操作の詳細については、PutObjectACLをご参照ください。

  • オブジェクトの ACL をクエリする API 操作の詳細については、GetObjectACLをご参照ください。