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

Object Storage Service:オブジェクトのアクセス権限の管理 (C++ SDK)

最終更新日:Nov 30, 2025

このトピックでは、オブジェクトのアクセス権限を管理する方法について説明します。

注意事項

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

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient を作成する場合は、「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 を設定する方法の例を示しています:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS アカウント情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンに yourRegion を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket */
    std::string BucketName = "examplebucket";
    /* オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt */
    std::string ObjectName = "exampledir/exampleobject.txt";


    /* ネットワークリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* オブジェクトのアクセス権限を設定します。 */
    SetObjectAclRequest request(BucketName, ObjectName);
    request.setAcl(CannedAccessControlList::Private);
    auto outcome = client.SetObjectAcl(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "SetObjectAcl fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。 */
    ShutdownSdk();
    return 0;
}

オブジェクトのアクセス権限の取得

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

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS アカウント情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンに yourRegion を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket */
    std::string BucketName = "examplebucket";
    /* オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* オブジェクトのアクセス権限を取得します。 */
    GetObjectAclRequest request(BucketName, ObjectName);
    auto outcome = client.GetObjectAcl(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "GetObjectAcl fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    else { 
        std::cout << " GetObjectAcl success, Acl:" << outcome.result().Acl() << std::endl;
    }

    /* ネットワークリソースを解放します。 */
    ShutdownSdk();
    return 0;
}

関連ドキュメント

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

  • オブジェクトのアクセス権限を取得する API 操作の詳細については、「GetObjectACL」をご参照ください。