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

Object Storage Service:バケット ACL

最終更新日:Jul 24, 2026

バケットのアクセス制御リスト (ACL) は、バケットを公開または非公開に設定することで、Object Storage Service (OSS) におけるバケットレベルのアクセスを制御します。ACL を指定せずにアップロードされたオブジェクトは、バケットの ACL を継承します。

仕組み

バケット ACL は、定義済みの値を使用してバケットへのアクセスを制御します。

説明

非公開 (デフォルト)

非公開。バケット所有者または権限を付与されたユーザーのみが、バケット内のオブジェクトを読み書きできます。

公開読み取り

公開読み取り。バケット所有者または権限を付与されたユーザーのみがオブジェクトを書き込むことができますが、匿名ユーザーを含むすべてのユーザーがオブジェクトを読み取ることができます。

公開読み書き

公開読み書き。匿名ユーザーを含むすべてのユーザーが、バケット内のオブジェクトを読み書きできます。

重要
  • public-read-write :インターネット上のすべてのユーザーがバケット内のオブジェクトを読み書きできるようになります。これは最もリスクの高い ACL 設定です。特に必要な場合を除き、使用は避けてください。

  • public-read :インターネット上のすべてのユーザーがバケット内のオブジェクトを読み取れるようになり、データ漏洩や予期しない料金が発生する可能性があります。注意して使用してください。

バケット ACL の設定

バケットを作成すると、デフォルトで 公開アクセス禁止 が有効になり、ACL は非公開に設定されます。公開読み取りまたは公開読み書きを使用するには、まず公開アクセス禁止を無効にする必要があります。

コンソール

  1. [バケット] リストで、対象のバケットをクリックします。

  2. 左側メニューで、権限管理 > ACL を選択します。

  3. 設定 をクリックし、必要に応じてバケット ACL を変更します。

  4. 設定 をクリックします。

ossutil CLI

ossutil 2.0put-bucket-acl コマンドを実行してバケット ACL を設定します。

ossutil api put-bucket-acl --bucket example-bucket --acl private

SDK

次のサンプルは、一般的な SDK でバケット ACL を設定する方法を示しています。その他の SDK サンプルについては、SDK リファレンスをご参照ください。

// このサンプルコードは、バケットのアクセス制御リスト (ACL) を設定する方法を示しています。
// サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定します。

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;

public class SetBucketAcl {

    public static void main(String[] args) {
        String bucketName = "example-bucket";

        String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
        CredentialsProvider provider = new StaticCredentialsProvider(accessKeyId, accessKeySecret);

        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region("<region-id>")
                .build()) {

            // バケット ACL を非公開に設定します。
            // 有効な値: "private"、"public-read"、"public-read-write"。
            PutBucketAclRequest putRequest = PutBucketAclRequest.newBuilder()
                    .bucket(bucketName)
                    .acl("private")
                    .build();
            PutBucketAclResult putResult = client.putBucketAcl(putRequest);
            System.out.println("Bucket ACL set successfully. RequestId: " + putResult.requestId());

            // バケット ACL を取得します。
            GetBucketAclRequest getRequest = GetBucketAclRequest.newBuilder()
                    .bucket(bucketName)
                    .build();
            GetBucketAclResult getResult = client.getBucketAcl(getRequest);
            System.out.println("Current bucket ACL: " + getResult.accessControlPolicy().accessControlList().grant());

        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# このサンプルコードは、バケットのアクセス制御リスト (ACL) を設定する方法を示しています。
# サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定します。

import alibabacloud_oss_v2 as oss


def main() -> None:
    bucket_name = "example-bucket"

    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = "<region-id>"

    client = oss.Client(cfg)

    # バケット ACL を非公開に設定します。
    # 有効な値: "private"、"public-read"、"public-read-write"。
    put_result = client.put_bucket_acl(oss.PutBucketAclRequest(
        bucket=bucket_name,
        acl="private"
    ))
    print(f"Bucket ACL set successfully. RequestId: {put_result.request_id}")

    # バケット ACL を取得します。
    get_result = client.get_bucket_acl(oss.GetBucketAclRequest(
        bucket=bucket_name
    ))
    print(f"Current bucket ACL: {get_result.acl}")


if __name__ == "__main__":
    main()
// このサンプルコードは、バケットのアクセス制御リスト (ACL) を設定する方法を示しています。
// サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定します。

package main

import (
	"context"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	bucketName := "example-bucket"

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>")

	client := oss.NewClient(cfg)

	// バケット ACL を非公開に設定します。
	// 有効な値: oss.BucketACLPrivate、oss.BucketACLPublicRead、oss.BucketACLPublicReadWrite。
	putResult, err := client.PutBucketAcl(context.TODO(), &oss.PutBucketAclRequest{
		Bucket: oss.Ptr(bucketName),
		Acl:    oss.BucketACLPrivate,
	})
	if err != nil {
		log.Fatalf("Failed to set bucket ACL: %v", err)
	}
	log.Printf("Bucket ACL set successfully. RequestId: %s", putResult.Headers.Get("X-Oss-Request-Id"))

	// バケット ACL を取得します。
	getResult, err := client.GetBucketAcl(context.TODO(), &oss.GetBucketAclRequest{
		Bucket: oss.Ptr(bucketName),
	})
	if err != nil {
		log.Fatalf("Failed to get bucket ACL: %v", err)
	}
	log.Printf("Current bucket ACL: %s", *getResult.ACL)
}
<?php
// このサンプルコードは、バケットのアクセス制御リスト (ACL) を設定する方法を示しています。
// サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定します。

require_once __DIR__ . '/vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

$bucketName = 'example-bucket';

$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion('<region-id>');

$client = new Oss\Client($cfg);

try {
    // バケット ACL を非公開に設定します。
    // 有効な値: BucketACLType::PRIVATE、BucketACLType::PUBLIC_READ、BucketACLType::PUBLIC_READ_WRITE。
    $putResult = $client->putBucketAcl(new Oss\Models\PutBucketAclRequest(
        bucket: $bucketName,
        acl: Oss\Models\BucketACLType::PRIVATE
    ));
    printf("Bucket ACL set successfully. RequestId: %s\n", $putResult->requestId);

    // バケット ACL を取得します。
    $getResult = $client->getBucketAcl(new Oss\Models\GetBucketAclRequest(
        bucket: $bucketName
    ));
    printf("Current bucket ACL: %s\n", $getResult->accessControlList->grant);
} catch (Exception $e) {
    printf("Operation failed: %s\n", $e->getMessage());
}
// このサンプルコードは、バケットのアクセス制御リスト (ACL) を設定する方法を示しています。
// サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定します。

using OSS = AlibabaCloud.OSS.V2;

var bucketName = "example-bucket";
var region = "<region-id>";

var cfg = OSS.Configuration.LoadDefault();
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
cfg.Region = region;

using var client = new OSS.Client(cfg);

try
{
    // バケット ACL を非公開に設定します。
    // 有効な値: "private"、"public-read"、"public-read-write"。
    var putResult = await client.PutBucketAclAsync(new OSS.Models.PutBucketAclRequest()
    {
        Bucket = bucketName,
        Acl = "private"
    });
    Console.WriteLine($"Bucket ACL set successfully. RequestId: {putResult.RequestId}");

    // バケット ACL を取得します。
    var getResult = await client.GetBucketAclAsync(new OSS.Models.GetBucketAclRequest()
    {
        Bucket = bucketName
    });
    Console.WriteLine($"Current bucket ACL: {getResult.AccessControlPolicy?.AccessControlList?.Grant}");
}
catch (Exception ex)
{
    Console.WriteLine($"Operation failed: {ex.Message}");
}
// このサンプルコードは、バケットのアクセス制御リスト (ACL) を設定する方法を示しています。
// サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定します。

const OSS = require('ali-oss');

async function main() {
    const bucketName = 'example-bucket';

    const client = new OSS({
        region: 'oss-<region-id>',
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        authorizationV4: true,
    });

    try {
        // バケット ACL を非公開に設定します。
        // 有効な値: 'private'、'public-read'、'public-read-write'。
        await client.putBucketACL(bucketName, 'private');
        console.log('Bucket ACL set successfully.');

        // バケット ACL を取得します。
        const result = await client.getBucketACL(bucketName);
        console.log(`Current bucket ACL: ${result.acl}`);
    } catch (err) {
        console.error('Operation failed:', err.message);
    }
}

main();

バケット ACL の変更の追跡

ActionTrail を使用して、バケット ACL の変更 (誰がいつ変更したかなど) を追跡します。これは、異常なアクセス、データ漏洩、セキュリティアラート、または定期的な監査の調査に役立ちます。

  1. ActionTrail コンソールに移動します。左側メニューで、[イベント] > [イベントクエリ] を選択します。

  2. バケットのリージョンを選択し、[サービス名]Object Storage Service (OSS) に、[イベント名]PutBucketAcl に設定すると、ActionTrail が一致するレコードを自動的にクエリします。

  3. [サマリーリスト] オプションを無効にします。変更レコードの「操作」列で、詳細を表示 をクリックし、次に タイムラインの設定 をクリックすると、変更前後の値が表示されます。

よくある質問

CDN オリジンに公開 ACL は必須ですか?

いいえ。非公開 ACL でも、CDN がバケットにアクセスするように設定できます。詳細については、「プライベートオリジンバケットへのアクセスの設定」をご参照ください。

関連ドキュメント