Topik ini memperkenalkan konsep rotasi secret. Sebelum memulai, sebaiknya tinjau Ringkasan platform untuk memahami lanskap Google Cloud secara keseluruhan. Sebaiknya baca juga ringkasan produk Secret Manager.
Pengantar
Rotasi berkala membantu:
- Batasi dampak jika rahasia bocor.
- Pastikan individu yang tidak lagi memerlukan akses ke secret tidak dapat menggunakan nilai secret lama.
- Lakukan terus alur rotasi untuk mengurangi kemungkinan pemadaman layanan jika terjadi rotasi darurat.
Secret Manager memiliki konsep Secret, Secret Versions, dan Rotation Schedules, yang memberikan dasar untuk membuat workload yang mendukung secret yang dirotasi.
Topik ini memberikan rekomendasi untuk merotasi secret yang disimpan di Secret Manager. Bagian berikutnya membahas manfaat dan kompromi untuk:
Mengikat ke versi secret
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 menjadi tidak valid 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 prediksi dan mengurangi kompleksitas operasional.
- Proses manajemen 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 mengubah 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 di 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 hal ini tidak membatalkan validasi secret yang ada sehingga beban kerja yang ada tidak terpengaruh.
Perbarui Secret Manager dengan secret baru.
Buat
SecretVersion
baru di Secret Manager. Tindakan ini juga akan memperbarui aliaslatest
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 di Pub/Sub 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 yang 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 Secrets untuk menyimpan status selama rotasi.
Tambahkan label ke Secret untuk melacak jumlah versi terakhir yang berhasil
ditambahkan selama alur kerja rotasi (yaitu
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 rahasia dan versi rahasia.
Izin Identity and Access Management
Proses rotasi Anda akan memerlukan izin secretmanager.versions.add
untuk
menambahkan versi secret baru, dan mungkin memerlukan 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 (dapat berupa satu atau beberapa):
roles/secretmanager.secretVersionAdder
roles/secretmanager.secretVersionManager
roles/secretmanager.secretAdmin
roles/secretmanager.secretAccessor
Meluncurkan SecretVersion
baru ke workload
Setelah SecretVersion
baru yang valid didaftarkan ke sistem
eksternal dan disimpan di Pengelola Secret, luncurkan ke aplikasi
Anda. Peluncuran ini bervariasi berdasarkan pendekatan Anda terhadap binding secret
(lihat bagian Mengikat ke versi 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 akan 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.
- Hapus versi secret lama di Secret Manager.
Langkah selanjutnya
- Pelajari cara menyiapkan jadwal rotasi untuk secret.