Cara Menggunakan Secret Manager dengan API Gateway
Shirui Zhao
January 13, 2023
Apa Itu Secret?
Dalam lingkungan IT, secret adalah kredensial istimewa yang digunakan oleh sistem dan aplikasi, biasanya untuk autentikasi atau sebagai input ke algoritma enkripsi. Misalnya, kata sandi yang diperlukan untuk menghubungkan program ke database, kunci/sertifikat untuk komunikasi terenkripsi, semuanya termasuk dalam kategori secret.
Jenis-jenis secret yang umum meliputi:
- Kunci enkripsi
- Kredensial akses layanan cloud
- Kunci API (Application Programming Interface)
- Token akses
- Kunci SSH (Secure Shell)
Secret Manager
Secret Manager menyimpan, mengambil, memutar, dan mengaudit secret selama siklus hidupnya. HashiCorp Vault adalah salah satu layanan Secret Manager yang paling umum digunakan, dan prinsip kerjanya adalah sebagai berikut (gambar dari situs resmi HashiCorp):

Selain HashiCorp Vault, penyedia cloud seperti AWS, Google, dan Azure juga menyediakan layanan Secret Manager.
Menggunakan Secret Manager untuk membangun aplikasi tidak hanya meningkatkan keamanan tetapi juga menyediakan fungsi-fungsi berikut:
- Memungkinkan secret untuk diperbarui dengan mudah di beberapa mesin tanpa memengaruhi aplikasi.
- Pengembang tidak perlu terlalu memperhatikan penyimpanan secret dan dapat lebih fokus pada logika bisnis itu sendiri.
- Rotasi dan pencabutan secret dapat dilakukan tanpa perlu menerapkan ulang atau mengganggu aplikasi yang sedang berjalan.
- Secret Manager menyediakan log audit yang fleksibel dan terperinci yang dapat melacak riwayat akses semua pengguna dan lebih mudah memenuhi persyaratan audit dan kepatuhan.
Menggunakan Secret Manager di API Gateway
Sebagai pintu masuk lalu lintas bisnis, API Gateway sering kali mengandung banyak informasi rahasia, seperti kunci API dan token untuk autentikasi. Oleh karena itu, sangat penting untuk mengintegrasikan Secret Manager ke dalam API Gateway.
Skenario Penggunaan Secret di API Gateway
Key Auth adalah metode autentikasi sederhana di API Gateway. Pengguna perlu mengatur kunci terlebih dahulu, dan ketika klien melakukan permintaan API, kunci yang telah diatur sebelumnya ditulis ke header permintaan yang sesuai atau diakses sebagai parameter permintaan untuk melewati autentikasi. Namun, kebocoran kunci sering terjadi, dan kunci sering disimpan dalam file konfigurasi atau disimpan sebagai variabel dalam kode. Jika kunci tidak disimpan dengan benar, kunci tersebut bahkan dapat muncul di repositori kode publik seperti GitHub, yang menimbulkan ancaman serius terhadap keamanan. Administrator sering memperbarui kunci ini secara teratur untuk mencegah kerusakan serius yang disebabkan oleh kebocoran kunci. Namun, untuk beberapa kunci statis, memperbarui file konfigurasi secara individual di setiap mesin juga dapat menimbulkan ancaman serius terhadap stabilitas layanan.
Mengintegrasikan Secret Manager ke API Gateway
Dengan mengintegrasikan Secret Manager ke API Gateway, kunci yang telah diatur sebelumnya untuk autentikasi Key Auth dapat disimpan dalam layanan Secret Manager, dan ini dapat secara efektif menyelesaikan serangkaian masalah yang disebabkan oleh kebocoran kunci. API Gateway hanya merupakan pengguna kunci, dan nilai aktual kunci disimpan dalam layanan Secret Manager eksternal. Selain itu, API Gateway hanya menyimpan referensi ke kunci, sehingga bahkan jika API Gateway diretas, kunci aktual tidak dapat diperoleh dari kode atau file konfigurasi. Selain itu, jika Anda perlu memperbarui nilai kunci, Anda hanya perlu memperbaruinya di Secret Manager tanpa mengubah kode atau konfigurasi API Gateway, yang juga secara efektif menghindari restart API Gateway.

Kami akan menggunakan Apache APISIX sebagai contoh di bawah ini untuk menunjukkan cara menggunakan Secret Manager untuk menyimpan kunci yang telah diatur sebelumnya untuk Key Auth di API Gateway.
Contoh Penggunaan Apache APISIX dalam Secret Manager dalam Praktik
Apache APISIX adalah API Gateway yang dinamis, real-time, dan berkinerja tinggi yang menyediakan ratusan fungsi, seperti load balancing, upstream dinamis, canary release, routing yang terperinci, pembatasan laju, degradasi layanan, circuit breaker, autentikasi, dan observabilitas.
Dalam versi 3.1.0, Apache APISIX memperkenalkan APISIX Secret untuk mengintegrasikan berbagai layanan Secret Manager. Urutan kerjanya adalah sebagai berikut:

Di bawah ini, kami menggunakan Vault sebagai layanan Secret Manager. Kami akan menggunakan autentikasi Key Auth untuk mengilustrasikan cara menggunakan Secret Manager untuk menyimpan kunci di Apache APISIX.
Membuat Kunci di Vault
Sebelum membuat kunci, Anda perlu memulai layanan Vault. Karena bagian ini berbagi praktik terbaik untuk menggunakan Vault dalam ekosistem Apache APISIX, konfigurasi Vault itu sendiri tidak dijelaskan secara rinci dan dapat ditemukan di sini.
Untuk membuat kunci yang sesuai di Vault, Anda dapat menggunakan perintah berikut:
vault secrets enable -version=1 -path=apisix kv vault kv put apisix/jack auth-key=secret-key
Setelah menjalankan perintah di atas, Anda akan menemukan kunci bernama auth-key di bawah path apisix/jack, dengan nilai secret-key.
Konfigurasi di APISIX
Pertama, tambahkan sumber daya secret melalui Admin API dan konfigurasikan alamat serta informasi koneksi lainnya untuk Vault:
- ID sumber daya APISIX Secret adalah "gateway", lihat https://apisix.apache.org/docs/apisix/terminology/secret/#usage-1
- Bidang
prefixadalah path kunci di Vault, dan bidangtokenadalah token Vault.
curl http://127.0.0.1:9180/apisix/admin/secrets/vault/gateway \ -H 'X-API-KEY: Your-API-KEY' -X PUT -d ' { "uri": "https://127.0.0.1:8200", "prefix": "apisix", "token": "hvs.chjDFWvZRcihoq2vpSsVenmR" }'
Kemudian, gunakan plugin key-auth untuk membuat konsumen dan melakukan autentikasi Key Auth untuk rute atau layanan yang sesuai. Bidang key merujuk ke sumber daya APISIX Secret:
curl http://127.0.0.1:9180/apisix/admin/consumers \ -H 'X-API-KEY: Your-API-KEY' -X PUT -d ' { "username": "jack", "plugins": { "key-auth": { "key": "$secret://vault/gateway/jack/auth-key" } } }'
Melalui dua langkah di atas, ketika permintaan pengguna mengenai plugin key-auth, komponen Secret akan memanggil Secret Manager yang dikonfigurasi pengguna melalui antarmuka yang disediakan untuk mendapatkan nilai aktual kunci di Vault. Jika nilai kunci tidak ditemukan, plugin akan mencatat kesalahan dan gagal melakukan validasi Key Auth.
Kemudian buat Route untuk melakukan autentikasi Key Auth:
curl -i "http://127.0.0.1:9180/apisix/admin/routes" -H 'X-API-KEY: Your-API-KEY' -X PUT -d ' { "id": "getting-started-ip", "uri": "/ip", "plugins": { "key-auth": {} }, "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } } }'
Terakhir, kirim permintaan tanpa kunci ke API Gateway untuk memverifikasi hasilnya:
curl -i "http://127.0.0.1:9080/ip"
Hasilnya adalah sebagai berikut:
HTTP/1.1 401 Unauthorized ... {"message":"Missing API key found in request"}
Dan kemudian, kirim permintaan dengan kunci ke API Gateway untuk memverifikasi hasilnya:
curl -i "http://127.0.0.1:9080/ip" -H 'apikey: secret-key'
Hasilnya mirip dengan berikut:
HTTP/1.1 200 OK ... { "origin": "127.0.0.1, 59.172.90.243" }
Selain itu, Apache APISIX telah memperluas variabel lingkungan menjadi layanan Secret Manager sederhana, dan token APISIX untuk menghubungkan Vault juga dapat disimpan dalam variabel lingkungan. Jadi, sebelum memulai APISIX, Anda dapat mengatur variabel lingkungan dengan perintah berikut:
export VAULT_TOKEN="root"
Merujuk ke variabel lingkungan saat menambahkan sumber daya Secret:
curl http://127.0.0.1:9180/apisix/admin/secrets/vault/1 -H 'X-API-KEY: Your-API-KEY' -X PUT -d ' { "uri": "https://127.0.0.1:8200", "prefix": "apisix", "token": "$ENV://VAULT_TOKEN" }'
Melalui langkah-langkah di atas, Anda dapat menyimpan kunci yang diperlukan untuk autentikasi Key Auth di Vault alih-alih menampilkannya dalam teks biasa saat mengonfigurasi plugin.
Kesimpulan
Di API Gateway, terdapat banyak informasi rahasia. Menggunakan Secret Manager untuk mengelola secret dapat memastikan bahwa tidak ada informasi rahasia dalam bentuk teks biasa di API Gateway, secara efektif meningkatkan keamanan dan stabilitas API Gateway. Sebagai API Gateway open-source paling aktif di dunia, Apache APISIX juga sangat mendukung secret manager. Artikel ini juga menggunakan autentikasi Key Auth untuk mengilustrasikan cara menggunakan Secret Manager untuk mengelola informasi kunci di APISIX.
Untuk informasi lebih lanjut tentang API gateway, silakan kunjungi blog kami atau hubungi kami.