Hashicorp Vault & Apache APISIX: Tingkatkan Keamanan API Anda
November 15, 2022
Saat ini, API (Application Programming Interfaces) telah menjadi cara paling umum untuk menghubungkan berbagai layanan perangkat lunak. Misalnya, Anda mengambil cuaca hari ini melalui beberapa API cuaca atau melakukan retweet pesan lucu melalui API Twitter. Interkoneksi API membuat Internet menjadi kaya dan berwarna, tetapi juga menunjukkan sisi gelapnya - ancaman API.
Data menunjukkan bahwa API sekarang mewakili 90% dari permukaan serangan aplikasi web, yang berarti API sekarang menjadi salah satu vektor serangan utama. Lalu, bagaimana kita dapat mengurangi risiko API?
Orang mungkin memilih pola API Gateway dalam arsitektur perangkat lunak modern untuk melindungi dari serangan API. Sebuah API Gateway adalah titik masuk layanan perangkat lunak, menyediakan fungsionalitas seperti load balancing, service discovery, dan autentikasi API. Apache APISIX adalah salah satu API Gateway terbaik, yang membantu pengguna memperkuat keamanan API mereka melalui fitur seperti autentikasi, otorisasi, ACL (Access Control List), dan daftar blokir/izinkan IP. Misalnya, autentikasi JWT adalah cara populer untuk melindungi API. Ini meminta konsumen API untuk membuktikan identitas mereka melalui JSON Web Token. Dalam kasus seperti ini, permintaan API tanpa kredensial atau dengan kredensial yang salah akan ditolak oleh Apache APISIX.
Apache APISIX juga bertanggung jawab atas penandatanganan JSON Web Token (yang memerlukan rahasia untuk masuk). Dari sudut pandang Apache APISIX, menyimpan rahasia pengguna menjadi pertanyaan kritis karena autentikasi akan gagal jika rahasia tersebut bocor. Secara default, Apache APISIX menyimpan rahasia di etcd, pusat konfigurasi untuk konfigurasi Apache APISIX seperti rute dan upstream.
Sayangnya, etcd tidak dirancang untuk melindungi data sensitif. Begitu seseorang yang tidak bermoral dapat mengakses kluster etcd, semua data di dalamnya akan terbuka. Ini tidak masalah untuk objek rute APISIX, tetapi akan fatal untuk rahasia atau kunci privat sertifikat X509. Untuk melindungi data sensitif dengan lebih baik, Apache APISIX mengintegrasikan Hashicorp Vault sejak versi 2.12.0. Jadi, apa itu Hashicorp Vault?
Apa itu Hashicorp Vault?
Hashicorp Vault adalah infrastruktur penyimpanan untuk menyimpan rahasia pengguna dengan aman (misalnya, kredensial database, kata sandi, kunci API). Ini mendukung integrasi dengan banyak sistem eksternal seperti Amazon Key Management Service dan Google Cloud Key Management. Secara teknis, Hashicorp Vault adalah sistem terdistribusi dengan protokol konsensus Raft. Data Anda akan disimpan dengan beberapa cadangan, dan Anda tidak perlu khawatir tentang kegagalan titik tunggal data.

Tapi mengapa Hashicorp Vault istimewa? Begitu Anda memulai server Hashicorp Vault, ia berada dalam keadaan tersegel. Anda tidak dapat mengakses data apa pun kecuali Anda membuka segel server ini. Untuk membuka segel server Hashicorp Vault, Anda perlu menggunakan bagian kunci (yang dihasilkan saat Anda menginisialisasi server Hashicorp Vault dengan algoritma Shamir Secret Sharing) untuk melakukan operasi pembukaan segel berulang kali. Jumlahnya tergantung pada jumlah bagian kunci ((X/2)+1 jika jumlah bagian kunci adalah X). Selain itu, Anda dapat menutup segel server Hashicorp Vault saat runtime jika Anda melihat tanda-tanda mencurigakan bahwa server tersebut sedang diserang.
Bagaimana Apache APISIX Menggunakan Hashicorp Vault?
Saat ini, Apache APISIX mengintegrasikan Hashicorp Vault dalam plugin jwt-auth. Plugin jwt-auth digunakan untuk melakukan autentikasi JWT.

Logika interaksi dasar antara Hashicorp Vault dan Apache APISIX adalah:
- Permintaan API masuk
- Plugin JWT Auth berjalan
- Apache APISIX mencoba mengambil rahasia dari Hashicorp Vault
- Hashicorp Vault mengembalikan rahasia, dan Apache APISIX menyimpannya dalam cache
- Apache APISIX menggunakan rahasia untuk memvalidasi JSON Web Token
- Autentikasi berhasil, dan permintaan API diteruskan ke layanan backend
- Mengirim respons API kembali
Anda dapat mengonfigurasi plugin jwt-auth dalam objek konsumen Apache APISIX dengan opsi vault untuk memberi tahu Apache APISIX untuk menyimpan/mengambil rahasia ke/dari Hashicorp Vault. Konsumen Apache APISIX adalah abstraksi dari konsumen API. Kredensial API dapat dikonfigurasi pada tingkat konsumen.
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "jack", "plugins": { "jwt-auth": { "key": "your-api-key", "vault": {} } } }'
Konfigurasi Hashicorp Vault dapat diatur dalam config.yaml Apache APISIX.
vault: host: 'http://0.0.0.0:8200' timeout: 10 token: 's.KUWFVhIXgoRuQbbp3j1eMVGa' prefix: 'kv/apisix'
Perlu diperhatikan di sini bahwa token harus memiliki izin baca untuk path kv/apisix/consumer, yang merupakan tempat API Admin Apache APISIX menyimpan rahasia.
path "kv/apisix/consumer/*" { capabilities = ["read"] }
Ketika permintaan API dari konsumen tersebut masuk, Apache APISIX akan mencoba mengambil rahasia dari server Hashicorp Vault yang dikonfigurasi (dan menyimpan hasilnya dalam memori) dan menggunakan rahasia ini untuk memvalidasi JSON Web Token.
Masa Depan Integrasi antara Apache APISIX dan Hashicorp Vault
Ada beberapa jenis data sensitif dalam Apache APISIX, tetapi saat ini hanya rahasia JSON Web Token yang dapat disimpan ke Hashicorp Vault. Namun, di masa depan, semua kredensial API, seperti kunci API dan kata sandi pengguna, dapat disimpan ke Hashicorp Vault. Selain itu, kunci privat sertifikat dan kunci API Admin juga dapat disimpan di sana. Semua data ini akan dipisahkan dari konfigurasi. Dengan cara ini, keamanan API Anda diperkuat tidak hanya karena Anda menggunakan autentikasi API, tetapi juga karena kredensial API dilindungi dengan tepat.