All Products
Search
Document Center

Key Management Service:Dedicated KMS SDK for Go

Last Updated:Apr 01, 2026

Dedicated KMS SDK for Go memungkinkan Anda memanggil API Dedicated Key Management Service (KMS) langsung dari aplikasi Go. SDK ini mendukung operasi berikut:

  • Mengenkripsi data menggunakan kunci master pelanggan (CMK) simetris

  • Mendekripsi ciphertext menggunakan CMK simetris

  • Menghasilkan tanda tangan digital menggunakan CMK asimetris

  • Memverifikasi tanda tangan digital menggunakan CMK asimetris

  • Mengambil nilai rahasia

Kode sumber dan contoh tambahan tersedia di repositori open source.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Membeli instans Dedicated KMS dan menghubungkannya ke kluster hardware security module (HSM), serta membuat CMK dan application access endpoint (AAP). Untuk petunjuk penyiapan, lihat Hubungkan aplikasi ke instans Dedicated KMS edisi Standard.

  • File kunci klien (ClientKey_****.json) dan Sertifikat CA (PrivateKmsCA_kst-****.pem) diunduh dan disimpan secara lokal.

  • Memiliki titik akhir virtual private cloud (VPC) untuk instans Dedicated KMS. Alamat VPC ditentukan saat kluster HSM diaktifkan dan harus dapat dijangkau dari lingkungan Anda. Untuk mencari alamat tersebut, lihat Kueri instans Dedicated KMS edisi Standard.

Instal SDK

Opsi 1: go.mod (disarankan)

Tambahkan baris berikut ke file go.mod Anda:

require (
    github.com/aliyun/alibabacloud-dkms-gcs-go-sdk <version>
)

Untuk versi terbaru, lihat repositori open source.

Opsi 2: go get

go get -u github.com/aliyun/alibabacloud-dkms-gcs-go-sdk

Inisialisasi SDK

Inisialisasi SDK melibatkan dua langkah: konfigurasikan sertifikat CA untuk verifikasi TLS, lalu buat klien untuk instans Dedicated KMS.

Langkah 1: Konfigurasikan sertifikat CA

Semua permintaan ke instans Dedicated KMS menggunakan mTLS. Atur bidang Verify dalam RuntimeOptions ke konten sertifikat CA Anda.

import (
    dedicatedkmsopenapiutil "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi-util"
    "github.com/alibabacloud-go/tea/tea"
    "io/ioutil"
)

// Baca sertifikat CA dari disk.
ca, err := ioutil.ReadFile("path/to/PrivateKmsCA_kst-******.pem")
if err != nil {
    log.Fatalf("failed to read CA certificate: %v", err)
}

runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
    Verify: tea.String(string(ca)),
}
Peringatan

Jangan atur IgnoreSSL: tea.Bool(true) di lingkungan produksi. Flag ini menonaktifkan verifikasi sertifikat TLS dan hanya boleh digunakan di lingkungan pengembangan lokal.

// Hanya untuk lingkungan pengembangan — menonaktifkan verifikasi TLS.
runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
    IgnoreSSL: tea.Bool(true),
}

Langkah 2: Buat client

Buat klien dengan menyediakan konten client key, kata sandi dekripsinya, dan titik akhir instans Dedicated KMS Anda. Titik akhir tidak mencakup skema https://.

import (
    dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi"
    dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
    "github.com/alibabacloud-go/tea/tea"
)

config := &dedicatedkmsopenapi.Config{
    // Protokol koneksi. Harus https.
    Protocol: tea.String("https"),
    // Konten file client key (ClientKey_******.json).
    ClientKeyContent: tea.String("<your-client-key-content>"),
    // Password yang digunakan untuk mendekripsi client key.
    Password: tea.String("<your-client-key-password>"),
    // Titik akhir instans Dedicated KMS, tanpa skema https://.
    Endpoint: tea.String("<service_id>.cryptoservice.kms.aliyuncs.com"),
}

client, err := dedicatedkmssdk.NewClient(config)
if err != nil {
    log.Fatalf("failed to create Dedicated KMS client: %v", err)
}

Ganti placeholder berikut:

PlaceholderDeskripsi
<your-client-key-content>Konten file ClientKey_******.json
<your-client-key-password>Password yang ditetapkan saat client key dibuat
<service_id>.cryptoservice.kms.aliyuncs.comTitik akhir yang ditampilkan di detail instans Dedicated KMS

Contoh

Semua contoh menggunakan client dan runtimeOptions yang telah diinisialisasi di atas.

Enkripsi data

Enkripsi data dengan CMK simetris menggunakan EncryptWithOptions. Respons mencakup CiphertextBlob dan Iv (vektor inisialisasi). Simpan Iv bersama ciphertext — Anda harus memberikan nilai yang sama saat mendekripsi.

Untuk contoh lengkap, lihat Kode sumber.

import (
    dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
    "github.com/alibabacloud-go/tea/tea"
)

plaintext := []byte("your plaintext data")
// ID atau alias CMK simetris.
keyId := "<your-cmk-id>"

encryptRequest := &dedicatedkmssdk.EncryptRequest{
    KeyId:     tea.String(keyId),
    Plaintext: plaintext,
}

encryptResponse, err := client.EncryptWithOptions(encryptRequest, runtimeOptions)
if err != nil {
    log.Fatalf("encrypt failed: %v", err)
}

// Simpan kedua nilai ini — keduanya diperlukan untuk dekripsi.
ciphertextBlob := encryptResponse.CiphertextBlob
iv := encryptResponse.Iv
requestId := tea.StringValue(encryptResponse.RequestId)

Dekripsi data

Berikan CiphertextBlob dan Iv yang dikembalikan oleh Encrypt ke DecryptWithOptions. Iv harus persis sama.

Untuk contoh lengkap, lihat Kode sumber.

import (
    dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
    "github.com/alibabacloud-go/tea/tea"
)

// ID atau alias CMK simetris yang digunakan saat enkripsi.
keyId := "<your-cmk-id>"
// Ciphertext dan IV dari respons enkripsi.
ciphertextBlob := []byte("<ciphertext-blob>")
iv := []byte("<iv-from-encrypt-response>")

decryptRequest := &dedicatedkmssdk.DecryptRequest{
    KeyId:          tea.String(keyId),
    CiphertextBlob: ciphertextBlob,
    Iv:             iv,
}

decryptResponse, err := client.DecryptWithOptions(decryptRequest, runtimeOptions)
if err != nil {
    log.Fatalf("decrypt failed: %v", err)
}

plaintext := decryptResponse.Plaintext
requestId := tea.StringValue(decryptResponse.RequestId)

Sign data

Hasilkan tanda tangan digital menggunakan CMK asimetris dengan SignWithOptions.

Untuk contoh lengkap, lihat Kode sumber.

import (
    dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
    "github.com/alibabacloud-go/tea/tea"
)

// ID atau alias CMK asimetris.
signerKeyId := "<your-asymmetric-cmk-id>"
message := []byte("<data-to-sign>")
// Jenis pesan. Untuk nilai yang valid, lihat repositori open source.
messageType := "<message-type>"

signRequest := &dedicatedkmssdk.SignRequest{
    KeyId:       tea.String(signerKeyId),
    Message:     message,
    MessageType: tea.String(messageType),
}

signResponse, err := client.SignWithOptions(signRequest, runtimeOptions)
if err != nil {
    log.Fatalf("sign failed: %v", err)
}

signature := signResponse.Signature
requestId := tea.StringValue(signResponse.RequestId)

Verifikasi signature

Verifikasi signature terhadap pesan aslinya menggunakan VerifyWithOptions. Bidang Value dalam respons menunjukkan apakah signature valid.

Untuk contoh lengkap, lihat Kode sumber.

import (
    dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
    "github.com/alibabacloud-go/tea/tea"
)

// ID atau alias CMK asimetris yang digunakan saat signing.
signerKeyId := "<your-asymmetric-cmk-id>"
message := []byte("<original-data>")
signature := []byte("<signature-to-verify>")
// Harus sesuai dengan messageType yang digunakan saat signing.
messageType := "<message-type>"

verifyRequest := &dedicatedkmssdk.VerifyRequest{
    KeyId:       tea.String(signerKeyId),
    Message:     message,
    MessageType: tea.String(messageType),
    Signature:   signature,
}

verifyResponse, err := client.VerifyWithOptions(verifyRequest, runtimeOptions)
if err != nil {
    log.Fatalf("verify failed: %v", err)
}

// true jika signature valid, false jika tidak.
isValid := tea.BoolValue(verifyResponse.Value)
requestId := tea.StringValue(verifyResponse.RequestId)

Ambil nilai rahasia

Penting

GetSecretValue memerlukan Dedicated KMS SDK for Go v0.2.1 atau yang lebih baru.

Untuk contoh lengkap, lihat Kode sumber.

import (
    dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
    "github.com/alibabacloud-go/tea/tea"
)

secretName := "<your-secret-name>"

getSecretValueRequest := &dedicatedkmssdk.GetSecretValueRequest{
    SecretName: tea.String(secretName),
}

response, err := client.GetSecretValueWithOptions(getSecretValueRequest, runtimeOptions)
if err != nil {
    log.Fatalf("GetSecretValue failed: %v", err)
}

secretData := tea.StringValue(response.SecretData)
requestId := tea.StringValue(response.RequestId)

Langkah berikutnya