Jika Anda menggunakan SDK Alibaba Cloud dan menginstal plug-in rahasia terkelola, Anda dapat menggunakan nama rahasia Resource Access Management (RAM) yang dikelola untuk mengakses layanan cloud tanpa perlu mengetahui pasangan AccessKey atau apakah pasangan tersebut dirotasi. Rahasia RAM yang dikelola menyimpan pasangan AccessKey dari pengguna RAM.
Prinsip
Ketika aplikasi menggunakan plug-in rahasia terkelola, aplikasi hanya perlu merujuk pada nama rahasia RAM yang dikelola. Plug-in mendapatkan nilai rahasia dari Secrets Manager berdasarkan nama rahasia dan menyimpannya dalam memori aplikasi. Anda juga dapat menentukan frekuensi pengambilan nilai rahasia oleh plug-in dari Secrets Manager serta penyegaran cache.
Saat aplikasi menggunakan SDK Alibaba Cloud, permintaan ke layanan cloud dimulai dengan menggunakan pasangan AccessKey yang disimpan oleh plug-in.
Rahasia RAM yang disimpan mungkin kedaluwarsa, biasanya ketika administrator memutar rahasia di Secrets Manager sebagai tanggapan atas insiden keamanan. Jika Anda menggunakan rahasia RAM yang tidak valid untuk mengakses layanan Alibaba Cloud, pengecualian akan terjadi di aplikasi. Jika kode kesalahan InvalidAccessKeyId.NotFound atau InvalidAccessKeyId dikembalikan, plug-in segera menyegarkan cache rahasia RAM dan mencoba kembali permintaan yang gagal.
Jika kode kesalahan lain dikembalikan saat menggunakan rahasia RAM yang tidak valid untuk mengakses beberapa layanan cloud, Anda dapat memodifikasi penanganan kedaluwarsa default. Untuk informasi lebih lanjut, lihat Contoh 2: Konfigurasi Ulang Proses Penanganan Pemicu Kedaluwarsa Pasangan AccessKey.
SDK Alibaba Cloud yang Didukung
Alibaba Cloud menyediakan berbagai SDK. Plug-in rahasia terkelola untuk setiap SDK harus dikembangkan secara terpisah. Tabel berikut mencantumkan SDK yang telah memiliki plug-in rahasia terkelola.
| SDK Alibaba Cloud | Versi | Plug-in rahasia terkelola |
| Alibaba Cloud SDK for Java | 4.3.2 hingga 4.5.17 | Plug-in rahasia terkelola untuk Alibaba Cloud SDK for Java |
| OSS Java SDK | 2.1.0 hingga 3.10.2 | Plug-in rahasia terkelola untuk OSS SDK for Java |
| ONS Java Client | 1.8.5.Final hingga 1.8.7.4.Final | Plug-in rahasia terkelola untuk ONS Java Client |
Jika Anda ingin menggunakan plug-in rahasia terkelola untuk SDK lainnya, hubungi dukungan teknis melalui ticket.
Instal plug-in rahasia terkelola
Alibaba Cloud menyediakan plug-in rahasia terkelola untuk berbagai SDK Alibaba Cloud untuk Java. Untuk informasi lebih lanjut tentang cara menginstal plug-in, kunjungi aliyun-sdk-managed-credentials-providers-java.
Anda dapat menginstal plug-in rahasia terkelola untuk SDK Alibaba Cloud untuk Java dengan menambahkan dependensi Maven. Contoh kode berikut menunjukkan cara menginstal plug-in rahasia terkelola untuk OSS SDK for Java dengan menambahkan dependensi Maven:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-oss-managed-credentials-provider</artifactId>
<version>x.x.x</version>
</dependency>Contoh 1: Gunakan rahasia RAM yang dikelola dalam SDK Alibaba Cloud
- Konfigurasikan plug-in rahasia terkelola untuk SDK Alibaba Cloud.
Anda dapat menggunakan file konfigurasi managed_credentials_providers.properties untuk menentukan metode pengambilan rahasia RAM yang dikelola dari Secrets Manager. Kunci klien titik akses aplikasi (AAP) digunakan dalam contoh ini. Untuk informasi lebih lanjut tentang cara membuat kunci klien, lihat Mengikat Kunci Klien ke AAP.
## Tentukan metode akses. credentials_type=client_key ## Baca kata sandi dekripsi kunci klien. Anda dapat membaca kata sandi dari variabel lingkungan atau file. client_key_password_from_env_variable=#nama variabel lingkungan kata sandi kunci privat klien Anda# client_key_password_from_file_path=#jalur file kata sandi kunci privat klien Anda# ## Baca file kunci privat kunci klien. client_key_private_key_path=#jalur file kunci privat klien Anda# ## Tentukan wilayah KMS. cache_client_region_id=[{"regionId":"#regionId#"}] - Gunakan rahasia RAM yang dikelola untuk mengakses layanan cloud.
- Metode 1: Gunakan metode enkode. Dalam contoh ini, rahasia RAM yang dikelola digunakan untuk mengakses OSS.
import com.aliyun.kms.secretsmanager.plugin.oss.ProxyOSSClientBuilder; import com.aliyun.oss.OSS; import com.aliyun.oss.model.Bucket; import java.util.List; public class OssPluginSample { public static void main(String[] args) throws Exception { String secretName = "******"; String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Buat klien OSS. OSS ossClient = new ProxyOSSClientBuilder().build(endpoint, secretName); List<Bucket> buckets = ossClient.listBuckets(); for (Bucket bucket : buckets) { if (bucket != null) { // lakukan sesuatu dengan bucket } } // Matikan klien untuk melepaskan sumber daya yang terkait dengan plug-in. ossClient.shutdown(); } } - Metode 2: Gunakan Spring beans. Dalam contoh ini, SDK OSS diintegrasikan dengan sistem Anda.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="proxyOSSClientBuilder" class="com.aliyun.kms.secretsmanager.plugin.oss.ProxyOSSClientBuilder" scope="singleton" /> </beans>
- Metode 1: Gunakan metode enkode. Dalam contoh ini, rahasia RAM yang dikelola digunakan untuk mengakses OSS.
Contoh 2: Konfigurasi ulang proses penanganan pemicu kedaluwarsa pasangan AccessKey
Secara default, plug-in rahasia terkelola memanggil operasi AKExpireHandler untuk menentukan apakah rahasia yang tidak valid digunakan untuk mengakses layanan cloud. Jika rahasia yang tidak valid digunakan, plug-in mendapatkan rahasia terbaru dari Secrets Manager dan mencoba kembali akses ke layanan cloud.
Contoh kode berikut mendefinisikan operasi AKExpireHandler:
package com.aliyun.kms.secretsmanager.plugin.common;
public interface AKExpireHandler<TException> {
/**
* Tentukan apakah pengecualian disebabkan oleh kedaluwarsa pasangan AccessKey.
*
* @param e
* @return
*/
boolean judgeAKExpire(TException e);
}Tentukan apakah kode kesalahan yang dikembalikan oleh layanan cloud disebabkan oleh penggunaan pasangan AccessKey yang tidak valid. Selesaikan masalah dan panggil operasi AKExpireHandler lagi. Contoh:
import com.aliyun.kms.secretsmanager.plugin.sdkcore.ProxyAcsClient;
import com.aliyun.kms.secretsmanager.plugin.common.AKExpireHandler;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import java.util.HashSet;
import java.util.Set;
public class SdkRetrySample {
public static void main(String[]args) throws Exception{
String region="cn-hangzhou";
String secretName="******";
// Dapatkan klien dari SDK Alibaba Cloud dan dapatkan rahasia lagi berdasarkan kode kesalahan tertentu.
IAcsClient client = new ProxyAcsClient(
region, secretName, new CustomHandler());
// Kode bisnis.
invoke(client,region);
// Matikan klien untuk melepaskan sumber daya yang terkait dengan plug-in.
client.shutdown();
}
}
class CustomHandler implements AKExpireHandler<ClientException> {
private Set<String> errorCodeSet;
public CustomerHandler() {
errorCodeSet = new HashSet<String>();
// Tambahkan kode kesalahan untuk memungkinkan klien mendapatkan rahasia RAM yang dikelola dari Secrets Manager lagi.
errorCodeSet.add("InvalidAccessKeyId.NotFound");
errorCodeSet.add("InvalidAccessKeyId");
}
@Override
public boolean judgeAKExpire(ClientException e) {
return errorCodeSet.contains(e.getErrCode());
}
}