Bagaimana saya bisa mencegah berbagi kunci API internal dalam perusahaan?

37

Kami sedang mengerjakan layanan baru - layanan ini berpotensi akan dipanggil langsung dari aplikasi di perangkat pengguna. Aplikasi ini akan dikembangkan dan didukung oleh beberapa tim pengembangan dari seluruh organisasi, semua tergantung pada data yang kami berikan.

Kami ingin mengidentifikasi aplikasi mana yang mengirim permintaan mana, sehingga kami dapat mengidentifikasi pola penggunaan dan pengembang yang bertanggung jawab. (Untuk menghindari keraguan, otentikasi pengguna ditangani secara terpisah.)

Solusi kami adalah memerlukan kunci API, satu per aplikasi - maka kami memiliki detail kontak untuk tim pengembangan.

Kami tidak ingin menjadikan kunci API sebagai sumber gesekan, tetapi kami khawatir bahwa pengembang akan membagikannya kepada kolega di tim lain, artinya kami tidak lagi dapat mengidentifikasi lalu lintas untuk hanya satu aplikasi.

Bagaimana kita bisa mendorong pengembang untuk tidak membagikan kunci API secara internal?

Oli
sumber
5
Bagaimana tim-tim ini akan mengakses API? Melalui jaringan internal? Umumnya tim yang berbeda ditempatkan di subnetwork yang berbeda sehingga Anda dapat menegakkan penggunaan kunci API tertentu oleh jaringan ... Pokoknya solusi sosial adalah memberi tahu mereka "penting bahwa Anda tidak membagikan kunci API ini bukan untuk keamanan tetapi karena kami perlu metrik pengguna yang berbeda untuk memperbaikinya. Jika seseorang meminta Anda katakan saja kepada mereka untuk bertanya kepada kami dan kami akan dengan senang hati dan efisien memberikan kunci API kepada mereka ".
Giacomo Alzetta
3
Jika Anda tidak ingin orang lain membagikan kunci kepada kolega, buatlah mudah untuk menyertakan file konfigurasi yang diabaikan oleh sistem versi (sehingga kunci tidak pernah dikomit) dan juga membuatnya mudah untuk membuat kunci baru. Tidak ada yang akan repot membagikan kunci rahasia jika pengembang lain dapat dengan mudah membuat kunci baru sendiri. Masalah dengan berbagi kunci pribadi biasanya merupakan masalah yang disebabkan oleh kenyataan bahwa mendapatkan kunci baru membutuhkan waktu.
Sulthan
Sudahkah Anda mempertimbangkan untuk meminta registrasi saat aplikasi pertama kali dimulai? Itu dapat menampilkan layar splash meminta detail kontak pengguna (atau informasi apa pun yang Anda butuhkan) dan kemudian mengeluarkan kunci API di tempat.
John Wu
"Bagaimana kita bisa mendorong pengembang untuk tidak membagikan kunci API secara internal?" Secara sederhana, ikat setiap kunci ke alamat MAC kartu jaringan di komputer yang menjalankannya. Protokol jaringan mencegah alamat MAC yang sama tidak digunakan di jaringan yang sama, sehingga mencegah orang menggunakan kunci yang sama berulang kali. Saya telah membuat ini menjadi jawaban, tetapi saya tidak memiliki perwakilan untuk saat ini.
Blerg
Anehnya, saya tidak melihat kata "rotasi" (seperti dalam rotasi tombol - kredensial kedaluwarsa / rotasi) di mana saja di halaman ini saat ini. Setelah seseorang mendapatkan kunci, apakah ia memiliki masa pakai yang terbatas dan setelah itu harus diputar tidak digunakan dan diganti dengan yang baru? Jika tidak, mengapa tidak?
Michael - sqlbot

Jawaban:

76

Untuk membagikan kunci-kunci itu di antara tim, tim harus berbicara satu sama lain, setuju untuk berbagi, lalu membagikannya. Ini butuh waktu. Jadi, jika suatu tim dapat meminta kunci API dari Anda lebih cepat dan lebih mudah, tidak ada insentif untuk dibagikan.

Dan cara termudah bagi mereka untuk meminta kunci-kunci itu adalah bagi Anda untuk melakukan pre-empt. Dengan asumsi Anda tahu semua tim lain yang membutuhkan kunci API, buat mereka dan bagikan sebelum membuat layanan tersedia bagi mereka.

Ada satu insentif lain yang dapat Anda tawarkan: dukungan debugging. Tim-tim itu akan membutuhkan bantuan Anda ketika segala sesuatunya tidak berjalan dengan baik ketika mereka mengintegrasikan pekerjaan mereka dengan layanan Anda. Kunci API tersebut memungkinkan Anda untuk melacak permintaan spesifik mereka dan dengan demikian membantu dalam men-debug apa yang salah. Jadi, jual itu sebagai alasan kunci, alih-alih " mengidentifikasi pola penggunaan dan pengembang yang bertanggung jawab ", yang sepertinya Anda memata-matai aktivitas mereka.

David Arno
sumber
2
Re: berbagi, di dunia ideal Anda benar - tetapi Anda mengandaikan mereka memiliki informasi yang sempurna (meskipun saya dapat membantu dengan mengarahkan mereka ke dokumen dari skema, akar titik akhir, dan setiap kesalahan) dan manajemen koperasi, dan bukan kenyataan di mana yang mungkin mereka miliki hanyalah titik akhir dan beberapa kode disalin dari tim lain yang diteruskan oleh manajer senior.
Oli
3
Re: pre-empting, Anda memang benar, kami harus secara agresif membuat dan mengirim kunci ke pihak yang berkepentingan. Yang tidak saya sebutkan adalah bahwa beberapa aplikasi ini menggunakan kerangka kerja umum / antarmuka, dan kita mungkin bisa secara semi-otomatis menyuntikkan atau menerapkan kunci unik pada lapisan itu, tetapi itu tidak berlaku untuk semua aplikasi.
Oli
1
@ Ewan jika Anda hanya menonaktifkan akses ke kunci yang diberikan, semua pengguna akan lari ke Anda - tidak perlu mengejarnya. Dan kemudian Anda dapat memberi mereka kunci unik :)
Alexei Levenkov
15
Pre-empting harus mengambil formulir ini: mengakses API tanpa kunci menghasilkan pesan kesalahan dengan tautan ke halaman tempat Anda mengajukan kunci. Jangan berharap ada orang yang membaca dokumentasi. Insentif tidak berfungsi ketika tidak ada yang tahu tentang mereka.
candied_orange
1
Jika pesan kesalahan atau debug log secara otomatis diemailkan ke alamat yang terhubung dengan kunci, siapa pun yang menginginkan data akan memiliki insentif untuk menggunakan kunci mereka sendiri - dan siapa pun yang kunci dibagikan akan memiliki insentif untuk melacak orang yang membagikannya. dan membuat mereka berhenti.
Robin Bennett
20

Jawaban yang bagus sudah, saya hanya memikirkan pendekatan yang berbeda yang mungkin atau mungkin tidak bekerja untuk Anda.

Daripada mengeluarkan kunci untuk disertakan, Anda dapat meminta tajuk permintaan untuk menyertakan nama aplikasi ujung depan, untuk dibuat dan diformat oleh pengembang aplikasi ujung depan, seperti yang dilakukan browser web. Dengan begitu ujung depan masih bisa berpura-pura menjadi aplikasi yang berbeda tetapi tidak akan ada manfaat untuk melakukan itu sehingga sepertinya tidak mungkin. Biarkan ujung depan mengidentifikasi dirinya dan menerima string yang tidak kosong.

Martin Maat
sumber
Itu akan membuat hidup agak sulit jika kepemilikan aplikasi berubah - misalnya, kita bisa memperbarui rincian kunci API yang disimpan di pihak kita, tetapi jika kita menerima teks formulir gratis yang mengharuskan aplikasi membuat perubahan kode.
Oli
1
@Oli Jika kepemilikan suatu aplikasi berubah dan pengembang (baru) akan menganggap pantas untuk memperbarui identitas aplikasi (yang memang dimiliki karena orang lain yang memeliharanya), apa masalahnya? Anda dapat membedakan antara perubahan kepemilikan sebelum dan perubahan kepemilikan, anggap saja itu sebagai dua aplikasi yang berbeda. Saya tidak akan mengharapkan pemilik baru untuk melihat nama di header dalam waktu dekat.
Martin Maat
3
Inilah yang saya lakukan. memiliki klien memiliki parameter konstruksi yang merupakan nama aplikasi dan / atau menggunakan refleksi untuk menarik hal-hal lain seperti mesinnya berjalan, versinya dll. Kuncinya adalah memungkinkan Anda untuk melaporkan ketika orang TIDAK mengikuti api Anda kebijakan
Ewan
1
Jika organisasi memiliki pendekatan umum untuk kontrol versi, mis. Setiap orang menyimpan kode mereka di server GitHub milik org, minta setiap aplikasi mengirim URL ke repo-nya dan hash komit dari mana ia dibuat. Hash komit dapat dimasukkan dalam kode sebagai bagian dari proses pembuatan, jadi tidak perlu bagi pengembang untuk memperbarui apa pun. Memiliki URL repo memungkinkan Anda melihat siapa pemiliknya, dan mendapatkan komitmen spesifik akan membuat Anda melihat perbedaan perilaku di antara versi.
Caleb
@ Caleb Jika semuanya terpusat seperti itu OP mungkin tidak akan memiliki masalah ini. Dari apa yang saya pahami, pengembang aplikasi ujung depan banyak yang anonim untuk OP, dengan cara pribadi pengembangan perangkat lunak.
Martin Maat
16

Pendeknya:

Pertama: fasilitasi dan manfaat; Jika perlu: gesekan dan polisi.

Beberapa kata lagi

Fasilitasi : Pertama, buat tim mudah mendapatkan kunci API baru. Misalnya menambahkan pengingat dalam prosedur perusahaan untuk meluncurkan proyek baru, dan menawarkan layanan yang mudah digunakan untuk meminta kunci baru, tanpa meminta pembenaran.

Manfaat : Membuat penggunaan kunci API sendiri menjadi manfaat bagi tim atau pemilik produk. Misalnya, usulkan beberapa umpan balik tentang penggunaan aplikasi berdasarkan kunci itu.

Gesekan : Bergantung pada fitur kunci, Anda dapat membuat gesekan, misalnya jika kunci ditautkan ke domain yang ditentukan aplikasi (mis. Menggunakan kembali kunci tidak selalu memberikan akses ke semua layanan yang diinginkan).

Pemolisian : Akhirnya, Anda mungkin perlu melihat beberapa langkah pemolisian. Misalnya, Anda dapat memantau penggunaan fungsi api dengan kunci api dan setelah waktu tertentu untuk menetapkan garis dasar, penyelidikan tentang penggunaan bagian api yang tidak diharapkan mengingat garis dasar. Atau jika ini tidak realistis, cukup sertakan dalam daftar periksa tinjauan proyek perusahaan verifikasi bahwa kunci yang valid digunakan.

Catatan : Anda mungkin harus sangat jelas tentang kebijakan kunci API Anda: Apakah versi utama barumemerlukan kunci API sendiri? Apa dengan garpu, atau jika aplikasi terpecah? bagaimana jika tim lain bertanggung jawab, dll ...

Christophe
sumber
6

Umumnya cara termudah untuk membuat pengembang "melakukan hal yang benar", adalah membuatnya mudah bagi mereka untuk melakukannya.

Untuk itu saya sarankan membangun halaman web / situs kunci API. Dalam bentuknya yang paling sederhana, itu bisa berupa login (idealnya terkait dengan AD / LDAP perusahaan Anda) dan halaman yang hanya menanyakan nama aplikasi dan mengeluarkan kunci.

Pada akhirnya, Anda selalu dapat mencabut kunci nanti, jadi yang Anda perlukan hanyalah situs untuk merekam siapa (nama pengguna) yang meminta kunci dan apa (Nama Aplikasi) yang ingin mereka lakukan dengannya - bersama dengan info apa pun yang diperlukan untuk cabut kunci nanti.

Anda dapat melakukan sesuatu yang mirip dengan sistem tiket, tetapi pada akhirnya sangat mudah bagi saya untuk menyalin dan menempelkan kunci dari satu aplikasi ke aplikasi lain, jadi sangat mudah untuk meminta kunci baru, untuk menghindari kesalahan tingkah laku.

DavidT
sumber
1

Bersikaplah proaktif.

Identifikasi pengembang yang mungkin dan berikan kunci API unik di saluran yang aman, sebelumnya. Berikan cara mudah untuk meminta kunci API baru. Berikan cara mudah bagi orang baru yang meminta kunci API baru. Ketika pekerja magang atau karyawan baru bergabung dengan tim, berikan mereka tiket JIRA atau "Minta kunci API" yang serupa dengan langkah-langkah dalam deskripsi.

Melacak kunci API mana yang telah digunakan, dan mana yang belum. Jika Bob telah mengirimkan tiket dalam proyek tetapi belum menggunakan kunci API-nya, maka ia mungkin meminjam milik orang lain.

Dapatkan Dukungan Manajemen. Jangan menjadi usil Nancy yang membuat aturan yang tidak penting. Secara harfiah meyakinkan Manajemen bahwa itu penting, dan kemudian mereka yang meyakinkan kelompok bahwa itu penting. Jangan berusaha meyakinkan semua orang.

Dan saran yang paling menjengkelkan dan rawan tirani: Waspadai penyalahgunaan, dan lakukan tindakan keras pada hari yang sama. Jam yang sama adalah yang terbaik. Jangan katakan "Pengembang Nakal Buruk" katakan "Ini langkah yang tepat." Jika mereka melakukannya berulang kali, nonaktifkan kunci yang disalahgunakan. Ini mengacaukan Sharer dan Seseorang yang Meminjam, dan pembagi akan mengatakan "Tidak, lakukan dengan benar" di masa depan. Hindari menonaktifkan kunci yang ada di proyek langsung.

Christopher Hostage
sumber
1

Bagaimana kita bisa mendorong pengembang untuk tidak membagikan kunci API secara internal?

  • Hasilkan kunci sebagai hasil pendaftaran aplikasi swalayan .
  • Membutuhkan titik kontak sebelum kunci menjadi aktif.
  • Dan minta mereka untuk tidak berbagi. (Buat persyaratan layanan dan / atau beri tahu mereka mengapa lebih baik bagi mereka untuk tidak berbagi.)

Anda juga harus menerapkan pembatasan tingkat . Ini dengan sendirinya dapat mencegah berbagi kunci. Ini melindungi sistem Anda sampai batas tertentu terhadap aplikasi yang kasar. (Dan yang benar-benar jahat.) Dan, itu memastikan Anda akan mendapat informasi sebelum peningkatan besar-besaran lalu lintas yang dapat diperbaiki. (Memberi Anda waktu untuk menambah kapasitas, saya harap!)

Dan, dengan pembatasan tingkat, ketika suatu aplikasi membutuhkan batas yang lebih tinggi, ia membuka dialog dengan POC yang terdaftar untuk kunci tersebut. Anda mendapatkan kesempatan untuk bertanya apakah kunci dibagikan, menjelaskan mengapa itu berbahaya dan sebagainya, dan Anda dapat menawarkan kunci tambahan jika perlu alih-alih perubahan batas tarif yang diminta. Dll

svidgen
sumber
0

Salah satu cara untuk melakukan hal-hal, terutama jika tim menggunakan sistem build bersama (atau setidaknya yang cukup umum) adalah dengan mengatur server internal yang membuat dan mengeluarkan kunci API (diberi beberapa bit informasi dasar tentang produk yang menggunakannya) ). Kemudian gunakan skrip yang mengambil kunci API baru dari server untuk setiap build, atau untuk setiap pembaruan versi. Biarkan devs menjalankan skrip untuk mendapatkan kunci yang berbeda untuk build lokal mereka juga. (Jika memungkinkan, otomatiskan ini sebagai bagian dari build sehingga mereka bahkan tidak perlu memikirkannya.)

Ini akan membuat Anda tahu apakah itu sesuatu dalam produksi, QA, atau dev, dan pada versi apa / masalah mulai dibangun.

Miral
sumber
0

Hal pertama dan terbaik yang dapat Anda lakukan adalah memformat tombol sehingga mereka memasukkan nama aplikasi dalam bentuk yang mudah dibaca, dan tidak berfungsi jika Anda mengubahnya.

Jika itu jelas ketika tim menggunakan kunci yang salah, maka mereka akan berusaha untuk tidak melakukannya.

Kemudian, secara berkala berakhir kunci. Anda harus tetap melakukan ini , dan ketika kunci hampir kedaluwarsa, Anda dapat mengirim yang baru ke tim pemiliknya. Tim yang menggunakan kunci kemudian akan termotivasi untuk memastikan bahwa mereka adalah tim yang memilikinya, sehingga mereka akan mendapatkan yang baru saat kedaluwarsa.

Matt Timmermans
sumber
1
dalam prakteknya meskipun kadaluwarsa kunci mungkin terlalu banyak hambatan untuk aplikasi adopsi - saya dapat melihat manajer mengatakan "fuggetaboutit" karena itu hanya akan menjadi masalah nanti.
davidbak