Topik wawancara representatif

Wawancara System Design: Merancang Layanan Manajemen Secrets Multi-Tenant

Desain sistemSulit
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Rancang layanan manajemen secrets multi-tenant yang menyimpan 20 juta nama secret aktif, melayani 100.000 pembacaan dan 2.000 penulisan per detik pada beban puncak (peak), serta mengembalikan pembacaan regional di bawah 50 milidetik pada p99. Workload menggunakan identitas least-privilege; penulisan yang telah diakui (acknowledged) tidak boleh hilang di dalam suatu region; media penyimpanan biasa tidak boleh menerima nilai secret dalam bentuk plaintext. Layanan harus mendukung versi, rotasi, pencabutan (revocation), audit, lease secret dinamis, dan pemulihan dari kegagalan regional. Jelaskan model ancaman, API, model data, batasan enkripsi, konsistensi, caching, ketersediaan, disaster recovery, dan verifikasi.

Prompt dan Konteks yang Berlaku

Rancang layanan manajemen secrets untuk platform multi-tenant. Sebuah secret dapat berupa kredensial database, token API, kunci privat, atau sertifikat. Sistem menyimpan 20 juta nama secret aktif dengan rata-rata tiga versi yang dipertahankan. Nilai berukuran rata-rata 2 KiB dan tidak boleh melebihi 64 KiB. Lalu lintas puncak adalah 100.000 pembacaan dan 2.000 penulisan versi per detik. Di home region secret, pembacaan yang berhasil harus selesai di bawah 50 milidetik pada p99.

Setiap region mencakup tiga availability zone. Penulisan yang diakui oleh home region harus tetap bertahan meski kehilangan satu zone. Target disaster-recovery saat kehilangan seluruh region adalah RTO 15 menit dan RPO satu menit. Volume dan target tersebut merupakan asumsi wawancara, bukan batasan resmi dari produk secrets komersial. Jika bisnis membutuhkan zero data loss setelah kegagalan regional, kandidat harus secara eksplisit memperhitungkan biaya konsensus lintas-region sinkron atau batasan durabilitas setara lainnya.

Model ancaman mencakup snapshot database yang dicuri, backup yang disusupi, kesalahan otorisasi lintas-tenant, operator dengan akses ke penyimpanan biasa, logging yang tidak disengaja, dan pencurian satu host data-plane. Model ini tidak mengklaim dapat menghentikan workload yang telah diotorisasi untuk menggunakan nilai yang diperolehnya secara sah. Desain harus membatasi hak istimewa dan masa berlaku kredensial workload tersebut, mempertahankan atribusi, serta membatasi blast radius dari kompromi keamanan.

Cakupan mencakup autentikasi workload, evaluasi kebijakan, secret statis dan dinamis, enkripsi, versi immutable, rotasi bertahap, pencabutan, lease, audit, replikasi, dan pemulihan. Membangun identity provider organisasi, database yang mengonsumsi kredensial yang dihasilkan, dan layanan manajemen kunci kriptografi tujuan umum merupakan dependensi eksternal. Materi wawancara security-engineering publik yang tersedia pada tahun 2026 mencakup prompt spesifik untuk merancang layanan manajemen secrets dan mencantumkan secrets manager microservice sebagai latihan security system-design. Hal ini mendukung representasi topik saat ini tanpa membuktikan frekuensinya di perusahaan tertentu.

Apa yang Dievaluasi oleh Pewawancara

Sinyal pertama adalah batasan perlindungan yang tepat. Mengatakan "enkripsi database" membiarkan kunci dekripsi berada di samping ciphertext dan tidak menjelaskan kompromi mana yang dapat dibendung. Jawaban yang kuat memisahkan root yang dilindungi hardware atau KMS, key-encryption key dengan cakupan tenant, data-encryption key per versi, dan penyimpanan ciphertext biasa. Jawaban tersebut juga mengidentifikasi di mana plaintext dapat ada secara singkat.

Sinyal kedua adalah otorisasi pada setiap request. Isolasi tenant tidak boleh bergantung pada prefiks path yang disediakan oleh pemanggil. Layanan menurunkan tenant, workload, environment, dan role dari identitas yang terautentikasi, mengevaluasi kebijakan berversi untuk tindakan dan resource yang tepat, serta menyertakan fakta-fakta tersebut dalam event audit. Autentikasi, otorisasi, enkripsi, dan audit adalah kontrol yang berbeda.

Sinyal ketiga adalah penalaran siklus hidup (lifecycle). Nilai baru, perubahan wrapping key kriptografi, dan perubahan kredensial pada database eksternal adalah tiga operasi yang berbeda. Rotasi di seluruh sistem eksternal bukanlah satu transaksi database atomik. Hal tersebut membutuhkan tahapan yang tahan lama (durable), aturan tumpang tindih (overlap), idempoten, pengujian, kompensasi, dan rekonsiliasi.

Sinyal keempat adalah semantik pencabutan yang jujur. Menolak pembacaan di masa mendatang tidak menghapus password statis yang sudah disalin ke dalam sebuah proses. Pencabutan darurat yang efektif juga menonaktifkan atau merotasi kredensial pada sistem yang menerimanya. Kredensial dinamis dapat menawarkan kedaluwarsa dan pencabutan yang lebih kuat karena sistem target berpartisipasi dalam lease.

Terakhir, kandidat harus menyeimbangkan latensi, keamanan, dan ketersediaan. Memanggil HSM untuk setiap pembacaan dari 100.000 pembacaan per detik biasanya merupakan bottleneck yang salah. Melakukan caching plaintext dalam shared distributed cache adalah solusi yang salah. Jawaban harus menggunakan hierarki kunci, cache memori terproteksi dengan cakupan sempit, batasan kebijakan data basi (stale) yang eksplisit, dan mode kegagalan yang telah diuji.

Pertanyaan untuk Diklarifikasi Sebelum Menjawab

  • Jenis secret apa saja yang masuk dalam cakupan? Nilai statis buram (opaque) membutuhkan penyimpanan versi. Pengguna database dan sertifikat mungkin

juga mendukung penerbitan dinamis dan pencabutan di sisi target.

  • Siapa yang membaca secret? Utamakan identitas workload dan sesi berumur pendek. Akses melihat oleh manusia, jika diizinkan sama sekali,

memerlukan persetujuan yang lebih ketat, autentikasi bertingkat (step-up), dan kebijakan audit terpisah.

  • Apa jaminan dari pencabutan? Layanan dapat langsung menolak pembacaan baru. Membatalkan nilai statis yang telah disalin

mengharuskan sistem downstream untuk merotasi atau menonaktifkannya.

  • Konsistensi apa yang dibutuhkan current? Desain ini membuat promosi dan pencabutan bersifat linearizable per secret di

home region-nya. Pemanggil juga dapat meminta versi immutable secara eksplisit.

  • Bisakah sebuah region mengalami kegagalan dengan zero data loss? RPO DR yang dinyatakan adalah satu menit. RPO nol membutuhkan pengakuan

lintas-region yang sinkron dan mengubah trade-off latensi serta ketersediaan.

  • Bisakah aplikasi menggunakan cache lokal saat terjadi pemadaman (outage)? Hanya kebijakan eksplisit yang dapat mengizinkan cache agen terenkripsi

dan berbatas waktu untuk secret statis tertentu. Hal ini melemahkan jaminan pencabutan langsung.

  • Seberapa besar nilai dan versinya? Prompt membatasi nilai pada 64 KiB dan mengasumsikan rata-rata tiga versi yang dipertahankan.

Dokumen besar berada dalam desain penyimpanan objek terenkripsi yang berbeda.

  • Apa yang harus dimuat dalam catatan audit? Principal, workload, tenant, identifier resource, tindakan, versi kebijakan,

keputusan, ID request, region, dan waktu; tidak boleh memuat nilai plaintext.

  • Siapa yang dapat mengadministrasikan root of trust? Pemisahan tugas, akses break-glass yang dikendalikan kuorum, dan latihan pemulihan

sangat diperlukan. Administrator harian universal merusak isolasi tenant.

Kerangka Jawaban 30 Detik

“Saya akan memisahkan control plane untuk kebijakan dan pembuatan dari data plane baca berlatensi rendah. Sebuah workload melakukan autentikasi dengan identitas platform berumur pendek; layanan menurunkan tenant-nya dan mengevaluasi kebijakan least-privilege berversi untuk secret dan tindakan yang tepat. Setiap versi secret immutable dienkripsi dengan kunci data acak menggunakan authenticated encryption. Kunci data tersebut di-wrap oleh kunci tenant, sementara HSM atau KMS melindungi root yang meng-unwrap kunci tenant; penyimpanan biasa hanya melihat ciphertext dan kunci yang ter-wrap. Kuorum transaksional regional secara atomik menambahkan versi dan memindahkan pointer current dengan compare-and-set. Rotasi adalah alur kerja create, install, test, promote, overlap, dan retire yang durable, karena target eksternal tidak dapat bergabung dalam satu transaksi. Kredensial dinamis membawa lease yang diperpanjang atau dicabut oleh penerbit. Saya akan melakukan caching ciphertext dan secara singkat melakukan caching kunci yang di-unwrap hanya di dalam memori layanan yang diperkeras (hardened), tidak pernah di dalam cache plaintext bersama. Audit dikirim ke pipeline append-only yang dilindungi secara terpisah. Saya akan memverifikasi penolakan lintas-tenant, promosi konkuren, kehilangan kunci, pemadaman KMS, pencabutan yang macet, kebocoran log, dan pemulihan regional penuh.”

Pembahasan Mendalam Langkah demi Langkah

Langkah 1: Ubah prompt menjadi invarian dan batasan ancaman

Mulailah dengan lima invarian:

text
1. A request can address only a tenant derived from authenticated identity.
2. Ordinary databases, queues, logs, traces, and backups never receive plaintext values or plaintext keys.
3. A published version is immutable; promotion only changes a version pointer.
4. Every allow and deny decision emits an audit event without the value.
5. Acknowledged regional writes survive one availability-zone failure.

Invarian ini masih menyisakan risiko residual. Workload yang diotorisasi menerima plaintext dan dapat disusupi. Proses data-plane secara singkat memegang materi kunci yang di-unwrap dan plaintext. Administrator root-of-trust yang berniat jahat dapat melampaui kebijakan normal. Kurangi risiko tersebut dengan identitas berumur pendek, kebijakan sempit, isolasi proses, penonaktifan core dump, memori terproteksi, audit independen, pemisahan tugas, dan cakupan kunci yang kecil. Jangan mengklaim bahwa enkripsi saat istirahat (at rest) menyelesaikan kompromi runtime.

Langkah 2: Pisahkan control plane dari read data plane

Control plane mengelola tenant, kebijakan, metadata secret, versi baru, tugas rotasi, persetujuan, dan tindakan darurat. Laju penulisannya lebih rendah, dan lebih mengutamakan validasi ketat serta alur kerja yang dapat diaudit. Data plane mengautentikasi workload, mengevaluasi kebijakan, mendekripsi versi yang diizinkan, dan mengembalikannya melalui mutually authenticated TLS. Jalur utamanya (hot path) harus tetap ramping.

Setiap tenant memiliki home region untuk penulisan secret dan kebijakan yang otoritatif. Kuorum transaksional tiga zona di region tersebut melakukan commit metadata, ciphertext, pointer versi, lease, catatan idempotensi, dan outbox audit. Node baca dapat diskalakan secara horizontal, tetapi pembacaan current melalui penyimpanan konsisten kuat di home region atau replika dengan read barrier yang terbukti. Replika yang basi (stale) tidak boleh memunculkan kembali versi yang telah dicabut.

Identitas berasal dari identity provider platform melalui mekanisme seperti sertifikat workload atau token service-account yang ditandatangani. Layanan secrets memvalidasi penerbit, audiens, kedaluwarsa, identitas workload, dan channel binding, kemudian memetakan identitas tepercaya ke tenant dan role. Klien tidak dapat mengganti tenant tersebut dengan sebuah header.

Langkah 3: Tentukan API yang ringkas dan model data immutable

Salah satu kemungkinan API adalah:

text
POST /v1/secrets/{path}/versions
  { value, idempotencyKey, expectedCurrentVersion? }
  -> { secretId, version, status: "PENDING" }

POST /v1/secrets/{path}/versions/{version}/promote
  { expectedCurrentVersion, idempotencyKey }
  -> { currentVersion }

GET /v1/secrets/{path}?version=current
  -> { value, version, expiresAt? }

POST /v1/dynamic/{role}/credentials
  { requestedTtl, idempotencyKey }
  -> { value, leaseId, expiresAt, renewable }

POST /v1/leases/{leaseId}/renew
POST /v1/leases/{leaseId}/revoke

Path adalah nama resource, bukan bukti otorisasi. Server menormalisasikannya sekali, menolak pengodean yang ambigu, menurunkan tenant dari identitas, dan memeriksa kebijakan khusus tindakan.

text
Secret(secret_id, tenant_id, canonical_path, state,
       current_version, policy_ref, created_at)

SecretVersion(secret_id, version, status, ciphertext, nonce, auth_tag,
              wrapped_dek, tenant_kek_version, content_fingerprint_hmac,
              created_by, created_at)

Policy(policy_id, tenant_id, version, document, state, created_at)

Lease(lease_id, tenant_id, secret_id, principal_id, target_ref,
      status, expires_at, renewable_until, last_error)

Idempotency(tenant_id, principal_id, operation, key,
            request_fingerprint_hmac, result_ref, expires_at)

(tenant_id, canonical_path) dan (secret_id, version) bersifat unik. Baris versi tidak pernah mengubah payload terenkripsinya. Promosi menggunakan pembaruan bersyarat pada current_version; dua administrator yang berlomba untuk mempromosikan dari versi 7 tidak dapat saling menimpa secara diam-diam. Outbox audit di-commit bersama setiap perubahan status dan kemudian diekspor ke penyimpanan yang dikontrol secara terpisah. Fingerprint adalah keyed HMAC yang dibuat dengan kunci terpisah dengan cakupan tenant, bukan raw hash dari kredensial berentropi rendah yang dapat diuji secara offline oleh snapshot yang dicuri.

Langkah 4: Bangun hierarki envelope-encryption

Hasilkan data-encryption key acak untuk setiap versi dan enkripsi nilainya dengan mode authenticated-encryption. Ikatkan tenant_id, secret_id, versi, dan identifier algoritma sebagai additional authenticated data, sehingga ciphertext tidak dapat dipindahkan ke tenant atau versi lain tanpa terdeteksi. Simpan ciphertext, nonce, tag autentikasi, dan wrapped data key secara bersama-sama.

Setiap tenant memiliki satu atau lebih key-encryption key berversi. Root yang dilindungi oleh HSM atau KMS cloud meng-unwrap kunci tenant tersebut hanya untuk node data-plane yang diotorisasi. Kunci tenant me-wrap kunci data dari setiap versi. Oleh karena itu, snapshot penyimpanan biasa tidak memiliki materi yang diperlukan untuk mendekripsi nilai. Host data-plane yang dicuri hanya mengekspos kunci tenant dan kunci data yang ada di dalam proses tersebut, sehingga penempatan dan cakupan cache harus membatasi berapa banyak tenant yang dapat dilayani oleh satu node.

text
HSM/KMS root
  -> unwrap tenant KEK version
      -> unwrap per-secret-version DEK
          -> AEAD-decrypt secret value with bound tenant/version metadata

Memanggil HSM untuk setiap pembacaan akan membuat layanan root menjadi bottleneck latensi dan throughput. Node data-plane dapat melakukan caching kunci tenant atau kunci data yang di-unwrap untuk periode singkat dan terbatas di dalam memori yang diperkeras, dipartisi berdasarkan risiko tenant. Node membersihkan cache saat terjadi event kebijakan atau kunci dan saat proses dimatikan. Shared Redis, disk swap, crash dump, log, dan trace tidak pernah menerima plaintext atau kunci yang di-unwrap.

Mengubah wrapping key tenant dapat me-rewrap kunci data tanpa mendekripsi setiap nilai yang disimpan. Mengubah password database akan membuat nilai secret baru dan harus berkoordinasi dengan database. Operasi-operasi ini memiliki blast radius yang berbeda dan tidak boleh digabungkan dalam satu tombol "rotate" yang ambigu.

Langkah 5: Jadikan otorisasi dan caching sadar-pencabutan (revocation-aware)

Kebijakan menentukan tindakan seperti create-version, promote, read, issue-dynamic, renew, revoke, dan administer-policy. Kebijakan dapat membatasi tenant, project, environment, path, workload, zona jaringan, waktu, dan TTL maksimum. Deny mengalahkan allow. Akses plaintext oleh manusia dinonaktifkan secara default; pengecualian yang disetujui mencatat tiket, pemberi persetujuan, alasan, dan izin berumur pendek.

Evaluasi kebijakan berjalan secara lokal untuk efisiensi latensi, tetapi cache kebijakan memiliki versi dan usia maksimum. Pencabutan kebijakan atau principal di-commit terlebih dahulu, memublikasikan pembatalan (invalidation), dan memajukan epoch otorisasi tenant. Node baca harus membuktikan bahwa ia memiliki setidaknya epoch yang diperlukan sebelum melayani request. Jika pembatalan tidak tersedia dan usia maksimum kedaluwarsa, pembacaan sensitif harus fail-closed alih-alih mempercayai kebijakan selamanya.

Ciphertext dan metadata immutable aman untuk di-cache secara luas. Plaintext tidak aman. Agen di sisi workload dapat menyimpan nilai yang diizinkan di memorinya sendiri hingga TTL yang dideklarasikan, mengurangi pembacaan berulang. Jika produk mengizinkan cache disk terenkripsi untuk secret penting tertentu yang kritis bagi ketersediaan, kunci terikat perangkat, kedaluwarsa, dan jaminan pencabutannya yang lebih lemah harus dinyatakan secara eksplisit. Mengembalikan secret lama hanya karena control plane sedang down bukanlah fallback universal.

Langkah 6: Perlakukan rotasi kredensial sebagai alur kerja yang dapat dipulihkan

Rotasi kredensial statis di seluruh database target mengikuti tahapan durable:

text
CREATED_PENDING
  -> INSTALLED_AT_TARGET
  -> VERIFIED
  -> PROMOTED_CURRENT
  -> OLD_VERSION_IN_OVERLAP
  -> OLD_VERSION_REVOKED
  -> COMPLETE

Setiap transisi memiliki operasi konektor idempoten dan bukti yang dicatat. Buat kredensial baru, pasang di target, uji melalui jalur yang dimaksud, promosikan versi baru, izinkan tumpang tindih berbatas saat konsumen membutuhkannya, lalu nonaktifkan kredensial lama di target. Worker rekonsiliasi membandingkan status alur kerja dengan target dan melanjutkan setelah terjadi crash. Jika pemasangan berhasil tetapi respons hilang, proses pencarian harus menemukan fakta tersebut alih-alih membuat kredensial lain.

Rotasi darurat dapat melewati tahap tumpang tindih karena nilai lama diduga telah disusupi. Pilihan tersebut dapat menciptakan pemadaman aplikasi dan harus memerlukan jalur otorisasi dengan cakupan insiden. Menolak pembacaan ke versi tersimpan yang lama saja tidak cukup selama sistem target masih menerimanya.

Untuk secret dinamis, konektor membuat kredensial unik berumur pendek untuk suatu workload dan mencatat lease. Pembaruan mengembalikan masa kedaluwarsa baru yang sebenarnya, yang mungkin lebih pendek dari yang diminta. Kedaluwarsa atau pencabutan manual menginstruksikan target untuk membatalkan kredensial. Jika target tidak dapat dijangkau, lease memasuki status REVOCATION_PENDING; percobaan ulang, peringatan, dan runbook operator tetap aktif. Layanan tidak boleh menandainya telah dicabut hanya karena pesan antrean telah dikirim.

Langkah 7: Anggarkan kapasitas dan isolasi tenant yang padat (hot tenants)

Pada tiga versi yang dipertahankan per 20 juta nama dan 2 KiB per nilai, raw byte nilai terenkripsi adalah sekitar:

text
20,000,000 × 3 × 2 KiB = 122,880,000,000 bytes ≈ 114 GiB

Jika metadata terenkripsi rata-rata menambah 1 KiB per versi, itu menambahkan sekitar 57 GiB. Tiga replika regional menempatkan estimasi penyimpanan awal mendekati 513 GiB sebelum indeks, audit, lease, idempotensi, backup, dan pertumbuhan data. Aritmetika ini berasal dari prompt dan merupakan dasar penentuan ukuran (sizing baseline), bukan tolok ukur produk komersial.

Pada 100.000 pembacaan per detik dan nilai kembali rata-rata 2 KiB, egress plaintext saja mendekati 195 MiB per detik, sebelum overhead TLS dan respons. Lakukan sharding tenant berdasarkan identifier tenant yang stabil, lalu isolasi tenant yang sangat padat atau memiliki regulasi ketat ke dalam cell khusus. Terapkan batas konkurensi dan rate per tenant sehingga satu workload yang disusupi tidak dapat menghabiskan semua worker dekripsi atau kapasitas audit.

Latensi baca harus diurai menjadi validasi identitas, evaluasi kebijakan, pencarian metadata, unwrap/cache kunci, dekripsi, antrean audit, dan waktu jaringan. Cache miss HSM dan backpressure audit memerlukan anggaran terpisah. Jangan pernah membuang audit secara diam-diam demi melindungi p99; gunakan batasan outbox/lokal yang durable atau tolak request sensitif ketika catatan audit yang diperlukan tidak dapat dipertahankan.

Langkah 8: Rancang pemulihan regional dan pemulihan root secara terpisah

Mereplikasi status terenkripsi dan catatan outbox audit secara asinkron ke warm disaster-recovery region, dengan lag replikasi yang terukur. Promosi membutuhkan fencing epoch sehingga home region yang lama tidak dapat melanjutkan penulisan sebagai primary kedua. Pada target RPO satu menit yang dinyatakan, pemanggil harus memahami bahwa versi terbaru yang diakui mungkin perlu dibuat ulang setelah kehilangan seluruh region. Jika hal itu tidak dapat diterima, wajibkan kuorum lintas-region sebelum mengakui penulisan.

Region DR juga memerlukan akses independen ke layanan root-of-trust, identitas workload yang berfungsi, status kebijakan, dan ekspor audit. Menyalin ciphertext saja bukanlah rencana pemulihan. Uji snapshot terenkripsi dan point-in-time restore, tetapi lindungi konfigurasi, kredensial boot, dan materi auto-unseal secara terpisah karena materi tersebut bisa sensitif bahkan ketika snapshot data dienkripsi.

Pemulihan root menggunakan prosedur break-glass yang dikendalikan kuorum, administrator terpisah, bukti immutable, dan latihan rutin. Kehilangan kunci tenant dapat menghancurkan akses ke nilai-nilai tenant tersebut; kebocoran kunci dapat mengekspos setiap nilai yang di-wrap oleh kunci tersebut. Oleh karena itu, backup, rotasi, penempatan, dan pemusnahan kunci memerlukan pengujian siklus hidup yang eksplisit.

Langkah 9: Verifikasi properti keamanan dan perilaku saat terjadi kegagalan

Bangun pengujian berdasarkan invarian, bukan hanya latensi pada skenario normal (happy-path):

  • Buat upaya akses path lintas-tenant, encoded-path, kebijakan wildcard, dan identitas basi, lalu buktikan bahwa semuanya ditolak.
  • Uji kondisi balapan (race condition) pada pembuatan versi, promosi, pencabutan kebijakan, dan pembacaan; pastikan tidak ada node basi yang melayani versi yang baru saja ditolak.
  • Pindai database, antrean, log, trace, crash dump, dan backup untuk mencari materi canary plaintext dan kunci yang di-unwrap.
  • Simulasikan latensi KMS, penggusuran cache kunci (eviction), kehilangan kuorum penyimpanan, backpressure audit, dan pemadaman total control-plane.
  • Interupsi setiap tahap rotasi sebelum dan sesudah tindakan di sisi target; buktikan bahwa rekonsiliasi konvergen tanpa

kredensial duplikat atau penyelesaian palsu.

  • Buat target secret dinamis tidak tersedia selama proses kedaluwarsa; buktikan bahwa lease tetap berstatus pending secara terlihat hingga pembatalan di sisi target

berhasil.

  • Pulihkan region DR dari replikasi terenkripsi dan snapshot; verifikasi fencing, identitas, kebijakan, kunci, audit, RTO,

dan RPO terukur.

  • Lakukan pengujian beban pada distribusi tenant yang sangat timpang pada 100.000 pembacaan dan 2.000 penulisan per detik sambil mengukur p99,

akurasi penolakan, lalu lintas HSM, cakupan cache, dan kelengkapan audit.

Contoh Jawaban Berkualitas Tinggi

“Pertama-tama saya akan menyatakan bahwa layanan ini melindungi dari kompromi penyimpanan, backup, lintas-tenant, logging, dan kompromi host terbatas, sementara workload yang diotorisasi tetap dapat menyalahgunakan nilai yang diterimanya. Setiap request dimulai dengan identitas workload berumur pendek. Layanan menurunkan tenant dan workload dari identitas tersebut, kemudian mengevaluasi kebijakan berversi untuk resource dan tindakan yang tepat; path yang disediakan pemanggil tidak dapat memilih tenant lain.

Saya akan menggunakan versi immutable. Request create menulis versi pending, dan promosi secara kondisional memindahkan pointer current secret dari versi sebelumnya yang diharapkan. Kuorum tiga zona di home region melakukan commit ciphertext, metadata, idempotensi, dan outbox audit secara bersamaan. Pembacaan current menggunakan read barrier sehingga replika yang basi tidak dapat melayani versi yang telah dicabut.

Untuk enkripsi, setiap versi mendapatkan kunci data acak dan authenticated encryption yang diikat ke tenant, secret, dan versi. Kunci tenant me-wrap kunci data tersebut, dan root yang dilindungi HSM atau KMS meng-unwrap kunci tenant hanya pada node data-plane yang diotorisasi. Penyimpanan biasa dan backup berisi ciphertext dan kunci yang ter-wrap. Node baca dapat melakukan caching singkat terhadap kunci yang di-unwrap di dalam memori yang diperkeras dan dipartisi per tenant; plaintext tidak pernah masuk ke shared cache, log, trace, swap, atau core dump.

Rotasi kredensial adalah state machine: create, install di target, verify, promote, overlap, revoke kredensial target lama, dan complete. Setiap panggilan konektor bersifat idempoten dan direkonsiliasi, karena database eksternal tidak dapat bergabung dalam transaksi metadata. Kompromi darurat dapat menghilangkan masa overlap. Kredensial dinamis diterbitkan per workload dengan lease; kedaluwarsa selesai hanya setelah target mengonfirmasi pencabutan, jika tidak, sistem mempertahankan status pending yang terlihat dan memicu peringatan.

Control plane mengelola kebijakan, versi, persetujuan, dan alur kerja; cell data-plane yang diskalakan secara horizontal melayani pembacaan. Ciphertext dapat di-cache secara luas, kebijakan memiliki cache berversi yang dibatasi waktu, dan caching kunci yang di-unwrap bersifat singkat dan lokal. Untuk skenario kehilangan region, status terenkripsi direplikasi ke warm region dengan RPO satu menit dan fencing epoch mencegah split brain. Jika persyaratannya berubah menjadi RPO nol, saya akan melakukan commit sinkron lintas-region dan menerima latensi yang lebih tinggi atau ketersediaan tulis yang lebih rendah.

Terakhir, saya akan menguji serangan lintas-tenant dan encoded-path, promosi dan pencabutan konkuren, kebocoran canary ke seluruh observabilitas dan media backup, pemadaman KMS dan audit, crash di setiap langkah rotasi, pencabutan lease yang macet, dan pemulihan DR penuh. Desain ini dianggap lulus hanya jika keputusan keamanan tetap benar di bawah kegagalan tersebut dan puncak 100.000 pembacaan tetap memenuhi anggaran latensi terukurnya.”

Kesalahan Umum

  • Menggunakan satu kunci enkripsi database di samping database → kompromi snapshot dapat mencakup ciphertext dan

jalur dekripsinya → pisahkan root HSM/KMS, wrapping key tenant, kunci data per versi, dan penyimpanan biasa.

  • Mempercayai tenant atau path dalam request → perubahan nama objek menjadi celah akses lintas-tenant → **turunkan tenant

dari identitas terverifikasi, lakukan kanonikalisasi sekali, dan otorisasi tindakan serta resource yang tepat.**

  • Mencatat body request atau response dalam log untuk debugging → stack observabilitas menjadi penyimpanan secret plaintext →

gunakan identifier, keputusan, versi, dan uji kebocoran canary tanpa nilai aslinya.

  • Memanggil HSM pada setiap pembacaan → latensi dan kuota root-of-trust menjadi bottleneck platform → **gunakan envelope

encryption dan cache kunci memori terproteksi berbatas dengan blast radius eksplisit.**

  • Menaruh nilai terdekripsi di Redis → optimasi latensi menciptakan batasan kompromi plaintext yang luas →

lakukan caching ciphertext secara luas dan simpan plaintext hanya di memori terbatas milik konsumen yang diotorisasi.

  • Memperlakukan rotasi sebagai satu pembaruan tunggal → pemasangan di target bisa berhasil saat metadata gagal atau sebaliknya → **gunakan alur kerja

bertahap yang durable, operasi konektor idempoten, aturan overlap, dan rekonsiliasi.**

  • Menandai lease telah dicabut setelah memublikasikan pesan → kredensial downstream mungkin masih berfungsi → **pertahankan status

pending hingga pembatalan di sisi target dikonfirmasi dan beri peringatan pada pencabutan yang macet.**

  • Menjanjikan pencabutan instan atas nilai statis yang sudah disalin → pembacaan di masa mendatang dapat ditolak, tetapi salinan yang ada tetap

dapat digunakan → rotasi atau nonaktifkan kredensial pada sistem penerima dan prioritaskan kredensial dinamis berumur pendek.

  • Fail-open pada kebijakan yang basi tanpa batas waktu → principal yang telah dihapus dapat terus membaca nilai sensitif → **berikan versi

pada cache kebijakan, batalkan cache tersebut, tegakkan batas usia maksimum, dan lakukan fail-closed setelah melewati batas.**

  • Menyalin ciphertext ke region kedua dan menyebutnya DR → identitas, kunci root, kebijakan, fencing, dan audit mungkin

masih belum tersedia → uji seluruh grafik dependensi pemulihan dan ukur RTO serta RPO aktual.

Pertanyaan Lanjutan dan Jawabannya

Pertanyaan lanjutan 1: Apa perbedaan secrets manager dengan KMS?

Secrets manager menyimpan dan mengelola versi kredensial buram (opaque), mengotorisasi pengambilan, mengoordinasikan rotasi, menerbitkan lease, dan mengaudit akses. KMS mengelola kunci kriptografi dan melakukan operasi seperti wrapping atau penandatanganan (signing). Desain ini menggunakan KMS atau HSM sebagai root of trust-nya; layanan ini tidak mengekspos root tersebut sebagai secret biasa yang dapat diambil.

Pertanyaan lanjutan 2: Bisakah Anda melakukan caching secret di dalam aplikasi?

Bisa, hanya di bawah kontrak yang eksplisit. Agen dapat menyimpan nilai yang diizinkan di dalam memori proses hingga batas TTL tertentu dan memperbaruinya sebelum kedaluwarsa. Hal tersebut mengurangi dependensi ketersediaan dan volume pembacaan, tetapi memperpanjang waktu di mana pencabutan kebijakan saja tidak dapat menghapus salinan yang sudah ada. Kredensial berisiko tinggi atau dinamis harus menggunakan lease yang lebih pendek dan pencabutan di sisi target daripada cache tanpa batas.

Pertanyaan lanjutan 3: Apa yang terjadi ketika KMS atau HSM tidak tersedia?

Node hanya dapat melanjutkan pemrosesan dengan kunci yang telah di-unwrap di dalam masa berlaku cache yang disetujui. Tenant baru, cache miss, dan operasi root-key akan fail-closed. Lacak cakupan cache, tingkat error KMS, dan jendela aman yang tersisa; lakukan load shedding sebelum semua node kedaluwarsa secara bersamaan. Memperpanjang masa berlaku kunci selama insiden adalah keputusan keamanan yang membutuhkan kebijakan yang telah ditentukan sebelumnya, bukan sekadar loop percobaan ulang otomatis.

Pertanyaan lanjutan 4: Bagaimana cara merotasi kunci tenant tanpa mendekripsi setiap secret?

Unwrap setiap kunci data per versi dengan kunci tenant lama dan wrap dengan kunci tenant baru, lebih disukai di dalam layanan kunci tepercaya sehingga kunci data plaintext tidak meninggalkan batasan tersebut. Simpan versi kunci tenant dan wrapped data key, buat checkpoint migrasi, dan pertahankan kunci tenant lama hingga setiap referensi dan kebijakan backup mengizinkan penghapusannya. Nilai secret terenkripsi itu sendiri tidak berubah.

Pertanyaan lanjutan 5: Bagaimana cara mencegah operator berhak istimewa membaca secret milik semua tenant?

Pisahkan administrasi kebijakan, administrasi kunci, operasi infrastruktur, dan peninjauan audit. Nonaktifkan pengambilan plaintext rutin oleh manusia, wajibkan izin berumur pendek yang disetujui kuorum untuk pengecualian, tempatkan tenant yang diatur regulasi dalam cell dan cakupan kunci terpisah, serta kirim bukti ke sistem audit yang dikendalikan secara independen. Tidak boleh ada satu pun role penggunaan harian yang dapat memberikan akses ke dirinya sendiri sekaligus mendekripsi nilai tanpa bukti eksternal.

Pertanyaan lanjutan 6: Apakah pembacaan harus tetap tersedia saat home region mengalami pemadaman?

Hanya jika region DR memiliki authoritative epoch yang ter-fence, kebijakan dan data terenkripsi yang cukup mutakhir, akses ke root of trust-nya, serta RPO yang disepakati secara jelas. Melayani dari replika basi mana pun dapat menghidupkan kembali akses yang telah dicabut. Pada RPO satu menit yang dinyatakan, promosikan warm region melalui proses failover yang telah diuji; RPO nol membutuhkan commit lintas-region sinkron sebelum insiden terjadi.

Pertanyaan lanjutan 7: Mengapa tidak menyimpan secret hanya sebagai environment variable?

Environment variable adalah mekanisme pengiriman, bukan manajemen siklus hidup. Variabel tersebut dapat terekspos melalui inspeksi proses, crash dump, diagnostik, proses anak (child processes), atau konfigurasi deployment; variabel tersebut juga tidak memiliki versi terpusat, rotasi di sisi target, lease, dan atribusi per pembacaan. Jika agen deployment menginjeksikan environment variable, jaga agar cakupan dan masa berlakunya tetap kecil serta pertahankan secrets manager sebagai sumber kebenaran kebijakan dan siklus hidup.

Sumber publik

Pertanyaan terkait

Alat wawancara terkait

Gunakan Jawab untuk jawaban desain sistem

Perjelas persyaratan terlebih dahulu, lalu lanjutkan dengan skala, arsitektur, pilihan komponen, dan trade-off.

Lihat alat