Rotasi secret adalah proses memperbarui atau mengganti informasi sensitif (secret) secara berkala seperti sandi, kunci API, atau kunci enkripsi. Memutar secret membantu meminimalkan risiko akses tidak sah atau penyalahgunaan secret, terutama jika secret tersebut telah disusupi atau bocor.
Rotasi berkala membantu dengan cara berikut:
-
Membatasi dampak jika secret bocor.
-
Memastikan bahwa individu yang tidak lagi memerlukan akses ke secret tidak dapat menggunakan nilai secret lama.
-
Meminimalkan risiko gangguan layanan jika Anda perlu merotasi secret dengan segera.
Secret Manager memiliki konsep secret, versi secret, dan jadwal rotasi, yang memberikan dasar untuk membuat workload yang mendukung secret yang dirotasi.
Halaman ini memberikan rekomendasi untuk merotasi secret yang disimpan di Secret Manager. Anda akan mempelajari cara melakukan hal berikut:
Sebelum memulai, sebaiknya baca ringkasan platform untuk memahami keseluruhan lanskap Google Cloud. Sebaiknya Anda juga membaca ringkasan produk Secret Manager.
Mengikat versi secret ke aplikasi Anda
Secret di Secret Manager dapat memiliki beberapa versi secret. Versi secret berisi payload yang tidak dapat diubah (string byte secret yang sebenarnya) dan diurutkan serta diberi nomor. Untuk merotasi secret, tambahkan versi secret baru ke secret yang ada.
Versi secret yang baru ditambahkan pada secret dapat direferensikan menggunakan
alias latest
. Meskipun mudah digunakan untuk pengembangan, alias latest
dapat
menjadi masalah bagi beberapa beban kerja produksi karena nilai yang buruk dapat segera
diluncurkan dan mengakibatkan pemadaman layanan secara menyeluruh. Metode alternatif untuk mengikat ke
versi secret dijelaskan dalam skenario berikut.
Peluncuran bertahap
Peluncuran bertahap adalah prinsip panduan untuk skenario berikut. Dengan memilih peluncuran secret yang lebih lambat, risiko kerusakan akan lebih rendah, tetapi juga waktu pemulihan akan lebih lambat. Beberapa secret dapat dibatalkan validasinya di sistem eksternal (seperti API atau database yang melacak nilai secret yang valid) yang mungkin berada dalam kontrol Anda atau tidak, dan dalam kasus ini, pemulihan memerlukan peluncuran.
Secret yang buruk dapat diluncurkan selama rotasi manual atau otomatis. Alur kerja rotasi yang kuat harus dapat otomatis mendeteksi kerusakan (misalnya, rasio error HTTP) dan melakukan rollback untuk menggunakan versi secret yang lebih lama (melalui deployment konfigurasi sebelumnya).
Peluncuran versi secret baru bergantung pada cara secret terikat dengan aplikasi Anda.
Pendekatan 1: Menyelesaikan selama proses rilis yang ada
Selesaikan dan ikat versi secret dengan rilis aplikasi Anda. Untuk sebagian besar deployment, hal ini melibatkan resolusi versi secret terbaru ke dalam nama resource versi secret lengkap dan meluncurkannya dengan aplikasi sebagai tanda atau dalam file konfigurasi. Sebaiknya selesaikan nama versi rahasia pada waktu rotasi, simpan nama resource di tempat yang tahan lama (misalnya, commit ke Git), dan tarik nama versi ke konfigurasi deployment selama push untuk mencegah deployment yang diblokir.
Saat aplikasi dimulai, panggil Secret Manager dengan nama versi secret tertentu untuk mengakses nilai secret.
Pendekatan ini memiliki manfaat sebagai berikut:
-
Aplikasi Anda menggunakan versi secret yang sama di seluruh mulai ulang, sehingga meningkatkan prediktabilitas dan mengurangi kompleksitas operasional.
-
Proses pengelolaan perubahan yang ada untuk peluncuran dan rollback dapat digunakan kembali untuk rotasi secret dan deployment versi secret.
-
Nilai dapat diluncurkan secara bertahap, sehingga mengurangi dampak deployment nilai buruk.
Pendekatan 2: Menyelesaikan saat aplikasi dimulai
Ambil payload secret terbaru saat aplikasi dimulai dan terus gunakan secret selama durasi aplikasi.
Keuntungan pendekatan ini adalah tidak perlu memodifikasi pipeline CI/CD untuk me-resolve versi secret, tetapi jika secret yang buruk diluncurkan, aplikasi akan gagal dimulai saat instance dimulai ulang atau layanan diskalakan dan dapat menyebabkan pemadaman layanan secara berantai.
Pendekatan 3: Menyelesaikan terus-menerus
Lakukan polling untuk versi secret terbaru secara terus-menerus di aplikasi dan segera gunakan nilai secret baru.
Pendekatan ini berisiko menyebabkan pemadaman layanan secara langsung karena tidak ada penerapan nilai secret baru secara bertahap.
Mengganti secret
Jika secret Anda dapat diperbarui secara dinamis (misalnya, jika sistem eksternal yang memvalidasi secret menyediakan Admin API), sebaiknya siapkan tugas rotasi yang berjalan secara berkala. Langkah-langkah umumnya diuraikan di bagian berikut dengan Cloud Run sebagai contoh lingkungan komputasi.
Mengonfigurasi jadwal rotasi pada secret
Siapkan jadwal rotasi untuk secret Anda. Topik Pub/Sub harus dikonfigurasi pada secret untuk menerima notifikasi saat tiba waktunya untuk merotasi secret Anda. Lihat panduan Notifikasi Peristiwa untuk mengonfigurasi topik di secret Anda.
Meluncurkan Cloud Run untuk membuat versi secret baru
Buat dan konfigurasikan layanan Cloud Run untuk menerima notifikasi rotasi dan menjalankan langkah-langkah rotasi:
-
Dapatkan atau buat secret baru di sistem eksternal (misalnya, database, penyedia API).
Pastikan tindakan ini tidak membatalkan secret yang ada sehingga workload yang ada tidak terpengaruh.
-
Perbarui Secret Manager dengan secret baru.
Buat versi secret baru di Secret Manager. Tindakan ini juga akan memperbarui alias
latest
agar mengarah ke secret yang baru dibuat.
Percobaan Ulang dan Konkurensi
Karena proses rotasi dapat dihentikan kapan saja, layanan Cloud Run Anda harus dapat memulai ulang proses dari tempatnya berhenti (harus bersifat reentrant).
Sebaiknya konfigurasi percobaan ulang agar rotasi yang gagal atau terganggu dapat dieksekusi ulang. Selain itu, konfigurasikan konkurensi maksimum dan instance maksimum di layanan Cloud Run Anda untuk meminimalkan kemungkinan eksekusi rotasi serentak saling mengganggu.
Untuk mem-build fungsi rotasi reentrant, Anda mungkin merasa perlu menyimpan status untuk memungkinkan proses rotasi dilanjutkan. Ada dua fitur Secret Manager yang membantu hal ini:
-
Gunakan label pada secret untuk menyimpan status selama rotasi. Tambahkan label ke secret untuk melacak nomor versi terakhir yang berhasil ditambahkan selama alur kerja rotasi (misalnya,
ROTATING_TO_NEW_VERSION_NUMBER=3
). Setelah rotasi selesai, hapus label pelacakan rotasi. -
Gunakan etags untuk memverifikasi bahwa proses lain tidak mengubah secret secara serentak selama alur kerja rotasi. Pelajari lebih lanjut etag secret dan versi secret.
Izin Identity and Access Management
Proses rotasi Anda memerlukan izin secretmanager.versions.add
untuk
menambahkan versi secret baru, dan mungkin memerlukan izin secretmanager.versions.access
untuk membaca versi secret sebelumnya.
Proses rotasi Anda memerlukan izin secretmanager.versions.add
untuk
menambahkan versi secret baru, dan mungkin memerlukan izin secretmanager.versions.access
untuk membaca versi secret sebelumnya.
Akun layanan Cloud Run default memiliki peran Editor, yang mencakup izin untuk menambahkan, tetapi tidak mengakses versi secret. Untuk mengikuti prinsip hak istimewa terendah, sebaiknya jangan gunakan akun layanan default. Sebagai gantinya, siapkan akun layanan terpisah untuk layanan Cloud Run Anda dengan peran Secret Manager yang diberikan sesuai kebutuhan (mungkin satu atau beberapa dari):
-
roles/secretmanager.secretVersionAdder
-
roles/secretmanager.secretVersionManager
-
roles/secretmanager.secretAdmin
-
roles/secretmanager.secretAccessor
Meluncurkan versi secret baru ke workload
Setelah versi rahasia baru yang valid didaftarkan ke sistem eksternal dan disimpan di Secret Manager, luncurkan ke aplikasi Anda. Peluncuran ini bervariasi berdasarkan pendekatan Anda terhadap binding secret dan umumnya tidak memerlukan intervensi manual.
Membersihkan versi secret lama
Setelah semua aplikasi diputar dari versi secret lama, secret tersebut dapat dihapus dengan aman. Proses pembersihan bergantung pada jenis secret, tetapi umumnya:
-
Pastikan versi secret baru telah diluncurkan sepenuhnya ke semua aplikasi.
-
Nonaktifkan versi secret lama di Secret Manager dan pastikan aplikasi tidak rusak (tunggu waktu yang wajar untuk memungkinkan manusia melakukan intervensi jika penonaktifan merusak konsumen).
-
Hapus atau batalkan pendaftaran versi secret lama dari sistem eksternal.
-
Menghancurkan versi secret lama di Secret Manager