Menggunakan pasangan AccessKey pengguna RAM (Resource Access Management) untuk mengakses OSS lebih aman dibandingkan menggunakan kredensial akun root Alibaba Cloud Anda, karena Anda hanya memberikan izin yang benar-benar dibutuhkan oleh pengguna RAM tersebut.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Akun Alibaba Cloud dengan akses administrator RAM
Bucket OSS untuk mengunggah objek
Langkah 1: Buat pengguna RAM
Masuk ke Konsol RAM menggunakan Akun Alibaba Cloud Anda atau sebagai administrator RAM.
Di panel navigasi sebelah kiri, pilih Identities > Users.
Pada halaman Users, klik Create User.
Pada bagian User Account Information, konfigurasikan bidang-bidang berikut:
CatatanUntuk membuat beberapa pengguna RAM sekaligus, klik Add User.
Field Description Logon Name Maksimal 64 karakter. Dapat berisi huruf, angka, titik (.), tanda hubung (-), dan garis bawah (_). Display Name Maksimal 128 karakter. Tag Klik ikon edit dan masukkan kunci tag serta nilai tag. Tag membantu Anda mengkategorikan dan mengelola pengguna RAM. Pada bagian Access Mode, pilih Using permanent AccessKey to access, lalu klik OK.
Klik Copy untuk menyimpan pasangan AccessKey.
PentingRahasia AccessKey hanya ditampilkan saat pasangan tersebut pertama kali dibuat. Rahasia tersebut tidak dapat diambil kembali di kemudian hari. Salin baik ID AccessKey maupun Rahasia AccessKey ke lokasi yang aman sekarang. Jika Anda kehilangan rahasia tersebut, Anda harus membuat pasangan AccessKey baru.
Langkah 2: Berikan izin kepada pengguna RAM untuk mengunggah objek
Buat kebijakan kustom
Di panel navigasi sebelah kiri, pilih Permissions > Policies.
Pada halaman Policies, klik Create Policy.
Pada halaman Create Policy, klik tab JSON dan masukkan dokumen kebijakan berikut. Contoh ini memberikan izin
oss:PutObjectpada direktoriexampledirdi dalamexamplebucket.PeringatanContoh ini hanya sebagai referensi. Konfigurasikan kebijakan RAM detail halus sesuai kebutuhan aktual Anda untuk menghindari pemberian izin berlebihan. Untuk detailnya, lihat Contoh 9: Gunakan RAM atau STS untuk memberi otorisasi pengguna mengakses resource OSS.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": "acs:oss:*:*:examplebucket/exampledir/*" } ] }Klik OK.
Tetapkan Policy Name menjadi
RamTestPolicy, lalu klik OK.
Sambungkan kebijakan ke pengguna RAM
Di panel navigasi sebelah kiri, pilih Identities > Users.
Pada halaman Users, temukan pengguna RAM tersebut dan klik Add Permissions di kolom Actions.
Pada panel Grant Permission, klik tab Custom Policy, pilih
RamTestPolicy, lalu klik OK.
Langkah 3: Unggah objek menggunakan pasangan AccessKey pengguna RAM
Contoh berikut mengunggah file lokal (examplefile.txt) ke exampledir/exampleobject.txt di dalam examplebucket, menggunakan Java SDK dengan Signature Version 4.
Atur variabel lingkungan
Atur pasangan AccessKey sebagai variabel lingkungan agar SDK memuat kredensial tanpa melakukan hardcoding di dalam kode Anda.
Linux/macOS:
setx OSS_ACCESS_KEY_ID "<your-accesskey-id>"
setx OSS_ACCESS_KEY_SECRET "<your-accesskey-secret>"Windows (Command Prompt):
setx OSS_ACCESS_KEY_ID "<your-accesskey-id>"
setx OSS_ACCESS_KEY_SECRET "<your-accesskey-secret>"Ganti <your-accesskey-id> dan <your-accesskey-secret> dengan nilai yang Anda salin pada Langkah 1.
Unggah objek
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {
// Titik akhir untuk wilayah China (Hangzhou). Ganti dengan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Muat kredensial dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Nama bucket.
String bucketName = "examplebucket";
// Jalur lengkap objek di dalam bucket. Jangan sertakan nama bucket.
String objectName = "exampledir/exampleobject.txt";
// Jalur lengkap ke file lokal yang akan diunggah.
String filePath = "D:\\localpath\\examplefile.txt";
// Wilayah tempat bucket berada.
String region = "cn-hangzhou";
// Buat instans OSSClient dengan Signature Version 4.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("OSS menolak permintaan: " + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Kesalahan client (misalnya, masalah jaringan): " + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Untuk contoh dalam bahasa lain, lihat:
FAQ
Di mana saya bisa melihat ID AccessKey saya? Apakah saya bisa mengambil kembali Rahasia AccessKey nanti?
Saya mendapatkan kesalahan AccessDenied saat mengunggah. Apa yang harus saya periksa?
Bagaimana cara mengidentifikasi jenis kesalahan tertentu?
Saya mendapatkan kesalahan NoSuchBucket. Apa yang salah?
Saya mendapatkan pesan "The bucket you are attempting to access must be addressed using the specified endpoint." Apa yang salah?
Langkah selanjutnya
Untuk berbagi objek yang telah diunggah dengan pihak ketiga tanpa mengekspos kredensial Anda, hasilkan URL yang ditandatangani (presigned URLs) yang memungkinkan akses sementara. Lihat Unduh objek menggunakan URL yang ditandatangani.