Rotasi secret adalah proses memperbarui atau mengganti informasi sensitif (secret) secara berkala seperti sandi, kunci API, atau kunci enkripsi. Memutar rahasia membantu meminimalkan risiko akses yang tidak sah atau penyalahgunaan rahasia, terutama jika rahasia tersebut telah dibobol atau dibocorkan.
Rotasi berkala membantu dalam hal berikut:
-
Membatasi dampak jika secret bocor.
-
Memastikan bahwa individu yang tidak lagi memerlukan akses ke rahasia 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 menyediakan dasar untuk membangun workload yang mendukung secret yang dirotasi.
Halaman ini memberikan rekomendasi untuk merotasi secret yang disimpan di Secret Manager. Anda akan pelajari 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. Rahasia berisi payload yang tidak dapat diubah (string byte rahasia sebenarnya) dan diurutkan dan 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.
Rahasia buruk mungkin akan diluncurkan pada layanan manual atau rotasi 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, ini melibatkan penyelesaian versi rahasia terbaru ke nama resource versi secret dan meluncurkannya dengan aplikasi sebagai flag 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 memulai aplikasi, panggil Secret Manager dengan rahasia tertentu nama versi 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 rahasia terbaru saat aplikasi dimulai dan lanjutkan menggunakan 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: Selesaikan secara terus-menerus
Lakukan polling untuk versi rahasia terbaru secara terus-menerus di dalam aplikasi dan gunakan {i>new secret<i} dengan segera.
Pendekatan ini berisiko mengalami pemadaman layanan seketika di seluruh layanan karena tidak terjadi adopsi nilai secret baru.
Putar rahasiamu
Jika secret Anda dapat diperbarui secara dinamis (misalnya, jika sistem eksternal memvalidasi rahasia sehingga memberikan Admin API), sebaiknya siapkan 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 pada secret Anda.
Luncurkan 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 hal ini tidak membatalkan secret yang sudah ada sehingga workload tidak terpengaruh.
-
Mengupdate Secret Manager dengan secret baru.
Buat versi secret baru di Secret Manager. Tindakan ini juga memperbarui alias
latest
menjadi mengarah ke secret yang baru dibuat.
Percobaan Ulang dan Serentak
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 rahasia untuk melacak nomor versi yang terakhir berhasil ditambahkan selama alur kerja rotasi (misalnya,
ROTATING_TO_NEW_VERSION_NUMBER=3
). Setelah rotasi selesai, hapus label pelacakan rotasi. -
Gunakan etag untuk memverifikasi bahwa proses lain tidak secara serentak memodifikasi rahasia selama alur kerja rotasi. Pelajari selengkapnya tentang etag versi secret dan 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 {i>less<i}, akses istimewa, sebaiknya jangan menggunakan akun layanan default. Sebagai gantinya, menyiapkan akun layanan terpisah untuk layanan Cloud Run Anda dengan peran Secret Manager yang diberikan sesuai kebutuhan (mungkin satu atau beberapa):
-
roles/secretmanager.secretVersionAdder
-
roles/secretmanager.secretVersionManager
-
roles/secretmanager.secretAdmin
-
roles/secretmanager.secretAccessor
Meluncurkan versi secret baru ke workload
Karena versi secret yang baru dan valid telah didaftarkan dengan eksternal sistem dan disimpan di Secret Manager, luncurkan ke aplikasi. 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 rahasia yang lama, versi tersebut bisa aman menjadi bersih. Proses pembersihan tergantung pada jenis rahasia, tetapi secara umum:
-
Pastikan versi secret baru telah diluncurkan sepenuhnya ke semua menggunakan berbagai aplikasi obrolan.
-
Nonaktifkan versi secret lama di Secret Manager dan verifikasi bahwa aplikasi tidak rusak (tunggulah selama waktu yang wajar untuk manusia untuk mengintervensi jika penonaktifan mengganggu konsumen).
-
Hapus atau batalkan pendaftaran versi secret lama dari sistem eksternal.
-
Hancurkan versi rahasia lama di Secret Manager