Bucket adalah wadah utama di OSS untuk menyimpan objek. Bucket memiliki kapasitas tak terbatas dan bersifat elastis.
Konfigurasi dasar
Pengaturan inti bucket tidak dapat diubah setelah dibuat.
Nama bucket: Harus unik secara global. Disarankan menggunakan nama yang mencerminkan departemen atau bisnis Anda untuk mempermudah identifikasi dan pengelolaan. Contohnya:
hr-documents.Region: Menentukan lokasi fisik data Anda. Disarankan memilih region berdasarkan prioritas berikut:
Kepatuhan: Pilih region yang memenuhi persyaratan regulasi Anda.
Kinerja: Untuk mengurangi latensi jaringan, pilih region yang paling dekat dengan pengguna akhir Anda. Jika data Anda diakses oleh produk Alibaba Cloud seperti ECS, disarankan memilih region yang sama agar dapat menggunakan jaringan internal gratis dan mengurangi latensi lintas-region.
Dukungan fitur: Lihat Catatan rilis untuk memastikan region tersebut mendukung fitur yang Anda butuhkan.
Biaya: Setelah memenuhi persyaratan di atas, pilih region dengan biaya lebih rendah.
CatatanAnda tidak dapat membuat bucket baru di region China (Zhangjiakou). Bucket yang sudah ada di region ini tetap berfungsi sepenuhnya. Jika Anda memiliki paket sumber daya untuk region ini, paket tersebut masih dapat digunakan untuk mengimbangi biaya bucket yang sudah ada.
Jika Anda membuat bucket hanya dengan menentukan nama bucket dan region, OSS secara otomatis menerapkan pengaturan default berikut: kelas penyimpanan Standard, Zone-Redundant Storage (ZRS), daftar kontrol akses privat, dan Blokir Akses Publik diaktifkan.
Konsol
Pada halaman Buckets di Konsol OSS, klik Create Bucket.
Pada panel Create Bucket, atur Bucket Name dan Region, lalu klik Create di bagian bawah.
ossutil
Anda dapat menggunakan ossutil, sebuah alat baris perintah, untuk membuat bucket. Untuk instruksi instalasi, lihat Instal ossutil.
Konfigurasikan region untuk bucket.
ossutil configTekan Enter untuk melewati pengaturan sebelumnya hingga prompt region muncul:
Please enter Region [cn-hangzhou]:Masukkan ID region tujuan (misalnya,
cn-beijing) dan tekan Enter, atau tekan Enter langsung untuk menggunakan region defaultcn-hangzhou. Untuk daftar ID region, lihat Daftar Region OSS.Buat bucket bernama
examplebucket.ossutil mb oss://examplebucketVerifikasi bahwa bucket berhasil dibuat.
ossutil ls
Untuk informasi lebih lanjut tentang perintah ini, lihat mb (buat bucket).
SDK
Contoh kode berikut menunjukkan cara membuat bucket menggunakan SDK umum. Untuk contoh yang menggunakan SDK lainnya, lihat Pengenalan SDK.
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws Exception {
// Tetapkan yourEndpoint ke Endpoint region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket.
String bucketName = "examplebucket";
// Tentukan ID kelompok sumber daya. Jika tidak menentukan ID kelompok sumber daya, bucket akan ditambahkan ke kelompok sumber daya default.
//String rsId = "rg-aek27tc****";
// Tentukan region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Region ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSSClient.
// Setelah instance OSSClient tidak digunakan lagi, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat bucket dan aktifkan fitur namespace hierarkis.
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName).withHnsStatus(HnsStatus.Enabled);
// Jika ingin menentukan kelas penyimpanan, ACL, dan tipe redundansi data saat membuat bucket, lihat kode berikut.
// Kode berikut memberikan contoh cara mengatur kelas penyimpanan ke Standard.
createBucketRequest.setStorageClass(StorageClass.Standard);
// Tipe redundansi data default adalah LRS, yang ditentukan sebagai DataRedundancyType.LRS. Jika ingin mengatur tipe redundansi data ke ZRS, atur nilainya ke DataRedundancyType.ZRS.
createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS);
// Atur ACL bucket ke public-read. ACL default adalah private.
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
// Saat membuat bucket di region yang mendukung kelompok sumber daya, Anda dapat menetapkan bucket ke kelompok sumber daya.
//createBucketRequest.setResourceGroupId(rsId);
// Buat bucket.
ossClient.createBucket(createBucketRequest);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan error karena suatu alasan.");
System.out.println("Pesan Error:" + oe.getErrorMessage());
System.out.println("Kode Error:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}import argparse
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="contoh put bucket")
# Tentukan parameter baris perintah wajib --region, yang menentukan region tempat bucket berada.
parser.add_argument('--region', help='Region tempat bucket berada.', required=True)
# Tentukan parameter baris perintah wajib --bucket, yang menentukan nama bucket.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tentukan parameter baris perintah opsional --endpoint, yang menentukan endpoint yang dapat digunakan layanan lain untuk mengakses OSS.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
def main():
args = parser.parse_args() # Uraikan parameter baris perintah.
# Muat kredensial akses dari variabel lingkungan untuk autentikasi.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Muat konfigurasi default SDK dan tentukan penyedia kredensial.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Tentukan region tempat bucket berada.
cfg.region = args.region
# Jika parameter endpoint disediakan, tentukan endpoint yang dapat digunakan layanan lain untuk mengakses OSS.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Gunakan konfigurasi untuk membuat instance OSSClient.
client = oss.Client(cfg)
# Jalankan permintaan untuk membuat bucket dan atur kelas penyimpanannya ke Standard.
result = client.put_bucket(oss.PutBucketRequest(
bucket=args.bucket,
create_bucket_configuration=oss.CreateBucketConfiguration(
storage_class='Standard'
)
))
# Keluarkan kode status HTTP dalam tanggapan dan ID permintaan yang digunakan untuk memeriksa apakah permintaan berhasil.
print(f'kode status: {result.status_code},'
f' ID permintaan: {result.request_id},'
)
if __name__ == "__main__":
main() # Titik masuk skrip. Fungsi main dipanggil saat file dijalankan secara langsung.package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Tentukan variabel global.
var (
region string // Region.
bucketName string // Nama bucket.
)
// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Region tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Uraikan parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah region kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, region diperlukan")
}
// Muat konfigurasi default dan tentukan penyedia kredensial dan region.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
request := &oss.PutBucketRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
}
// Kirim permintaan untuk membuat bucket.
result, err := client.PutBucket(context.TODO(), request)
if err != nil {
log.Fatalf("gagal membuat bucket %v", err)
}
// Tampilkan hasil pembuatan bucket.
log.Printf("hasil membuat bucket:%#v\n", result)
}
<?php
// Muat otomatis objek dan pustaka dependensi.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Region tempat bucket berada.', 'required' => True], // Parameter region wajib. Contoh: oss-cn-hangzhou.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // Parameter endpoint opsional.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket wajib.
];
// Hasilkan daftar opsi panjang untuk mengurai parameter baris perintah.
$longopts = \array_map(function ($key) {
return "$key:"; // Titik dua (:) setelah setiap parameter menunjukkan bahwa parameter tersebut wajib.
}, array_keys($optsdesc));
// Uraikan parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter wajib telah dikonfigurasi.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: argumen berikut wajib: --$key, $help"; // Menentukan bahwa parameter wajib belum dikonfigurasi.
exit(1);
}
}
// Ambil nilai parameter baris perintah.
$region = $options["region"]; // Region tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
// Muat informasi kredensial (AccessKeyId dan AccessKeySecret) dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan region.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Tentukan endpoint jika disediakan.
}
// Buat instance OSSClient.
$client = new Oss\Client($cfg);
// Buat permintaan untuk memulai pembuatan bucket.
$request = new Oss\Models\PutBucketRequest($bucket);
// Panggil metode putBucket.
$result = $client->putBucket($request);
// Keluarkan hasilnya.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP.
'ID permintaan:' . $result->requestId // ID unik permintaan.
);
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tetapkan yourEndpoint ke Endpoint region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket.
var bucketName = "examplebucket";
// Tentukan region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur region ke cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instance ClientConfiguration dan ubah parameter default sesuai kebutuhan.
var conf = new ClientConfiguration();
// Gunakan Signature V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
// Buat bucket.
try
{
var request = new CreateBucketRequest(bucketName);
// Atur daftar kontrol akses (ACL) ke public-read. ACL default adalah private.
request.ACL = CannedAccessControlList.PublicRead;
// Atur tipe pemulihan bencana data ke penyimpanan redundan zona.
request.DataRedundancyType = DataRedundancyType.ZRS;
client.CreateBucket(request);
Console.WriteLine("Berhasil membuat bucket");
}
catch (Exception ex)
{
Console.WriteLine("Gagal membuat bucket. {0}", ex.Message);
}const OSS = require('ali-oss');
const client = new OSS({
// Tentukan region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur region ke oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket.
bucket: 'yourBucketName',
});
// Buat bucket.
async function putBucket() {
try {
const options = {
storageClass: 'Standard', // Secara default, kelas penyimpanan bucket adalah Standard. Untuk mengatur kelas penyimpanan bucket ke Archive, atur storageClass ke Archive.
acl: 'private', // Secara default, daftar kontrol akses (ACL) bucket adalah private. Untuk mengatur ACL bucket ke baca publik, atur acl ke public-read.
dataRedundancyType: 'LRS' // Secara default, tipe redundansi bucket adalah penyimpanan redundan lokal (LRS). Untuk mengatur tipe redundansi bucket ke penyimpanan redundan zona (ZRS), atur dataRedundancyType ke ZRS.
}
// Tentukan nama bucket.
const result = await client.putBucket('examplebucket', options);
console.log(result);
} catch (err) {
console.log(err);
}
}
putBucket(); require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
// Contoh berikut menggunakan endpoint region China (Hangzhou). Ganti endpoint dengan yang sebenarnya.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
// Tentukan nama bucket. Contoh: examplebucket.
client.create_bucket('examplebucket')// Buat permintaan untuk membuat bucket.
// Tentukan nama bucket.
CreateBucketRequest createBucketRequest = new CreateBucketRequest("examplebucket");
// Tentukan daftar kontrol akses (ACL) bucket.
// createBucketRequest.setBucketACL(CannedAccessControlList.Private);
// Tentukan kelas penyimpanan bucket.
// createBucketRequest.setBucketStorageClass(StorageClass.Standard);
// Buat bucket secara asinkron.
OSSAsyncTask createTask = oss.asyncCreateBucket(createBucketRequest, new OSSCompletedCallback<CreateBucketRequest, CreateBucketResult>() {
@Override
public void onSuccess(CreateBucketRequest request, CreateBucketResult result) {
Log.d("asyncCreateBucket", "Berhasil");
}
@Override
public void onFailure(CreateBucketRequest request, ClientException clientException, ServiceException serviceException) {
// Pengecualian permintaan.
if (clientException != null) {
// Pengecualian sisi klien, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Pengecualian sisi server.
Log.e("KodeError", serviceException.getErrorCode());
Log.e("IDPermintaan", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("PesanAsli", serviceException.getRawMessage());
}
}
});#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke Endpoint region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Region ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Tentukan nama, kelas penyimpanan, dan ACL untuk bucket baru. */
CreateBucketRequest request(BucketName, StorageClass::IA, CannedAccessControlList::PublicReadWrite);
/* Atur tipe redundansi data ke penyimpanan redundan zona. */
request.setDataRedundancyType(DataRedundancyType::ZRS);
/* Buat bucket. */
auto outcome = client.CreateBucket(request);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "Gagal membuat bucket" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",IDPermintaan:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}// Buat permintaan untuk membuat bucket.
OSSCreateBucketRequest * create = [OSSCreateBucketRequest new];
// Atur nama bucket ke examplebucket.
create.bucketName = @"examplebucket";
// Atur daftar kontrol akses (ACL) bucket ke private.
create.xOssACL = @"private";
// Atur kelas penyimpanan bucket ke Infrequent Access (IA).
create.storageClass = OSSBucketStorageClassIA;
OSSTask * createTask = [client createBucket:create];
[createTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"berhasil membuat bucket!");
} else {
NSLog(@"gagal membuat bucket, error: %@", task.error);
}
return nil;
}];
// Blokir thread saat ini untuk menunggu tugas selesai.
// [createTask waitUntilFinished]; #include "oss_api.h"
#include "aos_http_io.h"
/* Tetapkan yourEndpoint ke Endpoint region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tetapkan yourRegion ke region tempat bucket berada. Misalnya, jika bucket berada di region China (Hangzhou), atur region ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Inisialisasi tipe aos_string_t dengan string char*. */
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// Konfigurasikan dua parameter berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Menentukan apakah akan menggunakan CNAME untuk mengakses OSS. Nilai 0 berarti CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Atur parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Di titik masuk program, panggil metode aos_http_io_initialize untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Kolam memori untuk manajemen memori setara dengan apr_pool_t. Kode implementasi ada di pustaka apr. */
aos_pool_t *pool;
/* Buat kolam memori baru. Parameter kedua adalah NULL, yang berarti kolam baru tidak mewarisi dari kolam memori lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan memori untuk opsi di kolam memori. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi klien oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
oss_acl_e oss_acl = OSS_ACL_PRIVATE;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
/* Tetapkan data char* ke aos_string_t bucket. */
aos_str_set(&bucket, bucket_name);
/* Buat bucket. */
resp_status = oss_create_bucket(oss_client_options, &bucket, oss_acl, &resp_headers);
/* Periksa apakah permintaan berhasil. */
if (aos_status_is_ok(resp_status)) {
printf("berhasil membuat bucket\n");
} else {
printf("gagal membuat bucket\n");
}
/* Lepaskan kolam memori. Ini melepaskan memori yang dialokasikan untuk berbagai sumber daya selama permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
aos_http_io_deinitialize();
return 0;
}API
Saat memanggil operasi PutBucket, tentukan nama bucket dan region di header permintaan Host.
Kelas penyimpanan
OSS menyediakan lima kelas penyimpanan: Standard, Infrequent Access (IA), Archive, Cold Archive, dan Deep Cold Archive. Default-nya adalah Standard. Kelas-kelas ini menawarkan biaya penyimpanan yang semakin rendah tetapi memiliki batasan akses yang meningkat, sehingga cocok untuk data dengan frekuensi akses berbeda.
Secara default, objek mewarisi kelas penyimpanan bucket-nya. Meskipun Anda tidak dapat mengubah kelas penyimpanan bucket setelah dibuat, Anda dapat menggunakan aturan siklus hidup untuk secara otomatis mengubah kelas penyimpanan objek guna mengoptimalkan biaya.
Standard
Ideal untuk data aktif yang diakses lebih dari sekali per bulan. Menyediakan akses real-time. Ini adalah pilihan yang direkomendasikan jika Anda tidak yakin tentang pola akses data, karena Anda dapat menggunakan aturan siklus hidup nanti untuk secara otomatis memindahkan objek ke kelas penyimpanan berbiaya lebih rendah.
Infrequent Access (IA):
Cocok untuk data hangat yang diakses sekali per bulan atau kurang, seperti cadangan dan log. Menyediakan akses real-time tetapi memiliki durasi penyimpanan minimum 30 hari. Jika Anda menghapus objek sebelum durasi minimum 30 hari, Anda akan dikenai biaya untuk durasi minimum penuh. Kelas penyimpanan ini tidak cocok untuk data sementara atau uji coba.
Archive:
Dirancang untuk data dingin yang diakses kurang dari sekali setiap 90 hari. Mendukung akses real-time melalui pembacaan arsip langsung, atau Anda dapat memulihkan objek sebelum membacanya (pemulihan membutuhkan waktu sekitar 1 menit). Memiliki durasi penyimpanan minimum 60 hari.
Pemulihan: Proses membuat data arsip sementara dapat dibaca. Ini melibatkan periode tunggu.
Cold Archive
Ditujukan untuk data yang diakses kurang dari sekali per tahun. Data harus dipulihkan sebelum Anda dapat membacanya, yang membutuhkan waktu 1 hingga 12 jam. Menawarkan biaya lebih rendah dan memiliki durasi penyimpanan minimum 180 hari.
Deep Cold Archive
Ini adalah opsi berbiaya terendah, cocok untuk data yang diakses kurang dari sekali per tahun. Pemulihan membutuhkan waktu 12 atau 48 jam, dan memiliki durasi penyimpanan minimum 180 hari. Kami tidak menyarankan mengatur ini sebagai kelas penyimpanan default untuk bucket baru. Sebagai gantinya, gunakan aturan siklus hidup untuk secara otomatis memindahkan data ke kelas ini.
Konsol
Saat membuat bucket, konfigurasikan kelas penyimpanan bucket sesuai kebutuhan Anda.
ossutil
Perintah berikut membuat bucket bernama examplebucket dengan kelas penyimpanan Infrequent Access (IA).
ossutil mb oss://examplebucket --storage-class IAUntuk informasi lebih lanjut tentang perintah ini, lihat mb (buat bucket).
SDK OSS
Contoh kode berikut menunjukkan cara membuat bucket menggunakan SDK umum. Untuk contoh yang menggunakan SDK lainnya, lihat Pengenalan SDK.
Java
Untuk mengatur kelas penyimpanan, konfigurasikan objek CreateBucketRequest sebagai berikut.
// Siapkan objek permintaan yang berisi kelas penyimpanan.
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setStorageClass(StorageClass.IA); // Tentukan kelas penyimpanan di sini.
// Opsi: StorageClass.Standard, StorageClass.IA, StorageClass.Archive, dll.Untuk contoh lengkap, lihat Buat bucket (Java SDK V1).
Python
Saat memanggil metode client.put_bucket, tentukan kelas penyimpanan menggunakan parameter create_bucket_configuration.
# Siapkan objek permintaan yang berisi kelas penyimpanan.
req = oss.PutBucketRequest(
bucket="your-bucket-name",
create_bucket_configuration=oss.CreateBucketConfiguration(
storage_class='IA' # Tentukan kelas penyimpanan di sini.
)
)
# Opsi: 'Standard', 'IA', 'Archive', 'ColdArchive', 'DeepColdArchive'Untuk contoh lengkap, lihat Buat bucket (Python SDK V2).
Go
Untuk mengatur kelas penyimpanan, konfigurasikan field CreateBucketConfiguration saat membuat PutBucketRequest.
request := &oss.PutBucketRequest{
Bucket: oss.Ptr("your-bucket-name"),
CreateBucketConfiguration: &oss.CreateBucketConfiguration{
StorageClass: oss.StorageClassIA, // Tentukan kelas penyimpanan di sini.
},
}
// Opsi: oss.StorageClassStandard, oss.StorageClassIA, oss.StorageClassArchive, dll.Untuk contoh lengkap, lihat Buat bucket (Go SDK V2).
PHP
Untuk mengatur kelas penyimpanan, berikan objek CreateBucketConfiguration ke konstruktor saat membuat objek PutBucketRequest.
// Siapkan objek permintaan yang berisi konfigurasi seperti kelas penyimpanan.
$request = new Oss\Models\PutBucketRequest(
"your-bucket-name",
null, // acl
null, // resourceGroupId
new Oss\Models\CreateBucketConfiguration(
'IA' // Tentukan kelas penyimpanan di sini.
)
);
/*
* Kelas penyimpanan opsional: 'Standard', 'IA', 'Archive', 'ColdArchive', 'DeepColdArchive'
*/Untuk contoh lengkap, lihat Buat bucket (PHP SDK V2).
C#
Untuk mengatur kelas penyimpanan, buat objek CreateBucketRequest dan konfigurasikan propertinya sebagai berikut.
// Siapkan objek permintaan yang berisi konfigurasi kelas penyimpanan.
var request = new CreateBucketRequest("your-bucket-name");
request.StorageClass = StorageClass.IA; // Tentukan kelas penyimpanan di sini.
// Kelas penyimpanan opsional: StorageClass.Standard, StorageClass.IA, StorageClass.Archive, dll.Untuk contoh lengkap, lihat Buat bucket (C# SDK V1).
Node.js
Untuk mengatur kelas penyimpanan, buat objek options dan berikan ke metode putBucket.
// Siapkan objek options yang berisi konfigurasi kelas penyimpanan.
const options = {
storageClass: 'IA', // Tentukan kelas penyimpanan di sini.
};
// Kelas penyimpanan opsional: 'Standard', 'IA', 'Archive', 'ColdArchive', 'DeepColdArchive'Untuk contoh lengkap, lihat Buat bucket (Node.js SDK).
Android
Untuk mengatur kelas penyimpanan atau daftar kontrol akses, buat objek CreateBucketRequest dan konfigurasikan sebagai berikut.
// Siapkan objek permintaan yang berisi konfigurasi seperti kelas penyimpanan.
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setBucketStorageClass(StorageClass.IA); // Tentukan kelas penyimpanan di sini.
// Kelas penyimpanan opsional: StorageClass.Standard, StorageClass.IA, StorageClass.Archive, dll.Untuk contoh lengkap, lihat Buat bucket (Android SDK).
iOS
Untuk mengatur kelas penyimpanan, buat objek OSSCreateBucketRequest dan konfigurasikan propertinya sebagai berikut.
// Siapkan objek permintaan yang berisi konfigurasi seperti kelas penyimpanan.
OSSCreateBucketRequest *create = [OSSCreateBucketRequest new];
create.bucketName = @"your-bucket-name";
create.storageClass = OSSBucketStorageClassIA; // Tentukan kelas penyimpanan di sini.
// Kelas penyimpanan opsional: OSSBucketStorageClassStandard, OSSBucketStorageClassIA, dll.Untuk contoh lengkap, lihat Buat bucket (iOS SDK).
API
Saat memanggil PutBucket, tentukan kelas penyimpanan bucket di elemen permintaan StorageClass.
Tipe redundansi penyimpanan
Tipe redundansi penyimpanan menentukan kemampuan pemulihan bencana, ketahanan, dan ketersediaan data Anda. Default-nya adalah Zone-Redundant Storage (ZRS). Anda dapat meningkatkan dari Locally Redundant Storage (LRS) ke ZRS, tetapi tidak dapat menurunkan spesifikasi.
Zone-Redundant Storage (ZRS) – Direkomendasikan untuk lingkungan produksi
Data disimpan di beberapa zona ketersediaan (AZ) dalam region yang sama. Desain ini memastikan kelangsungan bisnis bahkan jika seluruh zona ketersediaan gagal, memberikan ketahanan data dan ketersediaan layanan yang lebih tinggi.
Locally Redundant Storage (LRS) – Untuk data non-kritis atau uji coba
Data disimpan secara redundan dalam satu zona ketersediaan dengan biaya lebih rendah. Ini melindungi dari kegagalan perangkat keras tetapi tidak dapat menjamin akses data jika seluruh zona ketersediaan tidak tersedia.
Konsol
Saat membuat bucket, Anda dapat memilih tipe redundansi penyimpanan untuk bucket.
ossutil
Perintah berikut membuat bucket dengan tipe redundansi penyimpanan Local Redundant Storage (LRS): examplebucket.
ossutil mb oss://examplebucket --redundancy-type LRSUntuk informasi lebih lanjut tentang perintah ini, lihat mb (buat bucket).
SDK OSS
Java
Untuk mengatur tipe redundansi penyimpanan, konfigurasikan objek CreateBucketRequest sebagai berikut.
// Siapkan objek permintaan yang berisi tipe redundansi penyimpanan.
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS); // Tentukan tipe redundansi penyimpanan di sini.
// Opsi: DataRedundancyType.ZRS, DataRedundancyType.LRSUntuk contoh lengkap, lihat Buat bucket (Java SDK V1).
Python
Saat memanggil metode client.put_bucket, gunakan parameter create_bucket_configuration untuk menentukan tipe redundansi penyimpanan.
# Siapkan objek permintaan yang berisi tipe redundansi penyimpanan.
req = oss.PutBucketRequest(
bucket="your-bucket-name",
create_bucket_configuration=oss.CreateBucketConfiguration(
data_redundancy_type='ZRS' // Tentukan tipe redundansi penyimpanan di sini.
)
)
# Opsi: 'ZRS', 'LRS'Untuk contoh lengkap, lihat Buat bucket (Python SDK V2).
Go
Untuk mengatur tipe redundansi penyimpanan, saat membuat PutBucketRequest, konfigurasikan field CreateBucketConfiguration.
request := &oss.PutBucketRequest{
Bucket: oss.Ptr("your-bucket-name"),
CreateBucketConfiguration: &oss.CreateBucketConfiguration{
DataRedundancyType: oss.DataRedundancyZRS, // Tentukan tipe redundansi penyimpanan di sini.
},
}
// Opsi: oss.DataRedundancyZRS, oss.DataRedundancyLRSUntuk contoh lengkap, lihat Buat bucket (Go SDK V2).
PHP
Untuk mengatur tipe redundansi penyimpanan, berikan objek CreateBucketConfiguration ke konstruktor saat membuat objek PutBucketRequest.
// Siapkan objek permintaan yang berisi konfigurasi seperti tipe redundansi penyimpanan.
$request = new Oss\Models\PutBucketRequest(
"your-bucket-name",
null, // acl
null, // resourceGroupId
new Oss\Models\CreateBucketConfiguration(
null, // storageClass
'ZRS' // Tentukan tipe redundansi penyimpanan di sini.
)
);
/*
* Tipe redundansi penyimpanan opsional: 'ZRS', 'LRS'
*/Untuk contoh lengkap, lihat Buat bucket (PHP SDK V2).
C#
Untuk mengatur tipe redundansi penyimpanan, buat objek CreateBucketRequest dan konfigurasikan propertinya sebagai berikut.
// Siapkan objek permintaan yang berisi konfigurasi tipe redundansi penyimpanan.
var request = new CreateBucketRequest("your-bucket-name");
request.DataRedundancyType = DataRedundancyType.ZRS; // Tentukan tipe redundansi penyimpanan di sini.
// Tipe redundansi penyimpanan opsional: DataRedundancyType.ZRS, DataRedundancyType.LRSUntuk contoh lengkap, lihat Buat bucket (C# SDK V1).
Node.js
Untuk mengatur tipe redundansi penyimpanan, buat objek options dan berikan ke metode putBucket.
// Siapkan objek options yang berisi konfigurasi tipe redundansi penyimpanan.
const options = {
dataRedundancyType: 'LRS', // Tentukan tipe redundansi penyimpanan di sini.
};
// Tipe redundansi penyimpanan opsional: 'ZRS', 'LRS'Untuk contoh lengkap, lihat Buat bucket (Node.js SDK).
API
Saat memanggil PutBucket, tentukan tipe redundansi penyimpanan bucket di elemen permintaan DataRedundancyType.
Daftar kontrol akses (ACL)
Daftar kontrol akses (ACL) mengontrol akses ke bucket dan objek-objeknya. Izin default-nya adalah private, yang dapat diubah kapan saja setelah bucket dibuat. Secara default, objek mewarisi izin akses bucket. Anda juga dapat mengatur izin untuk objek individual.
Private – Sangat direkomendasikan
Ini adalah pengaturan default dan paling aman. Hanya pemilik bucket dan pengguna yang secara eksplisit diberikan izin melalui kebijakan RAM atau kebijakan bucket yang dapat mengakses bucket. Disarankan selalu menggunakan pengaturan ini. Untuk memberikan akses kepada pengguna lain, lihat Ikhtisar izin dan kontrol akses.
Baca-publik – Gunakan dengan hati-hati
Tidak memerlukan autentikasi. Siapa pun, termasuk pengunjung anonim, memiliki akses read-only ke objek.
Data Anda akan sepenuhnya publik, yang dapat menyebabkan biaya tak terduga untuk trafik internet arah keluar. Pengaturan ini cocok untuk skenario berbagi publik, seperti hosting aset website statis.
Jika Anda harus mengaktifkan baca-publik, disarankan mengonfigurasi Perlindungan hotlink untuk memungkinkan akses hanya dari referrer tertentu, seperti domain website Anda, guna mencegah konsumsi trafik tidak sah.
Baca-tulis publik – Sangat tidak disarankan
Siapa pun dapat membaca, menulis, dan bahkan menghapus objek di bucket. Ini menimbulkan risiko keamanan yang sangat tinggi dan dapat menyebabkan biaya besar. Gunakan pengaturan ini hanya untuk kasus khusus, seperti repositori publik. Penggunaan umum dilarang keras.
Konsol
Karena alasan keamanan, Konsol OSS secara default mengaktifkan Blokir Akses Publik dan hanya mendukung pembuatan bucket privat.
Untuk mengubah ACL menjadi public read atau public read/write, ikuti langkah-langkah berikut:
Klik nama bucket target untuk membuka halaman detailnya.
Di panel navigasi kiri, pilih Permissions > Block Public Access, lalu matikan kebijakan ini.
Beralih ke tab ACL dan klik Configure.
Ikuti petunjuk di layar untuk mengubah ACL bucket menjadi Public Read atau Public Read.
ossutil
Perintah berikut membuat bucket bernama examplebucket dan mengatur daftar kontrol aksesnya (ACL) ke private.
ossutil mb oss://examplebucket --acl=privateUntuk informasi lebih lanjut tentang perintah ini, lihat mb (buat bucket).
SDK OSS
Java
Untuk mengatur daftar kontrol akses, konfigurasikan objek CreateBucketRequest sebagai berikut.
// Siapkan objek permintaan yang berisi izin akses.
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setCannedACL(CannedAccessControlList.Private); // Tentukan ACL bucket di sini.
// Opsi: CannedAccessControlList.Private, CannedAccessControlList.PublicRead, CannedAccessControlList.PublicReadWriteUntuk contoh lengkap, lihat Buat bucket (Java SDK V1).
Python
Saat memanggil metode client.put_bucket, tentukan daftar kontrol akses di parameter create_bucket_configuration.
# Siapkan objek permintaan yang berisi izin akses.
req = oss.PutBucketRequest(
bucket="your-bucket-name",
create_bucket_configuration=oss.CreateBucketConfiguration(
access_control_policy='private' // Tentukan izin akses di sini.
)
)
# Opsi: 'private', 'public-read', 'public-read-write'Untuk contoh lengkap, lihat Buat bucket (Python SDK V2).
Go
Untuk mengatur daftar kontrol akses, saat membuat PutBucketRequest, konfigurasikan field Acl.
// Siapkan objek permintaan yang berisi konfigurasi seperti izin akses.
request := &oss.PutBucketRequest{
Bucket: oss.Ptr("your-bucket-name"),
Acl: oss.BucketACLPrivate, // Tentukan izin akses di sini.
CreateBucketConfiguration: &oss.CreateBucketConfiguration{
},
}
// Izin akses opsional: oss.BucketACLPrivate, oss.BucketACLPublicRead, oss.BucketACLPublicReadWriteUntuk contoh lengkap, lihat Buat bucket (Go SDK V2).
PHP
Untuk mengatur daftar kontrol akses, konfigurasikan field Acl saat membuat PutBucketRequest.
// Siapkan objek permintaan yang berisi konfigurasi seperti izin akses.
$request = new Oss\Models\PutBucketRequest(
"your-bucket-name",
'private', // Tentukan izin akses di sini (parameter kedua).
null, // resourceGroupId
new Oss\Models\CreateBucketConfiguration(
'IA', // Tentukan kelas penyimpanan di sini.
'ZRS' // Tentukan tipe redundansi di sini.
)
);
/*
* Izin akses opsional: 'private', 'public-read', 'public-read-write'
*/Untuk contoh lengkap, lihat Buat bucket (PHP SDK V2).
C#
Untuk mengatur daftar kontrol akses, buat objek CreateBucketRequest dan konfigurasikan propertinya sebagai berikut.
// Siapkan objek permintaan yang berisi konfigurasi izin akses.
var request = new CreateBucketRequest("your-bucket-name");
request.ACL = CannedAccessControlList.Private; // Tentukan izin akses di sini.
// Izin akses opsional: CannedAccessControlList.Private, CannedAccessControlList.PublicRead, CannedAccessControlList.PublicReadWriteUntuk contoh lengkap, lihat Buat bucket (C# SDK V1).
Node.js
Untuk mengatur izin akses, buat objek options dan berikan ke metode putBucket.
// Siapkan objek options yang berisi izin akses.
const options = {
acl: 'private', // Tentukan izin akses di sini.
};
// Izin akses opsional: 'private', 'public-read', 'public-read-write'Untuk contoh lengkap, lihat Buat bucket (Node.js SDK).
Android
Untuk mengatur daftar kontrol akses, buat objek CreateBucketRequest dan konfigurasikan sebagai berikut.
// Siapkan objek permintaan yang berisi konfigurasi seperti izin akses.
CreateBucketRequest createBucketRequest = new CreateBucketRequest("your-bucket-name");
createBucketRequest.setBucketACL(CannedAccessControlList.Private); // Tentukan izin akses di sini.
// Izin akses opsional: CannedAccessControlList.Private, CannedAccessControlList.PublicRead, CannedAccessControlList.PublicReadWriteUntuk contoh lengkap, lihat Buat bucket (Android SDK).
iOS
Untuk mengatur izin akses, buat objek OSSCreateBucketRequest dan konfigurasikan propertinya sebagai berikut.
// Siapkan objek permintaan yang berisi konfigurasi seperti izin akses.
OSSCreateBucketRequest *create = [OSSCreateBucketRequest new];
create.bucketName = @"your-bucket-name";
create.xOssACL = @"private"; // Tentukan izin akses di sini.
// Izin akses opsional: private, public-read, public-read-write, dll.Untuk contoh lengkap, lihat Buat bucket (iOS SDK).
API
Saat memanggil API PutBucket, tentukan izin baca/tulis bucket di header permintaan x-oss-acl.
Blokir Akses Publik
Ini adalah sakelar keamanan global yang membantu mencegah paparan data yang tidak disengaja akibat kesalahan konfigurasi ACL atau kebijakan bucket.
Saat diaktifkan, Anda hanya dapat membuat bucket privat. Anda tidak dapat mengatur ACL bucket ke baca-publik atau baca-tulis publik, maupun menerapkan kebijakan bucket yang memberikan akses publik. OSS secara default mengaktifkan Blokir Akses Publik saat Anda membuat bucket. Jika kasus penggunaan Anda memerlukan akses publik, Anda dapat menonaktifkan fitur ini secara manual setelah bucket dibuat. Namun, demi alasan keamanan, kami tidak menyarankan menonaktifkannya.
Fitur opsional
Anda dapat mengonfigurasi fitur-fitur ini sesuai kebutuhan selama atau setelah pembuatan bucket.
Versi
Mencegah penghapusan atau penimpaan data secara tidak sengaja. Saat Anda mengunggah objek dengan nama yang sama seperti objek yang sudah ada, versi baru dibuat alih-alih menimpa yang saat ini. Anda dapat memulihkan versi sebelumnya dengan satu klik untuk memulihkan dari kesalahan. Untuk informasi lebih lanjut, lihat Versi.
Enkripsi sisi server
Secara otomatis mengenkripsi data saat diam. OSS mengenkripsi data saat ditulis dan mendekripsinya saat dibaca. Disarankan mengaktifkan setidaknya opsi 'Dikelola OSS'. Untuk informasi lebih lanjut, lihat Enkripsi sisi server.
Kelompok sumber daya
Cocok untuk kolaborasi multi-tim. Anda dapat mengelompokkan bucket berdasarkan departemen atau proyek untuk pengelolaan izin dan akuntansi biaya terpisah. Untuk informasi lebih lanjut, lihat Gunakan kelompok sumber daya.
Kueri log real-time
Setelah diaktifkan, Anda dapat dengan cepat mengkueri dan menganalisis log akses di konsol. Ini memungkinkan Anda melacak siapa yang mengakses objek mana dan kapan, membantu Anda menyelidiki aktivitas tidak biasa atau menganalisis perilaku pengguna. Untuk informasi lebih lanjut, lihat Kueri log real-time.
Cadangan terjadwal
Mendukung pencadangan data otomatis. Untuk informasi lebih lanjut, lihat Konfigurasikan cadangan terjadwal untuk bucket.
Layanan OSS-HDFS
Ideal untuk skenario data lake. Layanan ini memungkinkan framework data besar seperti Spark menganalisis data di OSS secara langsung tanpa migrasi data. Untuk informasi lebih lanjut, lihat Apa itu layanan OSS-HDFS?
Bucket Tag
Anda dapat mengklasifikasikan bucket menggunakan tag pasangan kunci-nilai, seperti
Department:R&D, untuk memfasilitasi pengelolaan batch dan analisis biaya. Untuk informasi lebih lanjut, lihat Kelola tag bucket.
Penagihan
Membuat bucket gratis. Setelah Anda menyimpan data di bucket, Anda akan dikenai biaya berdasarkan penggunaan aktual. Untuk menghindari biaya yang tidak perlu, pertimbangkan hal berikut selama konfigurasi:
Kompatibilitas paket sumber daya
Jenis paket sumber daya Anda harus persis sesuai dengan tipe redundansi penyimpanan bucket Anda. Paket sumber daya Locally Redundant Storage (LRS) tidak dapat mengimbangi biaya bucket Zone-Redundant Storage (ZRS), dan sebaliknya. Konfirmasi pilihan Anda saat pembuatan.Penagihan khusus untuk kelas penyimpanan non-Standard
Meskipun kelas penyimpanan Infrequent Access (IA), Archive, Cold Archive, dan Deep Cold Archive memiliki harga satuan lebih rendah, mereka memiliki durasi penyimpanan minimum dan dikenai biaya pengambilan data.Penghapusan atau modifikasi dini: Jika Anda menghapus atau memodifikasi objek sebelum durasi penyimpanan minimum berakhir, Anda akan dikenai biaya untuk durasi minimum penuh.
Pembacaan data: Mengakses data di kelas penyimpanan apa pun selain Standard dikenai biaya tambahan untuk pengambilan data.
Risiko akses publik
Jika Anda mengatur daftar kontrol akses (ACL) ke baca-publik atau baca-tulis publik, data Anda terpapar ke internet. Ini dapat menyebabkan hotlinking tidak sah dan pencurian data, mengakibatkan biaya trafik yang tidak terduga tinggi.