Setelah menyimpan AccessKey Pengguna RAM di Key Management Service (KMS), Anda dapat menginstal plug-in kredensial RAM. Saat menggunakan Alibaba Cloud SDK, cukup merujuk nama kredensial RAM untuk mengambil AccessKey guna autentikasi API—tanpa perlu mengelola atau memutar AccessKey secara manual. Topik ini menjelaskan cara kerja plug-in kredensial RAM, serta cara menginstal dan menggunakannya.
Cara kerja
Plug-in kredensial RAM mengambil nilai kredensial RAM dari KMS berdasarkan nama kredensial tersebut dan menyimpannya dalam cache di memori aplikasi. Saat aplikasi menggunakan Alibaba Cloud SDK, permintaan dikirim ke layanan Alibaba Cloud menggunakan AccessKey dari cache lokal plug-in.
Jika AccessKey yang di-cache secara lokal menjadi tidak valid karena rotasi kredensial atau alasan lain, plug-in segera mengambil kembali kredensial dari KMS dan memperbarui cache lokal. Berdasarkan perilaku pengulangan (retry) yang dikonfigurasi, plug-in kemudian mencoba ulang panggilan layanan Alibaba Cloud dengan kredensial RAM yang baru diperoleh. Secara default, plug-in mengenali AccessKey tidak valid berdasarkan kode kesalahan InvalidAccessKeyId dan InvalidAccessKeyId.NotFound dalam respons layanan.
Alibaba Cloud SDK yang didukung
KMS menyediakan plug-in kredensial RAM untuk Alibaba Cloud SDK yang tercantum dalam tabel berikut.
Plug-in kredensial RAM dikembangkan secara terpisah untuk setiap Alibaba Cloud SDK. Jika plug-in RAM tidak memenuhi kebutuhan Anda, Anda dapat menggunakan credentials client atau Alibaba Cloud SDK. Untuk informasi selengkapnya tentang setiap SDK, lihat Referensi SDK. Anda juga dapat menghubungi helpdesk untuk memberikan masukan.
SDK untuk Java (hanya mendukung Java 8 ke atas)
Nama Alibaba Cloud SDK | Nama modul plug-in kredensial RAM |
SDK untuk Python
Nama Alibaba Cloud SDK | Nama modul plug-in kredensial RAM | Catatan |
Hanya V1.0 yang didukung. V2.0 tidak didukung. Untuk V2.0, gunakan credentials client atau Alibaba Cloud SDK. | ||
Tidak ada. |
SDK untuk Go
Nama Alibaba Cloud SDK | Nama modul plug-in kredensial RAM | Catatan |
Hanya V1.0 yang didukung. V2.0 tidak didukung. Untuk V2.0, gunakan credentials client atau Alibaba Cloud SDK. | ||
Tidak ada. |
Langkah 1: Buat kredensial akses
Skenario 1: Dapatkan nilai kredensial melalui gateway bersama
Skenario ini berlaku untuk jenis jaringan publik dan jaringan VPC. Kredensial akses yang didukung mencakup role RAM instans ECS dan ClientKey.
Role RAM instans ECS
ClientKey
Skenario 2: Dapatkan nilai kredensial melalui gateway khusus (tidak disarankan)
Skenario ini berlaku untuk jenis jaringan pribadi KMS. Hanya ClientKey yang didukung sebagai kredensial akses.
Langkah 2: Konfigurasikan parameter runtime plug-in kredensial RAM dalam file konfigurasi
Plug-in kredensial RAM memerlukan file konfigurasi untuk mengatur parameter runtime. Anda dapat membuat file konfigurasi bernama managed_credentials_providers.properties di direktori runtime aplikasi Anda dan menambahkan konten berdasarkan metode autentikasi.
Jika aplikasi Anda tidak dapat membaca file managed_credentials_providers.properties secara otomatis, lihat contoh kode untuk mempelajari cara membaca file tersebut dengan mengatur jalur file dalam kode Anda.
Role RAM instans ECS
Berikut adalah isi file konfigurasi.
credentials_type=ecs_ram_role
## Nama Role RAM ECS
credentials_role_name=#credentials_role_name#
## Wilayah layanan KMS terkait
cache_client_region_id=[{"regionId":"#regionId#"}]ClientKey (gateway bersama)
Anda dapat memperoleh nilai kredensial melalui titik akhir gateway bersama KMS. Berikut adalah isi file konfigurasi.
## Jenis kredensial akses.
credentials_type=client_key
## Kata sandi kredensial untuk client key. Anda dapat membacanya dari variabel lingkungan atau file.
## Kata sandi kredensial (ClientKeyPassword) yang Anda simpan saat membuat ClientKey di titik akses aplikasi (AAP).
client_key_password_from_env_variable=#nama variabel lingkungan kata sandi kunci privat client key Anda#
client_key_password_from_file_path=#jalur file kata sandi kunci privat client key Anda#
# Jalur ke file ClientKey.
# File ClientKey adalah konten kredensial identitas aplikasi (ClientKeyContent) yang Anda unduh saat membuat ClientKey di AAP.
# Nama file default setelah diunduh adalah ClientKey_******.json.
client_key_private_key_path=#jalur file kunci privat client key Anda#
## Wilayah layanan KMS terkait.
cache_client_region_id=[{"regionId":"#regionId#"}]ClientKey (gateway khusus)
Anda dapat memperoleh nilai kredensial melalui titik akhir gateway khusus KMS. Berikut adalah isi file konfigurasi.
Parameter konfigurasi adalah cache_client_dkms_config_info. cache_client_dkms_config_info menggunakan format array JSON. Anda dapat mengonfigurasi beberapa instans KMS untuk mencapai ketersediaan layanan dan pemulihan bencana yang lebih tinggi.
Metode 1: Ambil kata sandi ClientKey dari variabel lingkungan
Isi file konfigurasi adalah:
cache_client_dkms_config_info=[{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromEnvVariable":"<YOUR_PASSWORD_ENV_VARIABLE>","clientKeyFile":"<your ClientKey file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]Dengan metode ini, Anda juga perlu mengonfigurasi variabel lingkungan dengan nama kustom untuk Credential Password (ClientKeyPassword). Setelah dikonfigurasi, ganti
<YOUR_PASSWORD_ENV_VARIABLE>dengan nama variabel tersebut. Contohnya:cache_client_dkms_config_info=[{"regionId":"cn-hangzhou","endpoint":"kst-hzz634e67d126u9p9****.cryptoservice.kms.aliyuncs.com","passwordFromEnvVariable":"passwordFromEnvVariable","clientKeyFile":"C:\RamSecretPlugin\src\main\resources\clientKey_KAAP.json","ignoreSslCerts":false,"caFilePath":"C:\RamSecretPlugin\src\main\resources\PrivateKmsCA_kst-hzz634e67d126u9p9****.pem"}]Metode 2: Ambil kata sandi ClientKey dari file
Secara default, file yang diunduh untuk Credential Password (ClientKeyPassword) ClientKey diberi nama
clientKey_****_Password.txt. Jika Anda mengubah nama file tersebut, Anda harus mengganti<your Client Key file path>dalam nilai cache_client_dkms_config_info dengan jalur file baru.Isi file konfigurasi adalah:
cache_client_dkms_config_info=[{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromFilePath":"< your password file path >","clientKeyFile":"<your Client Key file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]Contohnya:
cache_client_dkms_config_info=[{"regionId":"cn-hangzhou","endpoint":"kst-hzz634e67d126u9p9****.cryptoservice.kms.aliyuncs.com","passwordFromFilePath":"C:\RamSecretPlugin\src\main\resources\clientKeyPassword.txt","clientKeyFile":"C:\RamSecretPlugin\src\main\resources\clientKey_KAAP.json","ignoreSslCerts":false,"caFilePath":"C:\RamSecretPlugin\src\main\resources\PrivateKmsCA_kst-hzz634e67d126u9p9****.pem"}]
Deskripsi setiap item konfigurasi:
Item Konfigurasi | Deskripsi parameter | Penjelasan |
Region ID | ID wilayah tempat instans KMS berada. | Untuk daftar ID wilayah spesifik, lihat Wilayah dan zona. |
Endpoint | Nama domain instans KMS. Formatnya adalah | Buka halaman Instances. Di halaman detail instans, Instance VPC Endpoint adalah endpoint-nya. |
clientKeyFile | Jalur absolut atau relatif file ClientKey dalam format JSON. |
Penting File ClientKey dan kata sandi kredensial memiliki hubungan satu-ke-satu. Anda hanya bisa mendapatkannya saat membuat ClientKey. Jika Anda tidak menyimpannya saat pembuatan, Anda harus membuat ClientKey baru di AAP. Untuk informasi selengkapnya, lihat Buat titik akses aplikasi. |
passwordFromFilePath atau passwordFromEnvVariable |
| |
Ignore SSL certificates | Menentukan apakah akan mengabaikan pemeriksaan validitas sertifikat SSL instans KMS. Instans KMS memiliki sertifikat SSL bawaan dan menggunakan protokol SSL/TLS untuk autentikasi dan komunikasi terenkripsi. Nilai yang valid adalah:
| Di lingkungan produksi, Anda harus mengatur parameter ini ke false. |
caFilePath | Jalur absolut atau relatif file sertifikat CA instans KMS. Sertifikat CA instans KMS digunakan untuk memeriksa validitas sertifikat SSL instans KMS. Misalnya, memeriksa apakah sertifikat SSL dikeluarkan oleh CA yang sesuai, masih dalam periode validitas, dan sesuai dengan nama domain instans KMS (endpoint). | Buka halaman Instances. Di halaman detail instans, klik Download di bagian Instance CA Certificate. |
Langkah 3: Gunakan plug-in kredensial RAM dalam Alibaba Cloud SDK
Java
Alibaba Cloud SDK for Java (V2.0)
Kompatibilitas Java 9+
Anda dapat mengimpor plug-in kredensial RAM ke proyek Anda menggunakan Maven.
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-tea-openapi-sdk-managed-credentials-provider</artifactId> <version>[1.3.5,]</version> </dependency>CatatanKami menyarankan menginstal versi terbaru plug-in. Untuk informasi selengkapnya, lihat kode sumber.
Ambil klien Alibaba Cloud SDK for Java dan panggil layanan Alibaba Cloud.
Contoh berikut menunjukkan cara memanggil operasi ECS DescribeInstances.
Tambahkan dependensi ecs20140526 untuk Elastic Compute Service.
<dependency> <groupId>com.aliyun</groupId> <artifactId>ecs20140526</artifactId> <version>7.1.0</version> </dependency>Panggil operasi DescribeInstances.
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DescribeInstancesResponse; import com.aliyun.kms.secretsmanager.plugin.tea.openapi.ProxyClientCreator; import com.google.gson.Gson; public class AliyunTeaOpenApiProviderSample { public static void main(String[] args) throws Exception { // Langkah 1: Tentukan nama rahasia terkelola (nama rahasia yang dibuat di KMS). String secretName = "your-secret-name"; /* Jika aplikasi tidak dapat membaca file konfigurasi default (managed_credentials_providers.properties) dari classpath dan paket JAR eksekusi, atau untuk menyesuaikan nama file konfigurasi, Anda dapat memanggil kode berikut untuk mengatur file konfigurasi kustom. File dibaca dengan urutan berikut: 1. Jika "your-config-name" adalah jalur absolut dengan nama file, file di jalur absolut tersebut dibaca. 2. Jika "your-config-name" hanya berupa nama file, file pertama kali dibaca dari classpath, lalu dari paket JAR eksekusi. */ //ConfigLoader.setConfigName("your-config-name"); // Langkah 2: Konfigurasikan klien OpenAPI. com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); config.endpoint = "your-product-endpoint"; // Ganti dengan endpoint layanan aktual. // Langkah 3: Buat instance klien. Client client = ProxyClientCreator.createClient(config, Client.class, secretName); // Langkah 4: Panggil API layanan Alibaba Cloud. com.aliyun.ecs20140526.models.DescribeInstancesRequest request = new com.aliyun.ecs20140526.models.DescribeInstancesRequest(); request.setRegionId("cn-hangzhou"); // Atur ID wilayah. DescribeInstancesResponse response = client.describeInstances(request); // Langkah 5: Cetak hasilnya. System.out.println(new Gson().toJson(response.getBody())); } }
Alibaba Cloud SDK for Java (V1.0)
Gunakan Maven untuk mengimpor plug-in kredensial RAM ke proyek Anda.
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>[4.3.2,5.0.0]</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core-managed-credentials-provider</artifactId> <version>[1.3.1,]</version> </dependency>CatatanKami menyarankan menginstal versi terbaru plug-in. Untuk informasi selengkapnya, lihat kode sumber.
Ambil klien Alibaba Cloud SDK for Java dan panggil layanan Alibaba Cloud.
Contoh berikut menunjukkan cara memanggil operasi ECS DescribeInstanceStatus.
Tambahkan dependensi aliyun-java-sdk-ecs untuk Elastic Compute Service.
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-ecs</artifactId> <version>5.11.20</version> </dependency>Panggil operasi DescribeInstanceStatus.
import com.aliyuncs.IAcsClient; import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusRequest; import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusResponse; import com.aliyun.kms.secretsmanager.plugin.sdkcore.ProxyAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; public class AliyunSdkProviderSample { public static void main(String[]args) { String secretName="******"; /* Jika aplikasi tidak dapat membaca file konfigurasi default (managed_credentials_providers.properties) dari classpath dan paket JAR eksekusi, atau untuk menyesuaikan nama file konfigurasi, Anda dapat memanggil kode berikut untuk mengatur file konfigurasi kustom. File dibaca dengan urutan berikut: 1. Jika "your-config-name" adalah jalur absolut dengan nama file, file di jalur absolut tersebut dibaca. 2. Jika "your-config-name" hanya berupa nama file, file pertama kali dibaca dari classpath, lalu dari paket JAR eksekusi. */ //ConfigLoader.setConfigName("your-config-name"); // 1. Dapatkan ACSClient menggunakan aliyun-java-sdk-managed-credentials-provider. IAcsClient client = null; try { client = new ProxyAcsClient("<the regionId of ECS>", secretName); } catch (ClientException e) { e.printStackTrace(); } // 2. Panggil OpenAPI ECS untuk mengimplementasikan fitur bisnis. DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest(); DescribeInstanceStatusResponse response; try { response = client.getAcsResponse(request); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } // 3. Panggil metode berikut untuk mematikan klien dan melepaskan sumber daya yang terkait dengan plug-in. client.shutdown(); } }
Penggunaan dalam OSS SDK
Anda dapat mengimpor plug-in kredensial RAM ke proyek Anda menggunakan Maven.
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.17</version> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>[2.1.0,3.10.2]</version> <exclusions> <exclusion> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-kms</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-sdk-oss-managed-credentials-provider</artifactId> <version>[1.3.1,]</version> </dependency>CatatanKami menyarankan menginstal versi terbaru plug-in. Untuk informasi selengkapnya, lihat kode sumber.
Ambil klien OSS SDK for Java dan panggil layanan Alibaba Cloud.
Contoh berikut menunjukkan cara memanggil operasi OSS listBuckets:
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 OssProviderSample { public static void main(String[] args) throws Exception { String secretName = "******"; String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; /* Jika aplikasi tidak dapat membaca file konfigurasi default (managed_credentials_providers.properties) dari classpath dan paket JAR eksekusi, atau untuk menyesuaikan nama file konfigurasi, Anda dapat memanggil kode berikut untuk mengatur file konfigurasi kustom. File dibaca dengan urutan berikut: 1. Jika "your-config-name" adalah jalur absolut dengan nama file, file di jalur absolut tersebut dibaca. 2. Jika "your-config-name" hanya berupa nama file, file pertama kali dibaca dari classpath, lalu dari paket JAR eksekusi. */ //ConfigLoader.setConfigName("your-config-name"); // Dapatkan klien OSS. OSS ossClient = new ProxyOSSClientBuilder().build(endpoint, secretName); // Berikut adalah kode bisnis: Panggil layanan Alibaba Cloud OSS untuk mengimplementasikan fitur bisnis. List<Bucket> buckets = ossClient.listBuckets(); for (Bucket bucket : buckets) { if (bucket != null) { // ... } } // Panggil metode berikut untuk mematikan klien dan melepaskan sumber daya yang terkait dengan plug-in. ossClient.shutdown(); } }
Python
Alibaba Cloud SDK for Python (V1.0)
Jalankan perintah pip untuk menggunakan plug-in kredensial RAM dalam proyek Anda.
pip install aliyun-openapi-python-sdk-managed-credentials-providerCatatanPastikan versi plug-in minimal 0.1.0 atau lebih baru. Untuk informasi selengkapnya, lihat kode sumber.
Ambil klien Alibaba Cloud SDK for Python dan panggil layanan Alibaba Cloud.
from aliyun_sdk_secretsmanager_sdk_core_plugin.proxy_acs_client import ProxyAcsClient region="cn-hangzhou" secretName="******" # 1. Dapatkan ACSClient. client = ProxyAcsClient(region_id=region, secret_name=secretName ) # 2. Kode bisnis: Gunakan klien untuk memanggil layanan Alibaba Cloud tanpa perubahan kode. ... # 3. Panggil metode berikut untuk mematikan klien dan melepaskan sumber daya yang terkait dengan plug-in. client.shutdown()
OSS SDK for Python
Anda dapat menjalankan perintah pip untuk menggunakan plug-in kredensial RAM dalam proyek Anda.
pip install aliyun-oss-python-sdk-managed-credentials-providerCatatanPastikan versi plug-in minimal 0.1.0 atau lebih baru. Untuk informasi selengkapnya, lihat kode sumber.
Ambil klien Alibaba Cloud OSS SDK for Python dan panggil layanan Alibaba Cloud.
from aliyun_sdk_secretsmanager_oss_plugin.proxy_bucket import ProxyBucket from itertools import islice endpoint = "******" secret_name ="******" bucket_name = "******" bucket = ProxyBucket(secret_name=secret_name, endpoint=endpoint, bucket_name=bucket_name) objects = bucket.list_objects() for b in islice(objects.object_list, 10): print(b.key) bucket.shutdown()
Go
Alibaba Cloud SDK for Go (V1.0)
Karena keterbatasan pada SDK plug-in RAM untuk Go, pengulangan otomatis untuk kredensial yang kedaluwarsa tidak didukung. Untuk melakukan rotasi kredensial secara manual, Anda harus memastikan jendela rotasi minimal 13 jam agar tugas tidak terganggu akibat kedaluwarsa kredensial.
Instal plug-in kredensial RAM untuk Alibaba Cloud SDK for Go.
PentingKami menyarankan menginstal versi terbaru plug-in. Untuk informasi selengkapnya, lihat kode sumber.
Plug-in kredensial RAM untuk Go bergantung pada versi
alibaba-cloud-sdk-goyang lebih lama dari v1.63.0. Anda harus memeriksa dan mengonfirmasi versi tersebut dalam filego.modplug-in untuk menghindari potensi masalah kompatibilitas.
Metode 1: Gunakan
go.moduntuk mengelola dependensi Anda.Tambahkan konten berikut ke file
go.moduntuk menginstal paket dependensi.require ( github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/alibaba-cloud-sdk-go-managed-credentials-provider vX.X.X )Metode 2: Gunakan perintah
go getuntuk mengambil paket kode remote.go get -u github.com/aliyun/aliyun-sdk-mxanaged-credentials-providers-go/aliyun-sdk-managed-credentials-providers/alibaba-cloud-sdk-go-managed-credentials-provider
Ambil klien untuk Alibaba Cloud SDK for Go dan panggil layanan Alibaba Cloud.
Contoh berikut menunjukkan cara memanggil operasi ECS DescribeInstances:
package sample import ( "fmt" "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" sdkcoreprovider "github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/alibaba-cloud-sdk-go-managed-credentials-provider/sdk" ) func main() { secretName := "********" regionId := "cn-hangzhou" client, err := sdkcoreprovider.GetClient(&ecs.Client{}, regionId, secretName) if err != nil { fmt.Println(err) return } ecsClient := client.(*ecs.Client) request := ecs.CreateDescribeInstancesRequest() instancesResponse, err := ecsClient.DescribeInstances(request) if err != nil { fmt.Println(err) return } for _, instance := range instancesResponse.Instances.Instance { // lakukan sesuatu dengan instance } }
OSS SDK for Go
Instal plug-in kredensial RAM untuk OSS SDK for Go.
PentingKami menyarankan menginstal versi terbaru plug-in. Untuk informasi selengkapnya, lihat kode sumber.
Plug-in kredensial RAM untuk Go bergantung pada versi
alibaba-cloud-sdk-goyang lebih lama dari v1.63.0. Anda harus memeriksa dan mengonfirmasi versi tersebut dalam filego.modplug-in untuk menghindari potensi masalah kompatibilitas.
Metode 1: Gunakan
go.moduntuk mengelola dependensi Anda.Tambahkan konten berikut ke file
go.moduntuk menginstal paket dependensi.require ( github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/aliyun-oss-go-sdk-managed-credentials-provider vX.X.X )Metode 2: Gunakan perintah
go getuntuk mengambil paket kode remote.go get -u github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/aliyun-oss-go-sdk-managed-credentials-provider
Ambil klien untuk Alibaba Cloud OSS SDK for Go dan panggil layanan Alibaba Cloud.
package sample import ( "fmt" ossprovider "aliyun-oss-go-sdk-managed-credentials-provider/sdk" ) func main() { secretName := "********" endpoint := "https://oss-cn-hangzhou.aliyuncs.com" // Dapatkan Proxy OSS Client. client, err := ossprovider.New(endpoint, secretName) if err != nil { fmt.Println(err) return } result, err := client.ListBuckets() if err != nil { fmt.Println(err) return } for _, bucket := range result.Buckets { // Kode bisnis } // Matikan klien untuk melepaskan sumber daya yang terkait dengan plug-in. client.Shutdown() }