All Products
Search
Document Center

Key Management Service:Ikhtisar Agen KMS

Last Updated:Jul 02, 2025

Key Management Service (KMS) Agent adalah proxy HTTP di sisi klien yang menyederhanakan pengambilan rahasia dengan memusatkan interaksi KMS. Aplikasi mengambil rahasia melalui permintaan HTTP lokal alih-alih integrasi SDK langsung, meminimalkan perubahan kode dan memastikan kebijakan keamanan yang seragam. Agen menangani manajemen rahasia (dikonfigurasi sekali untuk semua aplikasi), caching dalam memori, dan pembaruan rahasia berkala untuk mengurangi frekuensi panggilan SDK dan overhead jaringan. Agen dapat diterapkan di lingkungan lokal, mesin virtual seperti Elastic Compute Service (ECS), dan sistem berbasis kontainer.

Cara kerjanya

Agen menggunakan memori untuk menyimpan nilai rahasia secara cache dan memperbarui nilai rahasia yang disimpan dalam cache secara berkala berdasarkan Time To Live (TTL) yang Anda atur. Saat aplikasi meminta nilai rahasia dari agen melalui permintaan HTTP, agen memverifikasi legitimasi permintaan melalui file token Server-Side Request Forgery (SSRF). Jika nilai rahasia yang valid ada di cache, mereka dikembalikan. Jika tidak, permintaan diteruskan ke layanan KMS. Setelah layanan memverifikasi identitas agen, rahasia didekripsi dari layanan KMS dan dikembalikan. Agen memperbarui cache dan mengembalikan nilai rahasia ke aplikasi melalui pesan HTTP. Proses ini ditunjukkan pada gambar berikut:

  • Proses cache hit

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

Terapkan agen bersama aplikasi Anda di berbagai lingkungan, termasuk server fisik lokal, mesin virtual (seperti ECS), dan kontainer (seperti Kubernetes pods). Kunjungi alibabacloud-kms-agent untuk repositori kode.

Komponen arsitektur

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

Anda dapat mengonfigurasi keempat komponen ini dengan file konfigurasi seperti yang dijelaskan di bawah ini. Lihat alibabacloud-kms-agent untuk kode sumber.

# Semua item konfigurasi
[Server]
# Opsional, nilai default adalah 2025, Alamat listening default Agen 127.0.0.1:2025
HttpPort = 2025
# Opsional, nilai default adalah ["X-KMS-Token", "X-Vault-Token"].
# Akses ke Agen harus membawa Header SSRF, jika tidak akses dilarang.
SSRFHeaders = ["X-KMS-Token"]
# Opsional, nilai default adalah ["KMS_TOKEN", "KMS_SESSION_TOKEN", "KMS_CONTAINER_AUTHORIZATION_TOKEN"], nilai variabel bisa berupa nilai spesifik, atau path file seperti file:///var/run/awssmatoken.
# Agen mendapatkan Token SSRF dari Env, membandingkannya dengan Token yang dibawa dalam Header akses aplikasi, akses hanya diizinkan jika cocok.
SSRFEnvVariables = ["KMS_TOKEN"]
# Opsional, nilai default adalah "/v1/".
# Prefiks URI untuk akses berbasis path
PathPrefix = "/v1/"
# Opsional, nilai default adalah 800
# Jumlah maksimum permintaan bersamaan
MaxConn = 800
# Opsional, nilai default adalah 0
# 0: konten rahasia dikembalikan dalam format Respons API GetSecretvalue KMS; 1: konten rahasia dikembalikan dalam format Respons API GetSecretvalue AWS SeceretManager; 2: Dikembalikan dalam struktur KV HashiCorp.
ResponseType = 0
# Opsional, nilai default true
# Saat IgnoreTransientErrors bernilai true, saat cache tidak valid dan mengakses KMS remote mengalami kegagalan, Response akan mengembalikan rahasia yang kedaluwarsa di memori.
IgnoreTransientErrors = true

[Kms]
# Opsional, nilai default adalah cn-hangzhou
# Wilayah tempat KMS berada
Region = "cn-hangzhou"
# Opsional, nilai default adalah kms.cn-hangzhou.aliyuncs.com
# Endpoint bisa berupa Endpoint gateway shared atau Endpoint gateway khusus
Endpoint = "kms.cn-hangzhou.aliyuncs.com"

[Cache]
# Opsional, default adalah InMemory, saat ini hanya mendukung cache memori
CacheType = "InMemory"
# Opsional, ukuran cache default adalah 1000 rahasia, saat CacheSize=0, cache tidak digunakan, setiap permintaan mengakses KMS remote.
CacheSize = 1000
# Opsional, efektivitas waktu cache, nilai default adalah 300s.
TtlSeconds = 300
# Opsional, kebijakan eviksi cache, default adalah false jika tidak diisi.
# Saat rahasia dalam cache mencapai batas CacheSize, false berarti menghapus rahasia yang paling awal disimpan berdasarkan waktu cache, true berarti mengevakuasi rahasia yang paling jarang digunakan berdasarkan frekuensi penggunaan.
EnableLRU = false

[Log]
# Opsional, level log default Debug
LogLevel = "Debug"
# Opsional, penyimpanan log default di ./logs/ direktori startup aplikasi
LogPath = "./logs/"
# Opsional, ukuran log tunggal default 100M
MaxSize = 100
# Opsional, retensi default 2 file log
MaxBackups = 2

Server HTTP

Digunakan untuk menanggapi permintaan aplikasi untuk mengambil rahasia. Secara default, nilai rahasia yang dikembalikan oleh agen memiliki format respons yang sama dengan GetSecretValue. Sebagai alternatif, atur parameter ResponseType dalam file konfigurasi untuk mengembalikan format lainnya.

Format permintaan yang didukung

  • Permintaan berbasis path

    GET /v1/secretId
  • Permintaan berbasis query

    GET /secretsmanager/get?secretId=<secretid>

Format respons yang didukung

Agen kompatibel dengan struktur penyimpanan KV AWS Secrets Manager dan HashiCorp Vault, memungkinkan pengguna bermigrasi ke Alibaba Cloud dengan modifikasi minimal. Untuk kerangka kode yang telah mengintegrasikan Spring Vault, cukup ubah endpoint akses ke endpoint KMS Alibaba Cloud yang sesuai, dan lengkapi adaptasi konfigurasi melalui agen untuk beralih cepat ke platform Alibaba Cloud.

  • Alibaba Cloud KMS

    {
       "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

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

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

Cache

Agen memiliki mekanisme caching memori bawaan. Nilai rahasia tidak dienkripsi dalam cache, dan aplikasi membaca dari cache lokal, mengurangi permintaan sering ke KMS. Anda dapat mengatur waktu cache, ukuran cache, dan kebijakan eviksi untuk menghindari gangguan bisnis yang disebabkan oleh rahasia yang kedaluwarsa.

Penting

Tingkatkan keamanan penyimpanan nilai rahasia dalam cache melalui langkah-langkah seperti mengatur mekanisme perlindungan memori, mengatur izin proses KMS Agent yang masuk akal, dan menerapkan alat deteksi kebocoran memori.

Klien KMS

Mendukung pengaturan wilayah dan endpoint gateway. Baik endpoint gateway shared maupun endpoint gateway khusus didukung.

Catatan

Saat menggunakan endpoint gateway khusus, agen memiliki sertifikat CA bawaan untuk gateway khusus di semua wilayah, sehingga Anda tidak perlu mengonfigurasi sertifikat CA.

Log

Berdasarkan kerangka logging Zap yang populer, agen menyediakan log dalam format JSON, dan mendukung konfigurasi batasan ukuran untuk file log individu dan jumlah maksimum file log yang disimpan.

Keamanan

Otentikasi dan otorisasi

Agen mengakses KMS

Agen mengakses KMS menggunakan rantai penyedia kredensial default Alibaba Cloud rantai penyedia kredensial default (memprioritaskan variabel lingkungan, diikuti oleh Peran RAM OIDC IdP, config.json, Peran RAM ECS, dan terakhir URI kredensial) kecuali metode inisialisasi tertentu diberikan dalam credentials.NewDefaultCredentialsProvider().

Untuk mengakses rahasia melalui KMS menggunakan kebijakan RAM, agen memerlukan izin untuk mengambil dan mendekripsi rahasia tersebut. Terapkan prinsip Hak istimewa minimal saat mengonfigurasi izin ini.

Aplikasi mengakses agen

Server HTTP agen mencakup perlindungan SSRF bawaan. File token SSRF (seperti /var/run/kmstoken) dibuat saat startup. Aplikasi harus menyertakan token ini dalam header permintaan untuk otentikasi. Skenario penyebaran berikut memastikan akses terbatas:

  • Linux: Secara default membatasi akses file token SSRF hanya untuk agen dan pengguna aplikasi.

  • Kontainer Sidecar: Diterapkan dalam pod aplikasi. Secara default membatasi akses token SSRF ke pod.

Keamanan komunikasi

  • Komunikasi Agen-Layanan KMS menggunakan Transport Layer Security (TLS) untuk mencegah penyadapan dan serangan. Untuk keamanan yang lebih baik, gunakan endpoint gateway khusus alih-alih yang shared. Ini membatasi lalu lintas ke jaringan VPC Anda, dan mencegah paparan Internet publik.

  • Agen hanya mendengarkan pada 127.0.0.1, membatasi akses ke mesin lokal.

Audit dan logging

Agen mencatat semua operasi pengambilan rahasia dalam format JSON (menggunakan kerangka logging Zap), dengan kebijakan ukuran file log dan retensi yang dapat dikonfigurasi. Ini memastikan catatan operasional yang dapat diaudit.

Stabilitas

Agen memastikan kontinuitas layanan dalam lingkungan jaringan yang kompleks, dan skenario kegagalan mendadak melalui mekanisme pemeriksaan diri, mekanisme ulang coba, dan langkah-langkah lainnya.

  • Mekanisme pemeriksaan diri saat startup.

    Saat agen mulai, ia memverifikasi konektivitas ke KMS. Jika verifikasi gagal, startup dihentikan.

  • Mekanisme ulang coba kesalahan.

    Agen bergantung pada Alibaba Cloud SDK (V2) untuk berkomunikasi dengan KMS. Saat terjadi pengecualian jaringan, ia secara otomatis mengirim ulang permintaan menggunakan logika ulang coba kesalahan bawaan Alibaba Cloud SDK (V2). Saat menghadapi throttling sisi server (HTTP 429) atau kesalahan server internal (HTTP 500), ia akan mencoba ulang 3 kali menggunakan metode backoff eksponensial untuk interval waktu.

  • Penggunaan cache yang kedaluwarsa selama kegagalan.

    Dengan mengatur parameter IgnoreTransientErrors dalam file konfigurasi agen, saat terjadi kegagalan jaringan atau sisi server, ia akan memeriksa dan mengembalikan data cache lama, memastikan bahwa aplikasi tidak gagal mengambil rahasia karena kegagalan jangka pendek. Parameter IgnoreTransientErrors diaktifkan secara default.

  • Jaminan ketersediaan tinggi berdasarkan systemd atau kontainer Sidecar.

    • Linux (systemd): Dikelola oleh systemd di Linux, memastikan restart otomatis jika proses agen crash.

    • Kontainer Sidecar: Diterapkan sebagai init container, kegagalan agen akan memicu restart kontainer, menjamin stabilitas aplikasi.

Manfaat

  • Kinerja dan keandalan

    Agen menyimpan nilai rahasia dalam memori, mengurangi permintaan sering ke layanan KMS dalam skenario akses frekuensi tinggi, menghindari throttling yang mungkin disebabkan oleh akses frekuensi tinggi, sehingga meningkatkan kinerja dan ketersediaan bisnis.

  • Kompatibilitas

    Agen menyediakan layanan berdasarkan antarmuka HTTP standar, mendukung panggilan dari aplikasi dalam bahasa pemrograman apa pun. Saat aplikasi menggunakan bahasa berbeda, agen mengurangi kesulitan integrasi.

  • Integrasi yang disederhanakan

    Melalui agen, aplikasi dapat dipisahkan dari KMS. Ini mengurangi kompleksitas yang diperlukan untuk aplikasi berinteraksi dengan layanan KMS. Aplikasi hanya perlu berkomunikasi dengan agen tanpa menangani otentikasi, panggilan API, dan aspek lainnya saat mengakses layanan KMS.

  • Manajemen terpusat dan skalabilitas

    Untuk skenario multi-aplikasi tingkat perusahaan, agen menyatukan manajemen dan kontrol akses, mengurangi konfigurasi izin pada setiap klien, memastikan keseragaman dalam proses integrasi berbagai aplikasi. Saat kebutuhan bisnis berkembang, agen memfasilitasi integrasi aplikasi baru, mengurangi konfigurasi izin dan modifikasi kode yang mungkin disebabkan oleh penggunaan SDK.

KMS Agent vs. Secret Client

KMS Agent berfungsi sebagai lapisan tengah, dengan aplikasi mengakses layanan KMS secara tidak langsung melalui agen. Menggunakan klien rahasia memerlukan aplikasi untuk memanggil API layanan KMS melalui SDK. Perbedaan antara keduanya ditunjukkan dalam tabel berikut.

Aspek

KMS Agent

Secret Client

Skenario yang direkomendasikan

Perusahaan dengan banyak aplikasi dan bahasa pemrograman beragam, memerlukan kontrol akses terpusat dan integrasi yang disederhanakan serta distandarisasi.

Aplikasi kecil atau individu dengan persyaratan kontrol akses sederhana.

Penyebaran

Proses independen, terpisah dari aplikasi.

Diintegrasikan dalam kode aplikasi sebagai library.

Kompleksitas integrasi

Sederhana

Kompleks

Kontrol akses

Penerapan kebijakan terpusat melalui satu titik akses.

Desentralisasi: Setiap aplikasi mengelola kebijakan sendiri.

Dukungan bahasa

Mendukung bahasa apa pun (menggunakan antarmuka HTTP universal).

Mendukung Java 8 dan yang lebih baru, Python, dan Go.

Kinerja

Caching dalam memori meminimalkan latensi dan throttling dalam akses frekuensi tinggi.

Akses frekuensi tinggi dapat mengakibatkan throttling KMS.

Rotasi rahasia

Rahasia disimpan dalam cache dengan TTL yang dapat dikonfigurasi, secara otomatis diperbarui dari KMS saat diperlukan untuk mencegah kegagalan pengambilan.

Rahasia secara otomatis diambil dari KMS menggunakan mekanisme refresh dan logika ulang coba.

Biaya pemeliharaan

Rendah: Konfigurasi tunggal untuk semua aplikasi.

Tinggi: Konfigurasi individual per aplikasi.