ACL (access control list) bucket mengontrol akses tingkat bucket di OSS dengan menetapkan bucket sebagai publik atau privat. Objek yang diunggah tanpa ACL eksplisit akan mewarisi ACL bucket tersebut.
Cara kerja
ACL bucket menggunakan nilai yang telah ditentukan untuk mengontrol akses ke bucket.
Value | Description |
private (default) | Privat. Hanya pemilik bucket atau pengguna yang berwenang yang dapat membaca dan menulis objek di dalam bucket. |
public-read | Baca publik. Hanya pemilik bucket atau pengguna yang berwenang yang dapat menulis objek, tetapi siapa pun, termasuk pengguna anonim, dapat membacanya. |
public-read-write | Baca-tulis publik. Siapa pun, termasuk pengguna anonim, dapat membaca dan menulis objek di dalam bucket. |
public-read-write: Mengizinkan siapa pun di internet untuk membaca dan menulis objek dalam bucket. Ini merupakan pengaturan ACL dengan risiko tertinggi. Hindari kecuali benar-benar diperlukan.
public-read: Mengizinkan siapa pun di internet untuk membaca objek dalam bucket, yang berpotensi menyebabkan kebocoran data dan biaya tak terduga. Gunakan dengan hati-hati.
Mengatur ACL bucket
Saat membuat bucket, fitur Block Public Access diaktifkan secara default dan ACL diatur ke private. Untuk menggunakan public-read atau public-read-write, nonaktifkan terlebih dahulu Block Public Access.
Konsol
Buka daftar Buckets dan klik bucket target.
Pada panel navigasi kiri, pilih Permission Control > ACL.
Klik Settings dan ubah ACL bucket sesuai kebutuhan.
Klik Save.
CLI ossutil
Jalankan perintah put-bucket-acl di ossutil 2.0 untuk mengatur ACL bucket.
ossutil api put-bucket-acl --bucket example-bucket --acl privateSDK
Contoh berikut menunjukkan cara mengatur ACL bucket menggunakan SDK umum. Contoh SDK tambahan tersedia dalam referensi SDK.
// Kode contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan 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()) {
// Atur ACL bucket ke private.
// Nilai yang valid: "private", "public-read", dan "public-read-write".
PutBucketAclRequest putRequest = PutBucketAclRequest.newBuilder()
.bucket(bucketName)
.acl("private")
.build();
PutBucketAclResult putResult = client.putBucketAcl(putRequest);
System.out.println("ACL bucket berhasil diatur. RequestId: " + putResult.requestId());
// Dapatkan ACL bucket.
GetBucketAclRequest getRequest = GetBucketAclRequest.newBuilder()
.bucket(bucketName)
.build();
GetBucketAclResult getResult = client.getBucketAcl(getRequest);
System.out.println("ACL bucket saat ini: " + getResult.accessControlPolicy().accessControlList().grant());
} catch (Exception e) {
System.err.println("Operasi gagal: " + e.getMessage());
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Kode contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
# Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan 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)
# Atur ACL bucket ke private.
# Nilai yang valid: "private", "public-read", dan "public-read-write".
put_result = client.put_bucket_acl(oss.PutBucketAclRequest(
bucket=bucket_name,
acl="private"
))
print(f"ACL bucket berhasil diatur. RequestId: {put_result.request_id}")
# Dapatkan ACL bucket.
get_result = client.get_bucket_acl(oss.GetBucketAclRequest(
bucket=bucket_name
))
print(f"ACL bucket saat ini: {get_result.acl}")
if __name__ == "__main__":
main()
// Kode contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan 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)
// Atur ACL bucket ke private.
// Nilai yang valid: oss.BucketACLPrivate, oss.BucketACLPublicRead, dan oss.BucketACLPublicReadWrite.
putResult, err := client.PutBucketAcl(context.TODO(), &oss.PutBucketAclRequest{
Bucket: oss.Ptr(bucketName),
Acl: oss.BucketACLPrivate,
})
if err != nil {
log.Fatalf("Gagal mengatur ACL bucket: %v", err)
}
log.Printf("ACL bucket berhasil diatur. RequestId: %s", putResult.Headers.Get("X-Oss-Request-Id"))
// Dapatkan ACL bucket.
getResult, err := client.GetBucketAcl(context.TODO(), &oss.GetBucketAclRequest{
Bucket: oss.Ptr(bucketName),
})
if err != nil {
log.Fatalf("Gagal mendapatkan ACL bucket: %v", err)
}
log.Printf("ACL bucket saat ini: %s", *getResult.ACL)
}
<?php
// Kode contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan 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 {
// Atur ACL bucket ke private.
// Nilai yang valid: BucketACLType::PRIVATE, BucketACLType::PUBLIC_READ, dan BucketACLType::PUBLIC_READ_WRITE.
$putResult = $client->putBucketAcl(new Oss\Models\PutBucketAclRequest(
bucket: $bucketName,
acl: Oss\Models\BucketACLType::PRIVATE
));
printf("ACL bucket berhasil diatur. RequestId: %s\n", $putResult->requestId);
// Dapatkan ACL bucket.
$getResult = $client->getBucketAcl(new Oss\Models\GetBucketAclRequest(
bucket: $bucketName
));
printf("ACL bucket saat ini: %s\n", $getResult->accessControlList->grant);
} catch (Exception $e) {
printf("Operasi gagal: %s\n", $e->getMessage());
}
// Kode contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan 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
{
// Atur ACL bucket ke private.
// Nilai yang valid: "private", "public-read", dan "public-read-write".
var putResult = await client.PutBucketAclAsync(new OSS.Models.PutBucketAclRequest()
{
Bucket = bucketName,
Acl = "private"
});
Console.WriteLine($"ACL bucket berhasil diatur. RequestId: {putResult.RequestId}");
// Dapatkan ACL bucket.
var getResult = await client.GetBucketAclAsync(new OSS.Models.GetBucketAclRequest()
{
Bucket = bucketName
});
Console.WriteLine($"ACL bucket saat ini: {getResult.AccessControlPolicy?.AccessControlList?.Grant}");
}
catch (Exception ex)
{
Console.WriteLine($"Operasi gagal: {ex.Message}");
}
// Kode contoh ini menunjukkan cara mengatur daftar kontrol akses (ACL) untuk bucket.
// Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan 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 {
// Atur ACL bucket ke private.
// Nilai yang valid: 'private', 'public-read', dan 'public-read-write'.
await client.putBucketACL(bucketName, 'private');
console.log('ACL bucket berhasil diatur.');
// Dapatkan ACL bucket.
const result = await client.getBucketACL(bucketName);
console.log(`ACL bucket saat ini: ${result.acl}`);
} catch (err) {
console.error('Operasi gagal:', err.message);
}
}
main();
Memantau perubahan ACL bucket
Gunakan ActionTrail untuk melacak perubahan ACL bucket, termasuk identitas pelaku dan waktu perubahan. Fitur ini membantu dalam investigasi akses tidak biasa, kebocoran data, peringatan keamanan, atau audit rutin.
Buka Konsol ActionTrail. Pada panel navigasi kiri, pilih Event > Event Query.
Pilih wilayah bucket tersebut. Atur Service Name ke
Object Storage Service (OSS)dan Event Name kePutBucketAcl. ActionTrail akan secara otomatis mencari catatan yang sesuai.Nonaktifkan opsi Summary List. Pada kolom Actions dari catatan perubahan, klik View Details, lalu klik Configure Timeline untuk melihat nilai sebelum dan sesudah perubahan.
FAQ
Origin CDN: Apakah ACL publik diperlukan?
Tidak. Dengan ACL privat, Anda tetap dapat mengonfigurasi CDN untuk mengakses bucket tersebut. Atur akses ke bucket origin privat.
Dokumen terkait
Untuk integrasi kustom, panggil langsung API REST PutBucketAcl. Hal ini memerlukan perhitungan tanda tangan manual.
Untuk memberikan izin jangka panjang yang detail halus — seperti akses read-only atau write-only ke objek dengan awalan tertentu — gunakan kebijakan bucket atau kebijakan RAM.
Untuk memberikan izin sementara yang detail halus — seperti menampilkan daftar objek — gunakan kredensial sementara STS. Gunakan kredensial akses sementara yang disediakan oleh STS untuk mengakses OSS.