All Products
Search
Document Center

Object Storage Service:Enkripsi sisi server

Last Updated:Mar 04, 2026

Layanan Penyimpanan Objek (OSS) mendukung enkripsi sisi server untuk melindungi data saat tidak aktif. Saat diaktifkan, OSS mengenkripsi objek saat diunggah dan mendekripsinya saat diunduh. Header x-oss-server-side-encryption dalam respons unduhan menegaskan bahwa objek tersebut telah dienkripsi. Untuk informasi selengkapnya, lihat GetObject.

Pilih metode enkripsi

OSS menyediakan dua metode enkripsi sisi server, keduanya mendukung algoritma AES-256. SSE-KMS juga mendukung SM4 saat digunakan melalui SDK.

DimensiSSE-KMSSSE-OSS
Manajemen kunciKunci master pelanggan (CMK) yang dikelola oleh Key Management Service (KMS). Gunakan CMK default atau tentukan CMK Anda sendiri.OSS menghasilkan dan mengelola semua kunci.
Kontrol kunciAnda mengontrol CMK. Secara opsional bawa bahan kunci Anda sendiri (BYOK).Tidak perlu manajemen kunci manual.
Cakupan enkripsiHanya data objek. Kunci data dienkripsi dan disimpan dalam metadata objek.Data objek. Setiap objek dienkripsi dengan kunci unik yang dilindungi oleh kunci master.
BiayaBerlaku biaya API KMS. Untuk detailnya, lihat Billing of KMSGratis.
Paling cocok untukBeban kerja yang memerlukan CMK tertentu untuk keamanan dan kepatuhan.Beban kerja yang membutuhkan enkripsi tanpa manajemen kunci manual.

Cara kerja SSE-KMS

SSE-KMS menggunakan enkripsi amplop. KMS menghasilkan kunci data untuk mengenkripsi objek, lalu mengenkripsi kunci data tersebut dengan CMK. Kunci data yang terenkripsi disimpan dalam metadata objek.

SSE-KMS encryption logic

CMK default yang dikelola KMS

Pada penggunaan pertama SSE-KMS, OSS membuat CMK default di KMS dan menggunakan kunci yang diturunkan darinya untuk mengenkripsi dan mendekripsi objek.

Untuk mengonfigurasi:

  • Tingkat bucket: Atur metode enkripsi ke KMS tanpa menentukan ID CMK. Semua objek yang diunggah ke bucket akan dienkripsi.

  • Tingkat objek: Atur header x-oss-server-side-encryption ke KMS dalam permintaan unggah Anda. OSS menggunakan CMK default dan AES-256 untuk mengenkripsi objek. Untuk informasi selengkapnya, lihat PutObject.

CMK kustom (bawa kunci Anda sendiri)

CMK kustom memberi Anda kontrol penuh atas kunci enkripsi. ID CMK dicatat dalam metadata objek, dan hanya pengguna dengan izin dekripsi yang dapat mengunduh objek tersebut.

Sumber bahan kunci:

  • Alibaba Cloud KMS: Pilih Alibaba Cloud KMS sebagai sumber bahan kunci saat membuat kunci di KMS.

  • Bahan kunci eksternal: Pilih External sebagai sumber bahan kunci dan impor bahan kunci Anda sendiri. Untuk informasi selengkapnya, lihat Import key material.

Untuk mengonfigurasi:

  • Tingkat bucket: Atur metode enkripsi ke KMS dan tentukan ID CMK. Semua objek yang diunggah ke bucket akan dienkripsi dengan CMK yang ditentukan.

  • Tingkat objek: Atur x-oss-server-side-encryption ke KMS dan x-oss-server-side-encryption-key-id ke ID CMK dalam permintaan unggah Anda. Untuk informasi selengkapnya, lihat PutObject.

Cara kerja SSE-OSS

SSE-OSS mengenkripsi setiap objek dengan kunci data AES-256 unik. OSS menghasilkan dan mengelola kunci data ini serta melindunginya dengan kunci master.

Untuk mengonfigurasi:

  • Tingkat bucket: Atur metode enkripsi ke SSE-OSS dengan AES-256. Semua objek yang diunggah ke bucket akan dienkripsi secara default.

  • Tingkat objek: Atur header x-oss-server-side-encryption ke AES256 dalam permintaan unggah Anda. Untuk informasi selengkapnya, lihat PutObject.

Catatan penggunaan

  • Mengubah metode enkripsi bucket tidak memengaruhi objek yang sudah ada. Untuk mengenkripsi objek yang sudah ada, panggil CopyObject untuk menimpanya dengan metode enkripsi saat ini.

  • Sebuah objek hanya dapat dienkripsi dengan satu metode sekaligus.

  • Enkripsi tingkat objek memiliki prioritas lebih tinggi daripada enkripsi tingkat bucket. Jika Anda menentukan metode enkripsi saat mengunggah atau menyalin objek, metode tersebut akan menggantikan pengaturan default bucket. Untuk informasi selengkapnya, lihat PutObject.

  • Objek yang diperoleh melalui aturan mirroring-based back-to-origin tidak dienkripsi secara default.

  • SSE-KMS memerlukan izin pada CMK yang ditentukan. Permintaan anonim atau permintaan tanpa izin KMS yang sesuai akan gagal dengan kesalahan This request is forbidden by kms.

Rotasi kunci

Enkripsi sisi server mendukung rotasi kunci KMS jika Anda telah membeli layanan rotasi kunci.

Setelah rotasi kunci atau pembaruan kunci enkripsi:

  • Kunci baru hanya berlaku untuk objek yang dibuat setelah rotasi. Objek yang sudah ada tetap dienkripsi dengan kunci sebelumnya.

  • Jangan pernah menghapus kunci lama setelah pembaruan kunci. Menghapus kunci lama mencegah akses ke objek yang dienkripsi dengan kunci tersebut.

Izin yang diperlukan

Pengguna RAM memerlukan izin spesifik untuk setiap operasi enkripsi. Untuk informasi selengkapnya tentang pemberian izin, lihat Attach a custom policy to a RAM user.

Izin per operasi

OperasiIzin yang diperlukanIzin KMS tambahan (SSE-KMS dengan CMK tertentu)
Mengonfigurasi enkripsi bucketManajemen bucket, PutBucketEncryption, GetBucketEncryptionListKeys, ListAliases, ListAliasesByKeyId, DescribeKey
Mengunggah objekUnggah objekListKeys, ListAliases, ListAliasesByKeyId, DescribeKey, GenerateDataKey, Decrypt
Mengunduh objekAkses objekDecrypt

Contoh kebijakan RAM

Contoh berikut memberikan izin KMS melalui kebijakan RAM.

Mengonfigurasi enkripsi bucket (SSE-KMS dengan CMK tertentu)

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:DescribeKey"
      ],
      "Resource": [
        "acs:kms:*:141661496593****:*"
      ]
    }
  ]
}

Ganti ARN resource dengan ID akun Anda. Untuk membatasi akses ke CMK tertentu, ganti wildcard dengan ID CMK.

Mengunggah objek (SSE-KMS dengan CMK tertentu)

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:DescribeKey",
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": [
        "acs:kms:*:141661496593****:*"
      ]
    }
  ]
}

Mengunduh objek (SSE-KMS dengan CMK tertentu)

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "acs:kms:*:141661496593****:*"
      ]
    }
  ]
}

Aktifkan enkripsi sisi server

Penting
  • Jika Anda telah membeli layanan rotasi kunci KMS, enkripsi sisi server mendukung rotasi kunci KMS. Setelah rotasi kunci diaktifkan, kunci baru hanya berlaku untuk objek yang dibuat setelah rotasi. Objek yang sudah ada tetap dienkripsi dengan kunci sebelumnya.

  • Setelah memperbarui kunci enkripsi, kunci baru hanya berlaku untuk objek yang ditulis setelah pembaruan. Jangan pernah menghapus kunci lama setelah pembaruan kunci. Menghapus kunci lama memengaruhi akses ke objek yang sudah ada.

Konsol OSS

Aktifkan enkripsi untuk bucket

Saat membuat bucket
  1. Masuk ke konsol OSS.

  2. Di panel navigasi sebelah kiri, klik Buckets. Di halaman Buckets, klik Create Bucket.

  3. Di panel Create Bucket, konfigurasikan parameter enkripsi. Untuk informasi selengkapnya tentang parameter lainnya, lihat Create a bucket.

    ParameterDeskripsi
    Encryption MethodPilih metode enkripsi. Nilai yang valid: None (enkripsi sisi server dinonaktifkan), OSS-Managed (kunci yang dikelola OSS mengenkripsi objek dalam bucket. Setiap objek dienkripsi dengan kunci berbeda, dan kunci master melindungi kunci-kunci tersebut), KMS (CMK default yang dikelola KMS atau CMK tertentu mengenkripsi dan mendekripsi objek. Untuk menggunakan KMS, aktifkan KMS terlebih dahulu. Untuk informasi selengkapnya, lihat Activate KMS).
    Encryption AlgorithmHanya AES-256 yang didukung.
    CMKTersedia hanya ketika KMS dipilih untuk Encryption Method. Format CMK adalah <alias>(CMK ID). Nilai yang valid: alias/acs/oss(CMK ID) (CMK default mengenkripsi objek dan secara otomatis mendekripsinya saat diunduh), alias/\<cmkname\>(CMK ID) (CMK kustom mengenkripsi objek. ID CMK dicatat dalam metadata objek. Objek secara otomatis didekripsi untuk pengguna dengan izin dekripsi. Sebelum menentukan ID CMK, buat kunci normal atau kunci eksternal di wilayah yang sama dengan bucket. Untuk informasi selengkapnya, lihat Create a CMK).
  4. Klik Create. Di dialog konfirmasi, klik Confirm.

Untuk bucket yang sudah ada
  1. Masuk ke konsol OSS.

  2. Di panel navigasi sebelah kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket target.

  3. Di pohon navigasi sebelah kiri, pilih Content Security > Server-side Encryption.

  4. Di halaman Server-side Encryption, klik Settings dan konfigurasikan parameter.

    ParameterDeskripsi
    Encryption MethodPilih metode enkripsi. Nilai yang valid: None (enkripsi sisi server dinonaktifkan), OSS-Managed (kunci yang dikelola OSS mengenkripsi objek dalam bucket. Setiap objek dienkripsi dengan kunci berbeda, dan kunci master melindungi kunci-kunci tersebut), KMS (CMK default yang dikelola KMS atau CMK tertentu mengenkripsi dan mendekripsi objek. Untuk menggunakan KMS, aktifkan KMS terlebih dahulu. Untuk informasi selengkapnya, lihat Activate KMS).
    Encryption AlgorithmHanya AES-256 yang didukung.
    CMKTersedia hanya ketika KMS dipilih untuk Encryption Method. Format CMK adalah <alias>(CMK ID). Nilai yang valid: OSS automatically creates a key by default (CMK default mengenkripsi objek dan secara otomatis mendekripsinya saat diunduh. Format CMK adalah alias/acs/oss(CMK ID). Lihat CMK di konsol KMS.
    Catatan

    Unggah setidaknya satu objek ke bucket sebelum melihat CMK di konsol KMS, agar CMK dibuat dan diterapkan), alias/\<cmkname\>(CMK ID) (CMK kustom mengenkripsi objek dalam bucket. ID CMK dicatat dalam metadata objek. Objek secara otomatis didekripsi untuk pengguna dengan izin dekripsi. Sebelum menentukan ID CMK, buat kunci normal atau kunci eksternal di wilayah yang sama dengan bucket. Untuk informasi selengkapnya, lihat Create a CMK).

  5. Klik Save.

Aktifkan enkripsi saat mengunggah objek

Untuk informasi selengkapnya, lihat Simple upload.

SDK OSS

Aktifkan enkripsi untuk bucket

SDK OSS hanya mendukung pengaktifan enkripsi sisi server untuk bucket yang sudah ada. Untuk bahasa pemrograman lainnya, lihat Overview.

Java

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 Throwable {
        // Tentukan endpoint wilayah. Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
        String 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.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket.
        String bucketName = "examplebucket";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan resource saat OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)
        .build();

        try {
            // Atur algoritma enkripsi bucket ke SM4. Jika menggunakan AES-256, ganti SSEAlgorithm.SM4 dengan SSEAlgorithm.AES256.
            ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.SM4);
            ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration();
            sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault);
            SetBucketEncryptionRequest request = new SetBucketEncryptionRequest(bucketName, sseConfig);
            ossClient.setBucketEncryption(request);
        } 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();
            }
        }
    }
}

PHP

<?php

// Masukkan file autoload untuk memuat library dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Tentukan deskripsi untuk parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Wajib) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS', 'required' => False], // (Opsional) Tentukan endpoint yang dapat digunakan layanan lain untuk mengakses OSS.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Wajib) Tentukan nama bucket.
];

// Hasilkan daftar opsi panjang untuk mengurai parameter baris perintah.
$longopts = \array_map(function ($key) {
    return "$key:"; // Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
}, 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: the following arguments are required: --$key, $help"; // Tentukan bahwa parameter wajib belum dikonfigurasi.
        exit(1);
    }
}

// Dapatkan nilai parameter baris perintah.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.

// Gunakan variabel lingkungan untuk memuat ID AccessKey dan rahasia AccessKey.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial.
$cfg->setCredentialsProvider($credentialsProvider);

// Tentukan wilayah.
$cfg->setRegion($region);

// Tentukan endpoint jika endpoint disediakan.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Buat objek PutBucketEncryptionRequest, gunakan metode enkripsi Key Management Service (KMS), dan atur algoritma enkripsi ke SM4.
$request = new Oss\Models\PutBucketEncryptionRequest(
    bucket: $bucket,
    serverSideEncryptionRule: new Oss\Models\ServerSideEncryptionRule(
        applyServerSideEncryptionByDefault: new Oss\Models\ApplyServerSideEncryptionByDefault(
            sseAlgorithm: 'KMS', //Gunakan metode enkripsi KMS.
            kmsDataEncryption: 'SM4' // Atur algoritma enkripsi ke SM4.
    ))
);

// Gunakan metode putBucketEncryption untuk mengonfigurasi pengaturan enkripsi sisi server untuk bucket.
$result = $client->putBucketEncryption($request);

// Tampilkan hasil yang dikembalikan.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP yang dikembalikan.
    'request id:' . $result->requestId // ID permintaan, yang merupakan pengidentifikasi unik permintaan.
);

Node.js

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

const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah 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'
});

async function putBucketEncryption() {
  try {
    // Konfigurasikan metode enkripsi untuk bucket.

    const result = await client.putBucketEncryption("bucket-name", {
      SSEAlgorithm: "AES256", // Dalam contoh ini, algoritma enkripsi AES-256 digunakan. Untuk menggunakan KMS untuk enkripsi, Anda harus menentukan KMSMasterKeyID.
      // KMSMasterKeyID: "yourKMSMasterKeyId". Tentukan ID CMK. Parameter ini tersedia dan wajib saat SSEAlgorithm diatur ke KMS dan CMK tertentu digunakan untuk enkripsi. Dalam kasus lain, biarkan parameter ini kosong.
    });
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

putBucketEncryption();

C#

using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah 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. Contoh: examplebucket.
var bucketName = "examplebucket";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan ubah parameter sesuai kebutuhan.
var conf = new ClientConfiguration();

// Gunakan algoritma tanda tangan V4.
 conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Konfigurasikan enkripsi sisi server untuk bucket.
    var request = new SetBucketEncryptionRequest(bucketName, "KMS", null);
    client.SetBucketEncryption(request);
    Console.WriteLine("Set bucket:{0} Encryption succeeded ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}

Go

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Error creating credentials provider: %v", err)
	}

	// Buat instance OSSClient.
	// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual Anda.
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. Tentukan wilayah aktual.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Tentukan versi algoritma tanda tangan.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// Inisialisasi aturan enkripsi. Dalam contoh ini, algoritma enkripsi AES-256 digunakan.
	config := oss.ServerEncryptionRule{
		SSEDefault: oss.SSEDefaultRule{
			SSEAlgorithm: "AES256",
		},
	}

	// Konfigurasikan aturan enkripsi untuk bucket OSS.
	err = client.SetBucketEncryption("yourBucketName", config)
	if err != nil {
		log.Fatalf("Error setting bucket encryption: %v", err)
	}

	log.Println("Bucket encryption set successfully")
}

C++

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

int main(void)
{
    /* Inisialisasi informasi akun yang digunakan untuk mengakses OSS. */

    /* Tentukan endpoint wilayah tempat bucket berada. Tentukan endpoint wilayah tempat bucket berada. */
    std::string Endpoint = "yourEndpoint";
    /* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.*/
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi resource, seperti resource jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    SetBucketEncryptionRequest setrequest(BucketName);
    setrequest.setSSEAlgorithm(SSEAlgorithm::KMS);
    /* Konfigurasikan enkripsi sisi server berdasarkan KMS. */
    auto outcome = client.SetBucketEncryption(setrequest);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "SetBucketEncryption fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan resource, seperti resource jaringan. */
    ShutdownSdk();
    return 0;
}

Aktifkan enkripsi saat mengunggah objek

Contoh berikut mengatur enkripsi sisi server saat mengunggah objek. Untuk bahasa pemrograman lainnya, lihat Overview.

Java
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.internal.OSSHeaders;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyun.oss.model.ObjectMetadata;
import java.io.File;

public class Put {
    public static void main(String[] args) throws Exception {
        // Tentukan endpoint berdasarkan wilayah bucket Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan ID wilayah bucket Anda.
        String region = "cn-hangzhou";
        // Dapatkan kredensial akses. 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 path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt.
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan path file lokal. Contoh: D:\\localpath\\examplefile.txt.
        // Jika Anda tidak menentukan path file lokal, file di path lokal proyek demo akan diunggah.
        String filePath= "D:\\localpath\\examplefile.txt";

        // Buat instance klien OSS.
        // Saat instance klien tidak lagi digunakan, panggil metode shutdown untuk melepaskan resource.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Gunakan algoritma tanda tangan V4.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Buat objek ObjectMetadata dan atur metode enkripsi server ke AES256.
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, "AES256");

            // Buat objek PutObjectRequest.
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
            putObjectRequest.setMetadata(metadata);

            // Unggah objek.
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } 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();
            }
        }
    }
}
PHP
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;


// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
$object = "exampledir/exampleobject.txt";
// Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika path file lokal tidak ditentukan, file lokal diunggah dari path proyek tempat program contoh berada.
$filePath = "D:\\localpath\\examplefile.txt";

try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
    );
    $ossClient = new OssClient($config);

    $options[OssClient::OSS_HEADERS] = array(
         // Atur metode enkripsi sisi server ke AES-256.
        "x-oss-server-side-encryption"=>"AES256",
    );
    // Gunakan metode uploadFile untuk mengunggah file lokal dan teruskan objek UploadOptions.
    $ossClient->uploadFile($bucket, $object, $filePath, $options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . "OK" . "\n");
Node.js
const OSS = require("ali-oss");
const path = require("path");

const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke oss-cn-hangzhou.
  region: "oss-cn-hangzhou",
  // 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,
  // Tentukan nama bucket.
  bucket: "examplebucket",
});

const headers = {
  // Atur metode enkripsi sisi server ke AES-256.
  "x-oss-server-side-encryption": "AES256",
};

async function put() {
  try {
    const result = await client.put(
      // Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
      "exampledir/exampleobject.txt",
      // Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika path file lokal tidak ditentukan, file lokal diunggah dari path proyek tempat program contoh berada.
      path.normalize("D:\\examplefile.jpg"),
      { headers }
    );
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();
Python
# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

# Tentukan nama bucket.
bucket_name = 'examplebucket0703'
bucket = oss2.Bucket(auth, endpoint, bucket_name)

# File harus dibuka dalam mode biner.
# Tentukan path lengkap file lokal. Jika path file lokal tidak ditentukan, file lokal diunggah dari path proyek tempat program contoh berada.
local_file_path = 'D:\\examplefile.jpg'
with open(local_file_path, 'rb') as fileobj:
    # Gunakan metode seek untuk membaca data dari byte 1.000 file. Data diunggah dari byte 1000 hingga byte terakhir file lokal.
    fileobj.seek(1000, os.SEEK_SET)
    # Gunakan metode tell untuk mendapatkan posisi saat ini.
    current = fileobj.tell()

    # Atur metode enkripsi sisi server ke AES-256.
    headers = {
        'x-oss-server-side-encryption': 'AES256',
    }

    # Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap.
    object_key = 'exampledir/object1.jpg'
    bucket.put_object(object_key, fileobj, headers=headers)
Go
package main

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instance OSSClient.
	// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual Anda.
	client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Tentukan nama bucket. Contoh: examplebucket.
	bucket, err := client.Bucket("examplebucket")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
    // Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
    // Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika path file lokal tidak ditentukan, file lokal diunggah dari path proyek tempat program contoh berada.
    // Atur metode enkripsi sisi server ke AES-256.
	err = bucket.PutObjectFromFile("D:\\localpath\\examplefile.txt", "D:\\examplefile.jpg", oss.ServerSideEncryption("AES256"))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

ossutil

Aktifkan enkripsi untuk bucket

ossutil memungkinkan Anda mengaktifkan enkripsi sisi server untuk bucket. Untuk petunjuk instalasi, lihat Install ossutil.

Contoh berikut mengatur enkripsi AES-256 untuk bucket bernama examplebucket:

ossutil api put-bucket-encryption --bucket examplebucket --server-side-encryption-rule "{\"ApplyServerSideEncryptionByDefault\":{\"SSEAlgorithm\":\"AES256\"}}"

Untuk informasi selengkapnya, lihat put-bucket-encryption.

Aktifkan enkripsi saat mengunggah objek

ossutil memungkinkan Anda mengatur enkripsi sisi server saat mengunggah objek. Untuk petunjuk instalasi, lihat Install ossutil.

Contoh berikut mengunggah file dengan enkripsi AES-256:

ossutil cp examplefile.txt oss://examplebucket --metadata=x-oss-server-side-encryption:AES256

Untuk informasi selengkapnya, lihat cp.

API OSS

Untuk mengintegrasikan enkripsi sisi server langsung ke dalam aplikasi Anda, panggil API RESTful. Sertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi selengkapnya, lihat PutBucketEncryption.

FAQ

Apakah OSS mengenkripsi objek yang sudah ada setelah saya mengaktifkan enkripsi sisi server untuk bucket?

Tidak. OSS hanya mengenkripsi objek yang diunggah setelah enkripsi sisi server diaktifkan. Untuk mengenkripsi objek yang sudah ada, panggil CopyObject untuk menimpanya dengan metode enkripsi saat ini.