All Products
Search
Document Center

Key Management Service:Ikhtisar KMS Agent

Last Updated:Aug 25, 2026

KMS Agent adalah proxy HTTP sisi klien yang memusatkan pengambilan rahasia untuk aplikasi Anda. Alih-alih mengintegrasikan SDK KMS ke setiap aplikasi, aplikasi mengirim permintaan HTTP lokal ke agent, yang menangani otentikasi, caching, dan komunikasi dengan KMS atas nama mereka.

Cara kerja

Agent menyimpan nilai rahasia dalam cache di memori dan memperbaruinya secara berkala berdasarkan Time To Live (TTL) yang Anda konfigurasikan. Saat sebuah aplikasi meminta rahasia:

  1. Agent memvalidasi permintaan menggunakan file token Server-Side Request Forgery (SSRF).

  2. Jika terdapat nilai cache yang valid dan belum kedaluwarsa, agent segera mengembalikannya (cache hit).

  3. Jika tidak ada entri cache yang valid, agent meneruskan permintaan ke KMS. KMS memverifikasi identitas agent, mendekripsi rahasia, lalu mengembalikannya. Agent memperbarui cache dan mengembalikan nilai tersebut ke aplikasi (cache miss).

Diagram berikut menunjukkan kedua alur tersebut:

  • Proses cache hit

image

  • Proses cache miss (tidak ada cache atau cache kedaluwarsa)

image

Penting

Nilai rahasia yang di-cache disimpan dalam memori tanpa enkripsi. Lindungi nilai tersebut dengan menerapkan izin akses proses yang sesuai pada agent, mengaktifkan mekanisme perlindungan memori, dan men-deploy alat deteksi memory leak.

Deploy agent bersama aplikasi Anda di server fisik, mesin virtual seperti Elastic Compute Service (ECS), atau kontainer seperti Pod Kubernetes. Untuk kode sumber dan panduan penerapan, lihat alibabacloud-kms-agent.

Arsitektur

Agent terdiri dari empat komponen: server HTTP, cache, klien KMS, dan log.

image

Konfigurasikan keempat komponen tersebut dalam satu file konfigurasi. File berikut menampilkan semua opsi yang tersedia beserta nilai default-nya:

# Semua item konfigurasi
[Server]
# Opsional, nilai default adalah 2025. Agent mendengarkan di 127.0.0.1:2025.
HttpPort = 2025
# Opsional, nilai default adalah ["X-KMS-Token", "X-Vault-Token"].
# Permintaan ke agent harus menyertakan header SSRF; permintaan tanpa header tersebut ditolak.
SSRFHeaders = ["X-KMS-Token"]
# Opsional, nilai default adalah ["KMS_TOKEN", "KMS_SESSION_TOKEN", "KMS_CONTAINER_AUTHORIZATION_TOKEN"].
# Nilainya dapat berupa string literal atau path file, misalnya file:///var/run/awssmatoken.
# Agent membaca token SSRF dari variabel lingkungan yang ditentukan dan membandingkannya
# dengan token dalam header permintaan aplikasi. Akses hanya diberikan jika sesuai.
SSRFEnvVariables = ["KMS_TOKEN"]
# Opsional, nilai default adalah "/v1/". Awalan URI untuk permintaan berbasis path.
PathPrefix = "/v1/"
# Opsional, nilai default adalah 800. Jumlah maksimum permintaan konkuren.
MaxConn = 800
# Opsional, nilai default adalah 0.
# 0: format respons KMS GetSecretValue
# 1: format respons AWS Secrets Manager GetSecretValue
# 2: struktur HashiCorp Vault KV
ResponseType = 0
# Opsional, nilai default adalah true.
# Jika true, agent mengembalikan nilai cache yang kedaluwarsa jika KMS sementara tidak dapat dijangkau.
IgnoreTransientErrors = true

[Kms]
# Opsional, nilai default adalah cn-hangzhou.
Region = "cn-hangzhou"
# Opsional, nilai default adalah kms.cn-hangzhou.aliyuncs.com.
# Mendukung titik akhir gateway bersama maupun gateway khusus.
Endpoint = "kms.cn-hangzhou.aliyuncs.com"

[Cache]
# Opsional, nilai default adalah InMemory. Saat ini hanya caching in-memory yang didukung.
CacheType = "InMemory"
# Opsional, nilai default adalah 1000. Jika diatur ke 0, caching dinonaktifkan dan setiap
# permintaan langsung dikirim ke KMS.
CacheSize = 1000
# Opsional, nilai default adalah 300s.
TtlSeconds = 300
# Opsional, nilai default adalah false.
# false: mengganti rahasia cache tertua saat cache penuh.
# true: mengganti rahasia yang paling jarang digunakan (LRU) berdasarkan frekuensi akses.
EnableLRU = false

[Log]
# Opsional, nilai default adalah Debug.
LogLevel = "Debug"
# Opsional, nilai default adalah ./logs/ relatif terhadap direktori startup aplikasi.
LogPath = "./logs/"
# Opsional, nilai default adalah 100 (MB). Ukuran maksimum per file log.
MaxSize = 100
# Opsional, nilai default adalah 2. Jumlah file log yang disimpan.
MaxBackups = 2

Server HTTP

Server HTTP menangani permintaan aplikasi untuk pengambilan rahasia. Secara default, respons menggunakan format KMS GetSecretValue. Atur ResponseType untuk mengembalikan format AWS Secrets Manager atau HashiCorp Vault KV sebagai gantinya.

Format permintaan yang didukung:

  • Berdasarkan path:

    GET /v1/<secret-name>
  • Berdasarkan query:

    GET /secretsmanager/get?secretId=<secret-name>

Contoh permintaan menggunakan curl (membaca token SSRF dari file):

curl -s \
  -H "X-KMS-Token: $(cat /var/run/kmstoken)" \
  "http://127.0.0.1:2025/v1/<secret-name>"

Contoh permintaan menggunakan Python:

with open("/var/run/kmstoken") as f:
    token = f.read().strip()

headers = {"X-KMS-Token": token}
response = requests.get("http://127.0.0.1:2025/v1/<secret-name>", headers=headers)
print(response.json())

Ganti <secret-name> dengan nama rahasia yang akan diambil.

Format respons yang didukung:

Agent kompatibel dengan format respons AWS Secrets Manager dan HashiCorp Vault KV. Jika kode Anda sudah terintegrasi dengan Spring Vault, ubah titik akhir akses ke alamat KMS Agent dan lengkapi adaptasi konfigurasi melalui agent untuk beralih cepat ke platform Alibaba Cloud.

  • Alibaba Cloud KMS (default, ResponseType=0):

    {
       "CreateTime": "2025-01-03T07:59:17Z",
       "RequestId": "cc315250-04c9-4caf-a055-6648f36598b9",
       "SecretData": "{\"k3\":\"v3\"}",
       "SecretDataType": "text",
       "SecretName": "agent-test",
       "SecretType": "Generic",
       "VersionId": "v2",
       "VersionStages": {
          "VersionStage": [
             "ACSCurrent"
          ]
       }
    }
  • AWS Secrets Manager (ResponseType=1):

    {
       "ARN": "",
       "Name": "agent-test",
       "VersionId": "v2",
       "SecretString": "{\"k3\":\"v3\"}",
       "VersionStages": [
          "ACSCurrent"
       ],
       "CreatedDate": "2025-01-03T07:59:17Z"
    }
  • HashiCorp Vault (ResponseType=2):

    {
       "data": {
          "k3": "v3"
       }
    }

Cache

Agent menyimpan nilai rahasia dalam cache di memori, sehingga mengurangi jumlah permintaan yang dikirim ke KMS. Konfigurasikan TTL cache, ukuran, dan kebijakan penggantian agar sesuai dengan pola akses dan jadwal rotasi rahasia Anda.

Parameter

Deskripsi

Default

CacheType

Backend cache. Hanya InMemory yang didukung.

InMemory

CacheSize

Jumlah maksimum rahasia yang di-cache. Atur ke 0 untuk menonaktifkan caching.

1000

TtlSeconds

Berapa lama nilai cache dianggap valid, dalam satuan detik.

300

EnableLRU

Kebijakan penggantian saat cache penuh. false mengganti berdasarkan usia; true mengganti berdasarkan penggunaan terakhir.

false

Klien KMS

Klien KMS menghubungkan agent ke KMS. Atur Region dan Endpoint agar sesuai dengan penerapan KMS Anda. Titik akhir gateway bersama maupun gateway khusus didukung.

Catatan

Saat menggunakan titik akhir gateway khusus, agent menyertakan sertifikat CA bawaan untuk semua wilayah — tidak diperlukan konfigurasi sertifikat tambahan.

Log

Agent menggunakan framework logging Zap untuk menghasilkan log JSON terstruktur. Konfigurasikan tingkat log, batas ukuran file, dan jumlah penyimpanan agar sesuai dengan kebutuhan operasional Anda.

Keamanan

Otentikasi dan otorisasi

Agent melakukan otentikasi ke KMS

Agent menggunakan rantai penyedia kredensial default Alibaba Cloud, yang memeriksa sumber berikut secara berurutan: variabel lingkungan, peran RAM OIDC IdP, config.json, peran RAM ECS, dan URI kredensial — kecuali metode inisialisasi tertentu disediakan dalam credentials.NewDefaultCredentialsProvider().

Berikan agent hanya izin yang diperlukan untuk mengambil dan mendekripsi rahasia. Ikuti prinsip hak istimewa minimal saat mengonfigurasi kebijakan RAM.

Aplikasi melakukan otentikasi ke agent

Agent menghasilkan file token SSRF (misalnya, /var/run/kmstoken) saat startup. Aplikasi harus menyertakan token ini dalam header permintaannya. Permintaan tanpa token yang valid akan ditolak.

Akses ke file token dibatasi secara default:

  • Linux: Hanya proses agent dan pengguna OS aplikasi yang dapat membaca file token.

  • Kontainer sidecar: Akses file token dibatasi dalam cakupan pod.

Keamanan komunikasi

  • Agent ke KMS: Seluruh trafik menggunakan Transport Layer Security (TLS). Untuk isolasi yang lebih kuat, gunakan titik akhir gateway khusus — trafik tetap berada dalam VPC Anda dan tidak diekspos ke internet publik.

  • Agent ke aplikasi: Agent hanya mendengarkan di 127.0.0.1, sehingga membatasi akses hanya ke mesin lokal.

Audit dan logging

Semua operasi pengambilan rahasia dicatat dalam format JSON menggunakan framework Zap. Log dapat dikonfigurasi berdasarkan ukuran file dan jumlah penyimpanan, sehingga menyediakan catatan audit aktivitas agent.

Stabilitas

Agent dirancang agar tetap tersedia selama gangguan jaringan dan kegagalan sementara.

Pemeriksaan mandiri saat startup: Saat startup, agent memverifikasi konektivitas ke KMS. Jika verifikasi gagal, agent keluar alih-alih berjalan dalam kondisi terdegradasi.

Retry otomatis: Agent menggunakan logika retry bawaan Alibaba Cloud SDK (V2). Untuk respons HTTP 429 (pembatasan kecepatan) dan HTTP 500 (kesalahan server internal), agent akan mencoba ulang sebanyak 3 kali menggunakan metode exponential backoff untuk interval waktu.

Fallback cache kedaluwarsa: Saat IgnoreTransientErrors diaktifkan (nilai default), agent mengembalikan nilai cache terbaru jika KMS sementara tidak dapat dijangkau. Hal ini mencegah kegagalan aplikasi selama gangguan jaringan atau server berdurasi singkat.

Ketersediaan tinggi:

  • Linux (systemd): systemd memantau proses agent dan secara otomatis merestart jika terjadi crash.

  • Kubernetes (kontainer sidecar): Diterapkan sebagai init container, kegagalan agent akan memicu restart kontainer, sehingga menjamin stabilitas aplikasi.

KMS Agent vs. Secret Client

KMS Agent bertindak sebagai lapisan perantara — aplikasi mengakses rahasia melalui agent alih-alih memanggil KMS secara langsung. Secret Client mengintegrasikan SDK KMS ke setiap aplikasi. Pilih berdasarkan skala penerapan dan kebutuhan kontrol akses Anda.

Aspek

KMS Agent

Secret Client

Disarankan untuk

Perusahaan dengan banyak aplikasi dan berbagai bahasa pemrograman yang memerlukan kontrol akses terpusat

Aplikasi tunggal atau penerapan kecil dengan kebutuhan kontrol akses sederhana

Penerapan

Proses independen, terpisah dari aplikasi

Pustaka yang diintegrasikan ke kode aplikasi

Kompleksitas integrasi

Rendah

Tinggi

Kontrol akses

Terpusat: diterapkan di satu titik untuk semua aplikasi

Desentralisasi: setiap aplikasi mengelola kebijakannya sendiri

Dukungan bahasa

Bahasa apa pun (antarmuka HTTP)

Java 8+, Python, dan Go

Kinerja

Cache in-memory meminimalkan latensi dan pembatasan kecepatan KMS dalam skenario frekuensi tinggi

Akses frekuensi tinggi dapat memicu pembatasan kecepatan KMS

Rotasi rahasia

Di-cache dengan TTL yang dapat dikonfigurasi; diperbarui secara otomatis dari KMS saat kedaluwarsa

Diambil secara otomatis menggunakan mekanisme refresh dan logika retry

Pemeliharaan

Rendah: satu konfigurasi untuk semua aplikasi

Tinggi: konfigurasi terpisah per aplikasi