Mengamankan kunci akun layanan

Tidak seperti pengguna normal, akun layanan tidak memiliki sandi. Sebagai gantinya, akun layanan menggunakan pasangan kunci ECDSA untuk autentikasi. Karena kunci pribadi dari pasangan kunci RSA memungkinkan Anda melakukan autentikasi sebagai akun layanan, memiliki akses ke kunci pribadi serupa halnya dengan mengetahui sandi pengguna. Kunci pribadi dikenal sebagai kunci akun layanan. Kunci akun layanan akan berisiko keamanan jika tidak dikelola dengan hati-hati.

Ancaman utama terkait dengan kunci akun layanan adalah sebagai berikut:

  • Kebocoran kredensial: Kunci akun layanan mungkin secara tidak sengaja berakhir di tempat yang tidak seharusnya disimpan. Pihak tidak bertanggung jawab dapat menggunakan kunci akun layanan yang bocor untuk mengautentikasi dan mendapatkan akses ke lingkungan Anda.

  • Eskalasi akses: Jika pihak tidak bertanggung jawab mendapatkan akses ke kunci akun layanan yang kurang aman, mereka mungkin dapat menggunakan kunci tersebut untuk mengeskalasikan hak istimewanya.

  • Pengungkapan informasi: Kunci akun layanan mungkin secara tidak sengaja mengungkapkan data rahasia.

  • Non-repudiasi: Dengan mengautentikasi menggunakan kunci akun layanan dan mengizinkan akun layanan menjalankan operasi atas nama mereka, pihak tidak bertanggung jawab dapat menyembunyikan identitas dan tindakannya.

Halaman ini menyajikan praktik terbaik untuk mengelola, menggunakan, dan mengamankan kunci akun layanan.

Melindungi dari kebocoran kredensial

Seperti nama pengguna dan sandi, kunci akun layanan adalah bentuk kredensial. Jika pengguna dapat mengakses kunci akun layanan yang valid, pengguna dapat menggunakan kunci tersebut untuk melakukan autentikasi dan mengakses resource yang aksesnya telah diberikan kepada akun layanan.

Pihak tidak bertanggung jawab mungkin menganggap kunci akun layanan lebih berharga daripada sandi yang bocor. Misalnya, upaya login menggunakan sandi yang bocor tidak akan berhasil jika akun pengguna telah dikonfigurasi untuk menggunakan verifikasi dua langkah dan verifikasi login. Sebaliknya, autentikasi dengan kunci akun layanan yang bocor lebih mungkin berhasil karena akun layanan tidak tunduk pada verifikasi login tambahan apa pun.

Pihak tidak bertanggung jawab dapat mencari kunci akun layanan dengan cara berikut:

  • Repositori kode sumber project open source.
  • Dump data publik dari layanan yang dilanggar.

Selain lokasi publik, pihak tidak bertanggung jawab mungkin mencari kunci akun layanan di lokasi pribadi yang disusupi. Beberapa contoh di antaranya:

  • Kotak masuk email
  • Fitur berbagi file
  • Penyimpanan cadangan
  • Direktori sistem file sementara

Cara efektif untuk menurunkan risiko kebocoran kunci akun layanan adalah dengan mengurangi jumlah kunci yang beredar dan mencegah pembuatan kunci baru. Bagian berikut menjelaskan cara membatasi jumlah kunci akun layanan yang beredar, dan tindakan lain yang dapat membantu Anda membatasi risiko kebocoran akun layanan.

Hindari meninggalkan kunci akun layanan di lokasi sementara

Saat Anda membuat kunci akun layanan, segera pindahkan kunci ke lokasi tempat Anda ingin menyimpannya. Pastikan Anda tidak meninggalkan salinan di folder download atau recycle bin komputer Anda secara tidak sengaja.

Jangan meneruskan kunci akun layanan antar-pengguna

Saat men-deploy aplikasi yang memerlukan kunci akun layanan, Anda mungkin tidak memiliki izin untuk membuat kunci akun layanan sendiri. Sebagai gantinya, Anda mungkin harus meminta orang lain untuk membuat kunci akun layanan untuk Anda.

Jangan kirimkan kunci akun layanan ke repositori kode sumber

Kunci akun layanan adalah kredensial, dan harus dilindungi dari akses yang tidak sah. Jika Anda mengirimkan kunci akun layanan ke repositori kode sumber, ada peningkatan risiko bahwa kunci menjadi dapat diakses oleh pengguna yang tidak sah dan pihak tidak bertanggung jawab:

  • Pihak tidak bertanggung jawab dapat memindai kode sumber repositori sumber publik untuk menemukan kunci yang bocor.

  • Di masa mendatang, Anda dapat memutuskan untuk mengubah repositori sumber pribadi menjadi repositori publik, tanpa memeriksanya untuk kunci terlebih dahulu.

  • Anggota tim lain mungkin menyimpan salinan kode sumber di workstation mereka.

Saat Anda mengerjakan kode yang menggunakan kunci akun layanan, selalu simpan kunci akun layanan terpisah dari kode sumber untuk mengurangi risiko pengiriman kunci secara tidak sengaja ke repositori sumber. Dalam banyak kasus, Anda dapat mengurangi risiko ini lebih lanjut dengan tidak menggunakan kunci akun layanan sama sekali selama pengembangan dan menggunakan kredensial pribadi, bukan kunci akun layanan.

Jangan sematkan kunci akun layanan dalam biner program

Kunci akun layanan adalah string yang cocok dengan pola tertentu, dan dapat diidentifikasi meskipun disematkan dalam file atau biner lain. Jika pihak tidak bertanggung jawab memiliki akses ke biner, mereka dapat mengekstrak kunci akun layanan yang disematkan dalam biner.

Biner program untuk aplikasi sisi server mungkin dihosting di repositori artefak atau dapat disalin ke workstation developer untuk tujuan proses debug. Memisahkan kunci akun layanan dari biner program membantu memastikan bahwa pengguna yang dapat mengakses biner tidak secara implisit mendapatkan akses ke kredensial akun layanan.

  • Untuk aplikasi sisi klien, seperti alat, program desktop, atau aplikasi seluler, jangan gunakan akun layanan.
  • Untuk aplikasi sisi server, jangan sematkan kunci akun layanan ke dalam biner. Sebagai gantinya, pisahkan kunci dari biner aplikasi.

Merotasikan kunci akun layanan untuk mengurangi risiko keamanan yang disebabkan oleh kebocoran kunci.

Meskipun Anda dapat mengurangi kemungkinan kebocoran kunci akun layanan secara tidak sengaja, akan sulit untuk menghilangkan risiko tersebut sepenuhnya.

Rotasi kunci adalah proses mengganti kunci Anda yang ada dengan kunci baru, kemudian membatalkan validasi kunci yang lama. Sebaiknya Anda secara rutin merotasi semua kunci yang Anda kelola, termasuk kunci akun layanan.

Merotasi kunci akun layanan dapat membantu mengurangi risiko yang disebabkan oleh kunci yang bocor atau dicuri. Jika kunci bocor, pihak tidak bertanggung jawab mungkin memerlukan waktu berhari-hari atau berminggu-minggu untuk menemukan kuncinya. Jika Anda merotasi kunci akun layanan Anda secara teratur, kemungkinan besar kunci yang bocor akan menjadi tidak valid saat pihak tidak bertanggung jawab mendapatkannya.

Menggunakan expiry times untuk mengakhiri masa berlaku kunci secara otomatis.

Secara default, kunci akun layanan yang Anda buat memiliki masa berlaku satu tahun dan akan tetap valid hingga Anda menghapusnya. Anda juga dapat menetapkan waktu habis masa berlaku sendiri. Menetapkan expiry time untuk kunci akun layanan dapat membatasi risiko keamanan Anda dengan mengurangi masa pakai kredensial persisten. Namun, ada risiko lain yang terkait dengan penetapan expiry times; misalnya, menetapkan expiry time dapat menyebabkan beban kerja gagal saat masa berlaku kunci berakhir.

Gunakan expiry time saat Anda memerlukan akses sementara ke sistem yang memerlukan kunci akun layanan. Misalnya, gunakan waktu habis masa berlaku saat Anda melakukan hal berikut:

  • Mengembangkan kode dalam lingkungan non-produksi untuk aplikasi yang hanya dapat melakukan autentikasi dengan kunci akun layanan.
  • Menggunakan alat pihak ketiga yang hanya dapat mengautentikasi dengan kunci akun layanan.

Hindari penggunaan waktu habis untuk skenario berikut:

  • Workload produksi. Dalam proses produksi, kunci akun layanan yang sudah tidak berlaku dapat menyebabkan penghentian yang tidak disengaja. Sebagai gantinya, gunakan kunci yang tidak memiliki masa berlaku dan kelola siklus prosesnya dengan rotasi kunci.
  • Workload non-produksi yang memerlukan akses permanen, seperti pipeline continuous integration (CI).
  • Sistem rotasi kunci yang mencegah kunci digunakan setelah jangka waktu tertentu.

Untuk membatasi validitas kunci akun layanan, Anda dapat mengonfigurasi expiry time untuk kunci yang baru dibuat di project, folder, atau organisasi Anda. Waktu habis masa berlaku tidak berlaku untuk kunci yang ada.

Memiliki proses yang telah ditetapkan untuk merotasi kunci akun layanan juga membantu Anda bertindak cepat jika Anda mencurigai bahwa kunci akun layanan telah disusupi.

Menggunakan kunci khusus untuk setiap mesin yang menjalankan aplikasi

Untuk membantu Anda mempersempit potensi sumber aktivitas yang mencurigakan, buat kunci individual untuk setiap salinan aplikasi. Dengan begitu, Anda dapat menggunakan kolom serviceAccountKeyName yang ditambahkan oleh banyak layanan ke data log audit untuk membedakan mesin tempat aktivitas berasal.