Topik ini menjelaskan cara menggunakan Alibaba Cloud Security Token Service (STS) dan URL yang ditandatangani sebelumnya (presigned URLs) untuk memberikan akses sementara ke sumber daya Object Storage Service (OSS).
Catatan
Anda harus menetapkan periode validitas baik untuk kredensial sementara STS maupun presigned URL. Jika Anda menggunakan kredensial sementara STS untuk menghasilkan presigned URL, periode validitas yang lebih pendek di antara keduanya yang berlaku. Misalnya, jika periode validitas kredensial sementara STS ditetapkan menjadi 1.200 detik dan periode validitas presigned URL menjadi 3.600 detik, maka presigned URL akan kedaluwarsa setelah 1.200 detik.
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou) sebagai contoh. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan titik akhir.
Topik ini memberikan contoh pembuatan klien menggunakan nama domain OSS. Untuk informasi tentang cara membuat OSSClient menggunakan nama domain kustom atau STS, lihat Inisialisasi klien.
Gunakan STS untuk otorisasi temporary
Anda dapat menggunakan Alibaba Cloud Security Token Service (STS) untuk memberikan akses sementara ke OSS. STS adalah layanan web yang menyediakan token akses sementara bagi pengguna komputasi awan. Dengan STS, Anda dapat menerbitkan kredensial akses sementara dengan periode validitas dan izin yang dapat dikustomisasi kepada aplikasi pihak ketiga atau sub-user. Sub-user adalah pengguna yang identitasnya Anda kelola. Untuk informasi selengkapnya mengenai STS, lihat Apa itu STS?.
Keuntungan menggunakan STS adalah sebagai berikut:
Anda tidak perlu mengekspos pasangan Kunci Akses jangka panjang Anda ke aplikasi pihak ketiga. Sebagai gantinya, Anda dapat menghasilkan token akses sementara dengan izin akses dan periode validitas tertentu untuk diberikan ke aplikasi tersebut.
Anda tidak perlu mencabut izin secara manual. Akses akan otomatis dicabut ketika token kedaluwarsa.
Langkah-langkah berikut menjelaskan cara menggunakan STS untuk memberikan akses sementara ke OSS:
Dapatkan kredensial akses sementara
Kredensial akses sementara mencakup pasangan AccessKey sementara (ID AccessKey dan Rahasia AccessKey) serta token keamanan. Periode validitas diukur dalam satuan detik. Nilai minimum adalah 900 detik. Nilai maksimum adalah durasi sesi maksimum yang ditetapkan untuk role RAM. Untuk informasi selengkapnya, lihat Tetapkan durasi sesi maksimum untuk role RAM.
Anda dapat memperoleh kredensial akses sementara dengan salah satu dari dua cara berikut:
Metode 1
Panggil operasi AssumeRole dari STS.
Metode 2
Gunakan kredensial akses sementara untuk mengunggah file.
require 'aliyun/sts'
require 'aliyun/oss'
sts = Aliyun::STS::Client.new(
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan ARN role dan nama sesi kustom.
token = sts.assume_role('role-arn', 'session-name')
client = Aliyun::OSS::Client.new(
# Titik akhir China (Hangzhou) digunakan sebagai contoh. Sesuaikan titik akhir berdasarkan wilayah Anda.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# Pasangan AccessKey temporary (ID AccessKey dan Rahasia AccessKey) yang diperoleh dari STS.
access_key_id: 'token.access_key_id',
access_key_secret: 'token.access_key_secret',
# Token keamanan yang diperoleh dari STS.
sts_token: 'token.security_token')
# Tentukan nama bucket. Contohnya, examplebucket.
bucket = client.get_bucket('examplebucket')
# Unggah file.
bucket.put_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')Gunakan presigned URL untuk otorisasi temporary
Catatan
Ketika SDK menghasilkan presigned URL, SDK tersebut menggunakan informasi kunci yang disimpan secara lokal untuk menghitung signature berdasarkan algoritma tertentu. SDK kemudian menambahkan signature tersebut ke URL guna memastikan validitas dan keamanannya. Proses perhitungan signature dan penyusunan URL ini dilakukan di sisi klien dan tidak melibatkan permintaan jaringan. Oleh karena itu, pemanggil tidak memerlukan izin khusus untuk menghasilkan presigned URL. Namun, untuk memastikan bahwa pengguna pihak ketiga dapat melakukan operasi yang dimaksudkan pada sumber daya menggunakan presigned URL tersebut, Anda harus memastikan bahwa identitas yang digunakan untuk menghasilkan URL memiliki izin yang diperlukan.
Sebagai contoh, untuk mengunduh atau melihat pratinjau file menggunakan presigned URL, diperlukan izin oss:GetObject.
Anda dapat menghasilkan presigned URL dan memberikan URL tersebut kepada pengunjung untuk akses sementara. Saat menghasilkan presigned URL, Anda dapat menentukan periode validitas URL tersebut untuk membatasi rentang waktu pengunjung dapat mengakses data tertentu.
Untuk menghasilkan presigned URL yang digunakan untuk mengakses sumber daya melalui HTTPS, atur protokol pada endpoint ke HTTPS.
Presigned URL yang dihasilkan menggunakan kode contoh berikut mungkin berisi tanda plus (
+). Dalam kasus ini, ganti tanda plus (+) pada URL dengan%2B. Jika tidak, presigned URL tersebut mungkin tidak dapat digunakan untuk mengakses objek seperti yang diharapkan.
Hasilkan presigned URL dan gunakan untuk mengunduh file
Hasilkan presigned URL untuk mengunduh file.
require 'aliyun/oss' client = Aliyun::OSS::Client.new( # Titik akhir China (Hangzhou) digunakan sebagai contoh. Sesuaikan titik akhir berdasarkan wilayah Anda. endpoint: 'https://oss-cn-hangzhou.aliyuncs.com', # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. access_key_id: ENV['OSS_ACCESS_KEY_ID'], access_key_secret: ENV['OSS_ACCESS_KEY_SECRET'] ) # Tentukan nama bucket. Contohnya, examplebucket. bucket = client.get_bucket('examplebucket') # Hasilkan presigned URL dan tetapkan periode validitasnya menjadi 1 jam (3600 detik). puts bucket.object_url('my-object', true, 3600)- Unduh objek menggunakan signed URL pada perangkat seluler atau browser.
// Masukkan signed URL yang dihasilkan. String url = ""; OkHttpClient client = new OkHttpClient(); // Gunakan signed URL untuk mengunduh objek. Request getRequest = new Request.Builder() .url(url) .get() .build(); client.newCall(getRequest).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.code() == 203 || response.code() >= 300) { Log.d("download", "fail"); Log.d("download", response.body().string()); return; } // Objek berhasil diunduh. InputStream inputStream = response.body().byteStream(); byte[] buffer = new byte[2048]; int len; while ((len = inputStream.read(buffer)) != -1) { // Proses data yang diunduh. Misalnya, tampilkan citra atau lakukan operasi penulisan pada objek. } } });// Gunakan signed URL untuk mengunduh objek. NSURL * url = [NSURL URLWithString:urlString]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSURLSession * session = [NSURLSession sharedSession]; NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (error) { NSLog(@"download error: %@", error); return; } else if (((NSHTTPURLResponse*)response).statusCode == 203 || ((NSHTTPURLResponse*)response).statusCode >= 300) { NSString *body = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"download error: %@", body); return; } NSLog(@"download success"); }]; [sessionTask resume];// Anda juga dapat menggunakan atribut download pada tag <a> halaman HTML atau window.open dari web API untuk mendapatkan URL objek.
Referensi
Untuk penggunaan detail dan deskripsi parameter terkait pemberian akses sementara menggunakan STS, lihat dokumentasi API.
Untuk informasi selengkapnya tentang cara menambahkan informasi signature ke URL dan memberikan presigned URL kepada pihak ketiga guna memberikan akses otorisasi, lihat Signature Version 1.