Anda dapat memberikan izin tertentu kepada pengguna Resource Access Management (RAM), sehingga pengguna tersebut dapat menggunakan pasangan AccessKey untuk mengakses sumber daya Object Storage Service (OSS) secara jangka panjang. Metode ini lebih aman dibandingkan menggunakan pasangan AccessKey akun Alibaba Cloud.
Langkah 1: Membuat pengguna RAM
Masuk ke Konsol RAM menggunakan akun Alibaba Cloud atau sebagai administrator RAM.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Users, klik Create User.

Pada bagian User Account Information di halaman Create User, konfigurasikan parameter berikut:
Logon Name: Nama logon dapat terdiri dari hingga 64 karakter dan boleh berisi huruf, angka, titik (.), tanda hubung (-), serta garis bawah (_).
Display Name: Nama tampilan dapat terdiri dari hingga 128 karakter.
Tag: Klik ikon
lalu masukkan kunci tag dan nilai tag. Penambahan tag membantu Anda mengkategorikan dan mengelola pengguna RAM.
CatatanAnda dapat mengklik Add User untuk membuat beberapa pengguna RAM sekaligus.
Pada bagian Access Method, pilih Use Permanent AccessKey For Access, lalu klik OK.
Klik Copy untuk menyimpan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey).
Langkah 2: Memberikan izin kepada pengguna RAM untuk mengunggah file
Buat kebijakan kustom untuk memberikan izin mengunggah file.
Di panel navigasi sebelah kiri, pilih .
Klik Create Policy.
Pada halaman Create Policy, klik tab Edit Script. Di editor dokumen kebijakan, berikan izin peran untuk mengunggah file ke direktori `exampledir` dalam bucket `examplebucket`. Konfigurasi contoh berikut hanya sebagai referensi.
PeringatanContoh berikut hanya sebagai referensi. Konfigurasikan kebijakan otorisasi yang lebih detail halus sesuai kebutuhan untuk mencegah risiko keamanan akibat izin berlebihan. Untuk informasi selengkapnya tentang cara mengonfigurasi kebijakan otorisasi detail halus, lihat Memberikan izin kepada pengguna lain menggunakan RAM atau STS.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": "acs:oss:*:*:examplebucket/exampledir/*" } ] }Setelah mengonfigurasi kebijakan, klik Continue To Edit Basic Information.
Pada bagian Basic Information, atur Name kebijakan menjadi RamTestPolicy, lalu klik OK.
Lampirkan kebijakan kustom ke pengguna RAM.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Users, temukan pengguna RAM tujuan.
Pada baris pengguna RAM tersebut, klik Add Permissions.
Pada halaman Add Permissions, klik tab Custom Policy dan pilih kebijakan kustom RamTestPolicy.
Klik OK.
Langkah 3: Menggunakan pasangan AccessKey pengguna RAM untuk mengunggah file ke OSS
Kode contoh Java berikut menunjukkan cara mengunggah file lokal examplefile.txt sebagai objek bernama exampleobject.txt ke direktori exampledir dalam bucket examplebucket.
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 {
// Dalam contoh ini, titik akhir wilayah Tiongkok (Hangzhou) digunakan. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh 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. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt.
String objectName = "exampledir/exampleobject.txt";
// Tentukan path lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt.
// Secara default, jika path file lokal tidak ditentukan, file lokal diunggah dari path proyek tempat program contoh berada.
String filePath= "D:\\localpath\\examplefile.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya terkait 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 {
// Buat objek PutObjectRequest.
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
// Kode contoh berikut memberikan contoh cara menentukan kelas penyimpanan dan ACL objek saat Anda mengunggah objek:
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// Unggah file lokal.
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai 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();
}
}
}
}Untuk contoh kit pengembangan perangkat lunak (SDK) dalam bahasa lain, lihat:
FAQ
Bagaimana cara melihat informasi AccessKey pengguna RAM? Apakah saya dapat melihat rahasia AccessKey lama?
Apa yang harus saya lakukan jika muncul error "AccessDenied" saat menggunakan pasangan AccessKey pengguna RAM untuk mengunggah file?
Bagaimana cara mengetahui jenis error spesifik jika terjadi error?
Bagaimana cara menangani error NoSuchBucket?
Bagaimana cara menangani error The bucket you are attempting to access must be addressed using the specified endpoint.?
Referensi
Setelah Anda mengunggah file ke OSS, Anda dapat menghasilkan URL yang ditandatangani untuk membagikan file tersebut kepada pihak ketiga guna pratinjau atau unduh. Untuk informasi selengkapnya, lihat Menggunakan URL pra-tandatangan untuk mengunduh atau melihat pratinjau file.