Tablestore mendukung algoritma tanda tangan V4 untuk melindungi pasangan AccessKey. Tablestore menggunakan kunci turunan yang dihasilkan oleh algoritma tanda tangan V4 sebagai pengganti pasangan AccessKey untuk otentikasi identitas, sehingga mengurangi risiko kebocoran pasangan AccessKey. Jika kunci turunan bocor, hanya sumber daya dalam layanan tertentu di wilayah tertentu yang terpengaruh pada hari kebocoran tersebut. Kunci turunan secara otomatis kedaluwarsa dan menjadi tidak valid pada hari berikutnya.
Informasi latar belakang
Algoritma tanda tangan V4 menyediakan metode otentikasi baru. Tanda tangan V4 adalah string yang dihitung berdasarkan rahasia AccessKey dari akun Alibaba Cloud atau pengguna RAM, tanggal, wilayah, dan kode produk.
Jika Anda menggunakan tanda tangan V4 dan salah satu tanda tangan dicuri, wilayah dan layanan lain dalam akun Alibaba Cloud atau pengguna RAM tidak akan terpengaruh. Tanda tangan V4 yang dicuri berlaku selama tidak lebih dari satu hari. Anda dapat menggunakan tanda tangan V4 untuk memastikan keamanan pasangan AccessKey Anda.
Anda dapat menggunakan tanda tangan V4 dan menjaga kerahasiaan pasangan AccessKey untuk memastikan keamanannya. Sebagai contoh, Anda dapat menyimpan pasangan AccessKey dalam variabel lingkungan di kode.
Proses permintaan
Klien menggunakan algoritma tanda tangan V4 untuk menghitung pasangan AccessKey guna menghasilkan kunci turunan, lalu menggunakan kunci turunan untuk memulai permintaan.
Setelah server menerima permintaan, server menggunakan kunci turunan untuk mengotentikasi pengguna.
Setelah otentikasi identitas berhasil, server memproses permintaan dan mengembalikan hasil pemrosesan.
CatatanJika otentikasi identitas gagal, server menolak akses dari klien.
Klien menerima hasil pemrosesan yang dikembalikan oleh server.
Contoh kode
SDK Tablestore untuk Java V5.16.1 dan versi setelahnya mendukung algoritma tanda tangan V4. Sebelum menggunakan algoritma ini, pastikan bahwa SDK yang Anda gunakan mendukungnya.
Menggunakan pasangan AccessKey untuk inisialisasi
Dalam contoh ini, pasangan AccessKey dari akun Alibaba Cloud atau pengguna RAM digunakan untuk menggambarkan cara mengonfigurasi kredensial akses. Untuk informasi lebih lanjut, lihat Bagaimana cara memperoleh pasangan AccessKey?
Berikut ini adalah contoh kode yang menunjukkan cara menggunakan tanda tangan V4 untuk menginisialisasi klien Tablestore, menanyakan daftar tabel data dalam suatu instance, dan menampilkan daftar tabel data di konsol Tablestore:
Pada Contoh 1, Anda hanya perlu memberikan pasangan AccessKey. SDK Tablestore menghitung kunci turunan. Anda tidak perlu memelihara kunci turunan secara manual karena SDK Tablestore secara otomatis memperbarui kunci turunan ketika kedaluwarsa.
Pada Contoh 2, Anda memberikan pasangan AccessKey (AccessKey) dan kunci turunan (v4 SigningAccessKey). Kunci turunan secara otomatis kedaluwarsa pada hari berikutnya. Anda harus mengembangkan mekanisme untuk memperbarui kunci turunan secara otomatis. Jika tidak, Anda tidak dapat mengakses Tablestore setelah kunci turunan kedaluwarsa.
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import static com.alicloud.openservices.tablestore.core.Constants.PRODUCT;
import static com.alicloud.openservices.tablestore.core.Constants.SIGNING_KEY_SIGN_METHOD;
public class InitClientV4 {
public static void main(String[] args) {
// Tentukan wilayah tempat instance yang ingin Anda akses berada. Contoh: cn-hangzhou.
final String region = "yourRegion";
// Tentukan nama instance.
final String instanceName = "yourInstanceName";
// Tentukan titik akhir instance.
final String endpoint = "yourEndpoint";
// Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan sistem.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
{
/**
* Contoh 1: Gunakan ID AccessKey asli dan rahasia AccessKey untuk membuat {@link DefaultCredentials } dan kemudian menghasilkan {@link V4Credentials }.
*/
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
/**
* menggunakan {@link V4Credentials } untuk menginisialisasi klien tableStore
*/
SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// lakukan sesuatu
client.listTable().getTableNames().forEach(System.out::println);
// matikan klien tableStore
client.shutdown();
}
{
/**
* Contoh 2: Gunakan pasangan AccessKey dan kunci turunan untuk membuat {@link V4Credentials }.
*/
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String signDate = dateFormat.format(new Date()); // Nilai contoh parameter signDate: 20230527
String v4SigningAccessKey = CalculateV4SigningKeyUtil.finalSigningKeyString(accessKeySecret, signDate, region, PRODUCT, SIGNING_KEY_SIGN_METHOD); // Kunci turunan.
V4Credentials credentialsV4 = new V4Credentials(accessKeyId, v4SigningAccessKey, region, signDate);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
/**
* menggunakan {@link V4Credentials } untuk menginisialisasi klien tableStore
*/
SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// lakukan sesuatu
client.listTable().getTableNames().forEach(System.out::println);
// matikan klien tableStore
client.shutdown();
}
}
}Menggunakan STS untuk inisialisasi
Untuk informasi tentang cara memperoleh kredensial akses sementara dari Security Token Service (STS), lihat Gunakan kredensial akses sementara yang diperoleh dari STS untuk mengakses Tablestore.
Berikut ini adalah contoh kode yang menunjukkan cara menggunakan tanda tangan V4 untuk menginisialisasi klien Tablestore, menanyakan daftar tabel data dalam suatu instance, dan menampilkan daftar tabel data di konsol Tablestore:
Pada Contoh 1, Anda hanya perlu memberikan kredensial akses sementara yang diperoleh dari STS. SDK Tablestore menghitung dan menghasilkan kunci turunan. Anda tidak perlu memelihara kunci turunan secara manual karena SDK Tablestore secara otomatis memperbarui kunci turunan ketika kedaluwarsa.
Pada Contoh 2, Anda memberikan kredensial akses sementara yang diperoleh dari STS dan kunci turunan (v4 SigningAccessKey). Kunci turunan secara otomatis kedaluwarsa pada hari berikutnya. Anda harus mengembangkan mekanisme untuk memperbarui kunci turunan secara otomatis. Jika tidak, Anda tidak dapat mengakses Tablestore setelah kunci turunan kedaluwarsa.
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import static com.alicloud.openservices.tablestore.core.Constants.PRODUCT;
import static com.alicloud.openservices.tablestore.core.Constants.SIGNING_KEY_SIGN_METHOD;
public class InitClientV4 {
public static void main(String[] args) {
// Tentukan wilayah tempat instance yang ingin Anda akses berada. Contoh: cn-hangzhou.
final String region = "yourRegion";
// Tentukan nama instance.
final String instanceName = "yourInstanceName";
// Tentukan titik akhir instance.
final String endpoint = "yourEndpoint";
// Dapatkan ID AccessKey sementara, rahasia AccessKey sementara, dan token keamanan dari variabel lingkungan.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
{
/**
* Contoh 1: Gunakan ID AccessKey asli, rahasia AccessKey, dan token keamanan untuk membuat {@link DefaultCredentials } dan kemudian menghasilkan {@link V4Credentials }.
*/
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
/**
* menggunakan {@link V4Credentials } untuk menginisialisasi klien tableStore
*/
SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// lakukan sesuatu
client.listTable().getTableNames().forEach(System.out::println);
// matikan klien tableStore
client.shutdown();
}
{
/**
* Contoh 2: Gunakan pasangan AccessKey dan kunci turunan untuk membuat {@link V4Credentials }.
*/
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String signDate = dateFormat.format(new Date()); // Nilai contoh parameter signDate: 20230527
String v4SigningAccessKey = CalculateV4SigningKeyUtil.finalSigningKeyString(accessKeySecret, signDate, region, PRODUCT, SIGNING_KEY_SIGN_METHOD);
V4Credentials credentialsV4 = new V4Credentials(accessKeyId, v4SigningAccessKey, securityToken, region, signDate);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
/**
* menggunakan {@link V4Credentials } untuk menginisialisasi klien tableStore
*/
SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// lakukan sesuatu
client.listTable().getTableNames().forEach(System.out::println);
// matikan klien tableStore
client.shutdown();
}
}
}