Saat Anda mengunggah objek ke bucket yang telah diaktifkan enkripsi sisi server, Object Storage Service (OSS) mengenkripsi objek tersebut sebelum menyimpannya. Saat Anda mengunduh objek menggunakan permintaan GetObject, OSS secara otomatis mendekripsi objek dan mengembalikannya kepada Anda. Header x-oss-server-side-encryption dalam respons menunjukkan bahwa objek tersebut dienkripsi di sisi server.
Catatan
Untuk informasi lebih lanjut mengenai header respons x-oss-server-side-encryption, lihat GetObject.
Skenario
OSS menyediakan perlindungan data saat diam (data-at-rest) melalui enkripsi sisi server. Fitur ini cocok untuk aplikasi yang memiliki persyaratan keamanan atau kepatuhan tinggi terhadap penyimpanan data, seperti menyimpan file sampel pembelajaran mendalam atau data dokumen kolaboratif daring.
Metode enkripsi
OSS menyediakan dua metode enkripsi sisi server untuk skenario berbeda. Anda dapat memilih metode sesuai kebutuhan Anda.
Metode enkripsi
Deskripsi
Skenario
Catatan
Penagihan
Enkripsi dan dekripsi data menggunakan kunci yang dikelola oleh Key Management Service (KMS) (SSE-KMS)
Gunakan customer master key (CMK) default yang dikelola oleh KMS atau CMK tertentu untuk mengenkripsi dan mendekripsi data. Data dienkripsi dan didekripsi tanpa dikirim melalui jaringan ke server KMS.
Metode ini digunakan untuk skenario di mana Anda perlu menggunakan kunci yang dikelola sendiri dan dapat ditentukan untuk keperluan keamanan serta kepatuhan.
Kunci yang digunakan untuk mengenkripsi objek juga dienkripsi dan disimpan dalam metadata objek tersebut.
Metode enkripsi SSE-KMS hanya mengenkripsi data objek, bukan metadata objeknya.
Kunci KMS yang dibuat secara default di Konsol OSS tidak dikenai biaya.
Jika Anda menggunakan kunci KMS sendiri, biaya akan dikenakan di KMS. Untuk informasi selengkapnya, lihat Harga KMS.
Enkripsi dan dekripsi data menggunakan kunci yang dikelola oleh OSS (SSE-OSS)
Gunakan kunci yang sepenuhnya dikelola oleh OSS untuk mengenkripsi setiap objek. Untuk keamanan tambahan, OSS juga menggunakan kunci master untuk mengenkripsi kunci enkripsi data itu sendiri.
Metode ini digunakan untuk skenario di mana Anda hanya memerlukan enkripsi dasar dan tidak perlu mengelola kunci.
Tidak ada.
Tidak dikenai biaya.
Catatan
Saat Anda mengunggah, mengunduh, atau mengakses objek di bucket dengan enkripsi SSE-KMS yang diaktifkan, pastikan Anda memiliki izin untuk menggunakan ID CMK yang ditentukan dan permintaan tersebut bukan permintaan anonim. Jika tidak, permintaan akan gagal dan mengembalikan kesalahan This request is forbidden by kms.
Objek yang dicerminkan ke bucket menggunakan pengembalian ke sumber berbasis mirroring tidak dienkripsi secara default.
Mengaktifkan atau mengubah metode enkripsi untuk bucket tidak memengaruhi konfigurasi enkripsi objek yang sudah ada di bucket tersebut.
Hanya satu metode enkripsi sisi server yang dapat digunakan untuk suatu objek dalam satu waktu.
Jika Anda mengonfigurasi enkripsi untuk bucket, Anda tetap dapat menentukan metode enkripsi berbeda untuk objek tertentu saat mengunggah atau menyalinnya. Metode enkripsi yang ditentukan untuk objek tersebut akan berlaku. Untuk informasi selengkapnya, lihat PutObject.
Izin
Daftar berikut menjelaskan izin yang dibutuhkan Pengguna Resource Access Management (RAM) untuk menggunakan enkripsi sisi server dalam berbagai skenario.
Jika Anda menetapkan metode enkripsi ke SSE-KMS dan menentukan ID CMK, izin ListKeys, ListAliases, ListAliasesByKeyId, dan DescribeKey juga diperlukan. Berikut adalah contoh kebijakan RAM untuk skenario ini:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:DescribeKey"
],
"Resource": [
"acs:kms:*:141661496593****:*" // Kebijakan ini memungkinkan Anda memanggil semua kunci KMS di bawah ID akun Alibaba Cloud. Untuk hanya mengizinkan penggunaan CMK tertentu, masukkan ID CMK yang sesuai.
]
}
]
}
Mengunggah objek ke bucket terenkripsi
Izin untuk mengunggah objek ke bucket tujuan.
Jika metode enkripsi diatur ke KMS dan ID CMK ditentukan, izin ListKeys, ListAliases, ListAliasesByKeyId, DescribeKey, GenerateDataKey, dan Decrypt juga diperlukan. Berikut adalah contoh kebijakan RAM untuk skenario ini:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": [
"acs:kms:*:141661496593****:*"// Kebijakan ini memungkinkan Anda memanggil semua kunci KMS di bawah ID akun Alibaba Cloud. Untuk hanya mengizinkan penggunaan CMK tertentu, masukkan ID CMK yang sesuai.
]
}
]
}
Mengunduh objek dari bucket terenkripsi
Izin untuk mengakses objek di bucket tujuan.
Jika metode enkripsi diatur ke KMS dan ID CMK ditentukan, izin Decrypt juga diperlukan. Berikut adalah contoh kebijakan RAM untuk skenario ini:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"acs:kms:*:141661496593****:*"// Kebijakan ini memberikan izin untuk mendekripsi data menggunakan semua kunci KMS di bawah ID akun Alibaba Cloud. Untuk memberikan izin mendekripsi data menggunakan kunci KMS tertentu, masukkan ID CMK yang sesuai.
]
}
]
}
Prosedur
Penting
Jika Anda membeli layanan tambahan rotasi kunci untuk KMS, enkripsi sisi server mendukung rotasi kunci untuk kunci KMS. Setelah rotasi kunci diaktifkan, kunci baru hanya digunakan untuk mengenkripsi objek yang baru diunggah. Kunci enkripsi objek yang sudah ada tetap tidak berubah.
Jika Anda memperbarui kunci enkripsi KMS di OSS, kunci baru hanya digunakan untuk mengenkripsi objek yang baru diunggah. Objek yang diunggah sebelum pembaruan kunci tetap dienkripsi dengan kunci lama. Oleh karena itu, jangan menghapus kunci lama setelah pembaruan. Jika tidak, Anda tidak dapat mengakses objek yang sudah ada.
Gunakan Konsol OSS
Metode 1: Aktifkan enkripsi sisi server untuk bucket
Pada panel Create Bucket, konfigurasikan parameter berikut.
Parameter berikut digunakan untuk mengonfigurasi enkripsi sisi server untuk wilayah:
Parameter
Deskripsi
Encryption Method
Pilih metode enkripsi untuk objek. Nilai yang valid:
None: Enkripsi sisi server dinonaktifkan.
SSE-OSS: Gunakan kunci yang dikelola oleh OSS untuk enkripsi. OSS menggunakan kunci berbeda untuk mengenkripsi setiap objek. Untuk perlindungan tambahan, OSS menggunakan kunci master untuk mengenkripsi kunci enkripsi data itu sendiri.
SSE-KMS: Gunakan CMK default yang dikelola oleh KMS atau CMK tertentu untuk enkripsi dan dekripsi.
Sebelum menggunakan SSE-KMS, Anda harus mengaktifkan KMS. Untuk informasi selengkapnya, lihat Beli instans KMS khusus.
Encryption Algorithm
Hanya mendukung algoritma enkripsi AES256.
CMK
Anda hanya perlu mengonfigurasi opsi ini jika memilih KMS untuk enkripsi sisi server.
Pilih kunci enkripsi. Format kuncinya adalah <alias>(CMK ID). <alias> adalah alias CMK, dan CMK ID adalah ID CMK. Nilai yang valid:
alias/acs/oss(CMK ID): Jika memilih opsi ini, OSS menggunakan kunci layanan default untuk mengenkripsi data di bucket dan secara otomatis mendekripsi data saat Anda mengunduh objek dari bucket.
alias/<cmkname>(CMK ID): Jika memilih opsi ini, OSS menggunakan kunci layanan yang ditentukan untuk mengenkripsi data di bucket dan mencatat ID CMK dalam metadata objek terenkripsi. Saat pengguna dengan izin dekripsi mengunduh objek, objek tersebut secara otomatis didekripsi. <cmkname> adalah alias opsional untuk CMK yang Anda tentukan saat membuat kunci.
Sebelum menggunakan ID CMK tertentu, Anda harus membuat kunci standar atau eksternal di wilayah yang sama dengan bucket di Konsol KMS. Untuk informasi selengkapnya, lihat Buat CMK.
Untuk informasi lebih lanjut tentang parameter lainnya, lihat Buat bucket.
Klik OK.
Aktifkan enkripsi sisi server untuk bucket yang sudah ada
Di panel navigasi sebelah kiri, klik Buckets. Pada halaman Buckets, temukan dan klik bucket yang diinginkan.
Di panel navigasi sebelah kiri, pilih Content Security > Server-side Encryption.
Pada halaman Server-side Encryption, klik Configure dan konfigurasikan parameter.
Parameter
Deskripsi
Encryption Method
Pilih metode enkripsi untuk objek. Nilai yang valid:
None: Enkripsi sisi server dinonaktifkan.
SSE-OSS: Gunakan kunci yang dikelola oleh OSS untuk enkripsi. OSS menggunakan kunci berbeda untuk mengenkripsi setiap objek. Untuk perlindungan tambahan, OSS menggunakan kunci master untuk mengenkripsi kunci enkripsi data itu sendiri.
SSE-KMS: Gunakan CMK default yang dikelola oleh KMS atau CMK tertentu untuk enkripsi dan dekripsi.
Sebelum menggunakan SSE-KMS, Anda harus mengaktifkan KMS. Untuk informasi selengkapnya, lihat Beli instans KMS khusus.
Encryption Algorithm
Hanya algoritma enkripsi AES256 yang didukung.
CMK
Parameter ini diperlukan hanya jika Anda menetapkan Encryption Method ke SSE-KMS.
Pilih kunci enkripsi. Format kuncinya adalah <alias>(CMK ID). <alias> adalah alias CMK, dan CMK ID adalah ID CMK. Nilai yang valid:
Default Service Key: Jika memilih opsi ini, OSS menghasilkan kunci layanan default untuk mengenkripsi data di bucket dan secara otomatis mendekripsi data saat Anda mengunduh objek dari bucket. Kunci layanan default yang dibuat oleh OSS memiliki format alias/acs/oss (CMK ID). Anda dapat melihat kunci layanan ini di Konsol KMS.
Catatan
Sebelum Anda dapat melihat kunci layanan ini di Konsol KMS, Anda harus mengunggah setidaknya satu objek ke bucket tujuan untuk memastikan kunci enkripsi yang sesuai dibuat dan dikaitkan dengan layanan OSS Anda.
alias/<cmkname>(CMK ID): Jika memilih opsi ini, OSS menggunakan kunci layanan yang ditentukan untuk mengenkripsi data di bucket dan mencatat ID CMK dalam metadata objek terenkripsi. Saat pengguna dengan izin dekripsi mengunduh objek, objek tersebut secara otomatis didekripsi. <cmkname> adalah alias opsional untuk CMK yang Anda tentukan saat membuat kunci.
Sebelum menggunakan ID CMK tertentu, Anda harus membuat kunci standar atau eksternal di wilayah yang sama dengan bucket di Konsol KMS. Untuk informasi selengkapnya, lihat Buat CMK.
Klik Save.
Metode 2: Atur enkripsi sisi server saat mengunggah objek
Metode 1: Aktifkan enkripsi sisi server untuk bucket
SDK memungkinkan Anda mengaktifkan enkripsi sisi server untuk bucket yang sudah ada. Anda tidak dapat mengaktifkan enkripsi sisi server saat membuat bucket menggunakan SDK. Kode berikut memberikan contoh cara mengaktifkan enkripsi sisi server untuk bucket yang sudah ada dengan SDK umum. Untuk informasi selengkapnya tentang cara mengaktifkan enkripsi sisi server untuk bucket yang sudah ada dengan SDK lainnya, lihat Pengantar SDK Alibaba Cloud.
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 titik akhir wilayah. Dalam contoh ini, digunakan titik akhir wilayah China (Hangzhou). Tentukan titik akhir 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 sumber daya 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 ke SM4 untuk bucket. 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("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + 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 Kesalahan:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
<?php
// Impor file autoloader untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Definisikan deskripsi argumen baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada', 'required' => True], // Wajib. Wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS', 'required' => False], // Opsional. Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // Wajib. Nama bucket.
];
// Hasilkan daftar opsi panjang untuk mengurai argumen baris perintah.
$longopts = \array_map(function ($key) {
return "$key:"; // Titik dua (:) setelah setiap parameter menunjukkan bahwa nilai diperlukan.
}, array_keys($optsdesc));
// Uraikan argumen baris perintah.
$options = getopt("", $longopts);
// Periksa apakah argumen wajib hilang.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: argumen berikut wajib: --$key, $help"; // Beri tahu pengguna bahwa argumen wajib hilang.
exit(1);
}
}
// Dapatkan nilai argumen baris perintah.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
// Muat kredensial (AccessKeyId dan AccessKeySecret) dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
// Atur penyedia kredensial.
$cfg->setCredentialsProvider($credentialsProvider);
// Atur wilayah.
$cfg->setRegion($region);
// Jika titik akhir disediakan, atur titik akhir.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Buat objek permintaan untuk mengatur konfigurasi enkripsi bucket. Gunakan algoritma enkripsi KMS dan tentukan SM4 sebagai metode enkripsi data.
$request = new Oss\Models\PutBucketEncryptionRequest(
bucket: $bucket,
serverSideEncryptionRule: new Oss\Models\ServerSideEncryptionRule(
applyServerSideEncryptionByDefault: new Oss\Models\ApplyServerSideEncryptionByDefault(
sseAlgorithm: 'KMS', // Gunakan algoritma enkripsi KMS.
kmsDataEncryption: 'SM4' // Metode enkripsi data adalah SM4.
))
);
// Panggil metode putBucketEncryption untuk mengatur konfigurasi enkripsi bucket.
$result = $client->putBucketEncryption($request);
// Cetak respons.
printf(
'status code:' . $result->statusCode . PHP_EOL . // Kode status respons HTTP.
'request id:' . $result->requestId // Pengidentifikasi unik permintaan.
);
const OSS = require("ali-oss");
const client = new OSS({
// Atur region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region ke oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Atur bucket ke nama bucket Anda.
bucket: 'yourbucketname'
});
async function putBucketEncryption() {
try {
// Konfigurasikan metode enkripsi untuk bucket.
const result = await client.putBucketEncryption("bucket-name", {
SSEAlgorithm: "AES256", // Contoh ini menunjukkan cara mengatur enkripsi AES256. Jika Anda menggunakan enkripsi KMS, Anda harus menambahkan properti KMSMasterKeyID.
// KMSMasterKeyID: "yourKMSMasterKeyId". Atur ID kunci KMS. Anda dapat mengatur parameter ini jika metode enkripsi adalah KMS. Jika nilai SSEAlgorithm adalah KMS dan Anda menggunakan kunci tertentu untuk enkripsi, Anda harus memasukkan ID kunci. Jika tidak, parameter ini harus kosong.
});
console.log(result);
} catch (e) {
console.log(e);
}
}
putBucketEncryption();
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir 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("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
}
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 titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan titik akhir 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, digunakan algoritma enkripsi AES-256.
config := oss.ServerEncryptionRule{
SSEDefault: oss.SSEDefaultRule{
SSEAlgorithm: "AES256",
},
}
// Mengonfigurasi 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")
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Atur nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Inisialisasi jaringan dan sumber daya lainnya. */
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);
SetBucketEncryptionRequest setrequest(BucketName);
setrequest.setSSEAlgorithm(SSEAlgorithm::KMS);
/* Atur enkripsi sisi server menggunakan 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 jaringan dan sumber daya lainnya. */
ShutdownSdk();
return 0;
}
Metode 2: Atur enkripsi sisi server saat mengunggah objek
Kode berikut memberikan contoh cara mengatur enkripsi sisi server saat mengunggah objek dengan SDK umum. Untuk informasi selengkapnya tentang cara mengatur enkripsi sisi server saat mengunggah objek dengan SDK lainnya, lihat Pengantar SDK Alibaba Cloud.
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 {
// Ambil wilayah China (Hangzhou) sebagai contoh. Tentukan wilayah aktual.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan wilayah yang sesuai dengan titik akhir. Contoh: cn-hangzhou.
String region = "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.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
String objectName = "exampledir/exampleobject.txt";
// Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt.
// Jika Anda tidak menentukan path lengkap file lokal, file diunggah dari path lokal yang sesuai dengan proyek.
String filePath= "D:\\localpath\\examplefile.txt";
// Buat instance OSSClient.
// Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// Secara eksplisit nyatakan penggunaan algoritma tanda tangan V4.
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat instance ObjectMetadata dan atur metode enkripsi sisi server ke AES256.
ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, "AES256");
// Buat instance PutObjectRequest.
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
putObjectRequest.setMetadata(metadata);
// Unggah file.
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + 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 Kesalahan:" + 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();
// Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir 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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
$object = "exampledir/exampleobject.txt";
// Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan path lengkap file lokal, file diunggah dari path lokal yang sesuai dengan proyek.
$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 AES256.
"x-oss-server-side-encryption"=>"AES256",
);
// Panggil metode uploadFile untuk mengunggah file dan berikan objek UploadOptions.
$ossClient->uploadFile($bucket, $object, $filePath, $options);
} catch(OssException $e) {
printf(__FUNCTION__ . ": GAGAL\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . "BERHASIL" . "\n");
Node.js
const OSS = require("ali-oss");
const path = require("path");
const client = new OSS({
// Atur yourregion ke 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 AES256.
"x-oss-server-side-encryption": "AES256",
};
async function put() {
try {
const result = await client.put(
// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
"exampledir/exampleobject.txt",
// Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan path lengkap file lokal, file diunggah dari path lokal yang sesuai dengan proyek.
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())
# Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir 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 Anda tidak menentukan path lengkap file lokal, file diunggah dari path lokal yang sesuai dengan proyek.
local_file_path = 'D:\\examplefile.jpg'
with open(local_file_path, 'rb') as fileobj:
# Metode seek menentukan bahwa operasi baca dan tulis dimulai dari byte ke-1.000. Saat Anda mengunggah file, pengunggahan dimulai dari byte ke-1.000 hingga akhir file.
fileobj.seek(1000, os.SEEK_SET)
# Metode tell mengembalikan posisi saat ini.
current = fileobj.tell()
# Atur metode enkripsi sisi server ke AES256.
headers = {
'x-oss-server-side-encryption': 'AES256',
}
# Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket.
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.
// Atur yourEndpoint ke titik akhir bucket. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan wilayah aktual.
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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
// Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan path lengkap file lokal, file diunggah dari path lokal yang sesuai dengan proyek.
// Atur metode enkripsi sisi server ke AES256.
err = bucket.PutObjectFromFile("D:\\localpath\\examplefile.txt", "D:\\examplefile.jpg", oss.ServerSideEncryption("AES256"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
Gunakan alat baris perintah ossutil
Metode 1: Aktifkan enkripsi sisi server untuk bucket
Anda dapat menggunakan alat baris perintah ossutil untuk mengaktifkan enkripsi sisi server untuk bucket. Untuk menginstal ossutil, lihat Instal ossutil.
Contoh berikut menunjukkan cara mengatur metode enkripsi sisi server ke AES256 untuk bucket yang sudah ada bernama examplebucket.
ossutil api put-bucket-encryption --bucket examplebucket --server-side-encryption-rule "{\"ApplyServerSideEncryptionByDefault\":{\"SSEAlgorithm\":\"AES256\"}}"
Metode 2: Atur enkripsi sisi server saat mengunggah objek
ossutil memungkinkan Anda menentukan metode enkripsi sisi server untuk objek saat mengunggahnya. Untuk menginstal ossutil, lihat Instal ossutil. Contoh berikut menunjukkan cara mengatur metode enkripsi sisi server ke AES256 saat mengunggah objek.
Untuk informasi selengkapnya tentang perintah ini, lihat cp (unggah objek).
Gunakan kunci yang dikelola KMS untuk enkripsi dan dekripsi
Anda dapat menggunakan customer master key (CMK) yang dikelola oleh KMS untuk menghasilkan kunci enkripsi data guna mengenkripsi data. Enkripsi amplop (envelope encryption) memberikan lapisan keamanan tambahan untuk mencegah akses data yang tidak sah. KMS memungkinkan Anda fokus pada fitur bisnis, seperti enkripsi data, dekripsi, dan verifikasi tanda tangan elektronik, tanpa harus berinvestasi besar dalam memastikan kerahasiaan, integritas, dan ketersediaan kunci Anda.
Gambar berikut menunjukkan logika enkripsi SSE-KMS.
Saat menggunakan SSE-KMS, Anda dapat menggunakan jenis kunci berikut:
Gunakan kunci KMS default yang dikelola oleh OSS
OSS menggunakan CMK KMS default untuk menghasilkan kunci berbeda guna mengenkripsi objek berbeda dan secara otomatis mendekripsi objek saat diunduh. Saat pertama kali menggunakan fitur ini, OSS membuat CMK yang dikelola OSS di KMS.
Metode konfigurasi:
Konfigurasikan metode enkripsi untuk bucket
Konfigurasikan metode enkripsi bucket sebagai KMS, tetapi jangan tentukan ID CMK. Semua objek yang diunggah ke bucket ini kemudian dienkripsi secara default.
Konfigurasikan metode enkripsi untuk objek tujuan
Saat mengunggah objek atau memodifikasi metadata-nya, sertakan parameter x-oss-server-side-encryption dalam permintaan dan atur nilainya ke KMS. OSS kemudian menggunakan CMK KMS default dan algoritma enkripsi AES256 untuk mengenkripsi objek. Untuk informasi selengkapnya, lihat PutObject.
Gunakan Bring-Your-Own-Key (BYOK)
Setelah Anda menggunakan material BYOK untuk menghasilkan CMK di Konsol KMS, OSS dapat menggunakan CMK KMS tertentu untuk menghasilkan kunci berbeda guna mengenkripsi objek berbeda. ID CMK disimpan dalam metadata objek terenkripsi. Objek tersebut hanya didekripsi secara otomatis saat pengguna dengan izin dekripsi mengunduhnya.
Material BYOK dapat berasal dari dua sumber:
Material BYOK yang disediakan oleh Alibaba Cloud: Saat membuat kunci di Konsol KMS, pilih KMS sebagai sumber material kunci.
Material BYOK Anda sendiri: Saat membuat kunci di Konsol KMS, pilih External sebagai sumber material kunci dan impor material kunci eksternal sesuai kebutuhan. Untuk informasi selengkapnya tentang cara mengimpor material kunci eksternal, lihat Impor material kunci.
Metode konfigurasi:
Konfigurasikan metode enkripsi untuk bucket
Konfigurasikan metode enkripsi bucket sebagai KMS dan tentukan ID CMK. Semua objek yang diunggah ke bucket ini kemudian dienkripsi secara default.
Konfigurasikan metode enkripsi objek tujuan
Saat mengunggah objek atau memodifikasi metadata-nya, atur parameter x-oss-server-side-encryption ke KMS dan parameter x-oss-server-side-encryption-key-id ke ID CMK tertentu. OSS menggunakan CMK KMS tertentu dan algoritma enkripsi AES256 untuk mengenkripsi objek. Untuk informasi selengkapnya, lihat PutObject.
Gunakan kunci yang dikelola OSS untuk enkripsi dan dekripsi
OSS menghasilkan dan mengelola kunci enkripsi data serta melindunginya dengan langkah-langkah keamanan multi-faktor berkekuatan tinggi. Data dienkripsi menggunakan algoritma Standar Enkripsi Lanjutan (Advanced Encryption Standard/AES) 256 yang menjadi standar industri.
Metode konfigurasi:
Konfigurasikan metode enkripsi untuk bucket
Konfigurasikan metode enkripsi bucket sebagai SSE-OSS dan tentukan algoritma enkripsi sebagai AES256. Semua objek yang diunggah ke bucket ini kemudian dienkripsi secara default.
Konfigurasikan metode enkripsi untuk objek tujuan
Saat mengunggah objek atau memodifikasi metadata-nya, sertakan parameter x-oss-server-side-encryption dalam permintaan dan atur nilainya ke AES256. OSS kemudian menggunakan kunci yang dikelola OSS untuk mengenkripsi objek. Untuk informasi selengkapnya, lihat PutObject.
Operasi API terkait
Operasi di atas diimplementasikan berdasarkan operasi API. Jika aplikasi Anda memiliki persyaratan kustom tinggi, Anda dapat langsung mengirim permintaan REST API. Untuk langsung mengirim permintaan REST API, Anda harus menulis kode secara manual untuk menghitung tanda tangan. Untuk informasi selengkapnya, lihat PutBucketEncryption.
FAQ
Setelah saya mengonfigurasi metode enkripsi untuk bucket, apakah OSS mengenkripsi objek yang sudah ada?
OSS hanya mengenkripsi objek yang diunggah setelah konfigurasi enkripsi sisi server diaktifkan. Objek yang sudah ada tidak dienkripsi. Untuk mengenkripsi objek yang sudah ada, Anda dapat menimpanya menggunakan operasi CopyObject.