Alur kerja persetujuan Human-in-the-Loop
Teks asli berbahasa Inggris -- terjemahan menunggu tinjauan teknis
escalate_on_deny does not raise an approval requestThe deny fires. A rule tagged escalate_on_deny: true denies exactly as
written -- the matched rule's own policy_id, effect: "deny",
reason_code: "RULE_MATCH". You are protected.
The escalation does not. The tag is accepted by the policy schema and
carried into the policy bundle, and no enforcer acts on it: no approval request
is raised, no approver is notified, and decision.requires_approval stays
false. Code that branches on decision.requires_approval in order to act on
this tag therefore never runs. (A different mechanism, LLM function policies'
require_approval, does set that field -- escalate_on_deny is not wired to
it.) Tracking: #2391.
To request approval today, call it explicitly.
client.request_approval(decision) posts a real approval request. Nothing
about the tag calls it for you. See Approval callback.
Per #2363 the
approver-facing /approvals pages are gated in production, so requests are
resolved through the API.
This applies to the published Python SDK (controlzero 1.13.14) and the
published Node SDK (@controlzero/sdk 1.13.6) alike.
Mode yang didukung: Hosted Hybrid Local Tersedia di: Teams (Free + Solo dapat membaca tetapi tidak dapat mengaktifkan; memerlukan pemberi persetujuan yang terpisah) Status: BETA SDK: 1.6.0+ (validator-additive di 1.5.8)
Jalur permintaan persetujuan berfungsi di setiap deployment, termasuk paket hosted (SaaS): kebijakan memunculkan permintaan, SDK berhenti sejenak, dan administrator mengaktifkan alurnya per cakupan (organisasi, proyek, atau kunci API) di Settings -> Approvals. Fitur ini berstatus BETA dan nonaktif secara default.
Halaman untuk pemberi persetujuan belum dapat diakses. Rute kotak masuk persetujuan dan detail permintaan dialihkan ke dasbor di setiap deployment yang dirilis, dan tautan dalam notifikasi mengarah ke jalur yang sama, sehingga saat ini pemberi persetujuan tidak dapat menyelesaikan permintaan dari UI.
Teks asli berbahasa Inggris -- terjemahan menunggu tinjauan teknis
A request nobody resolves runs to its deadline and the SDK raises HITLTimeoutError with a synthesized deny, so the original deny stands.
Lihat Menyiapkan persetujuan untuk panduan menyeluruh.
Ketika mesin kebijakan menolak pemanggilan alat, satu-satunya pilihan pengguna saat ini adalah: membaca pesan penolakan, mengedit kebijakan, melakukan redeploy. Gesekannya tinggi. Pelanggan melonggarkan kebijakan mereka untuk menghindari gesekan itu, dan tata kelola pun terkikis. Persetujuan mengubah momen penolakan menjadi momen permintaan, ketika sakelar per cakupan aktif dan kode Anda memintanya.
Cara kerjanya
- Tulis kebijakan yang ketat. Tulis aturan
denyyang seharusnya dapat ditinjau. - Agen mengenai aturan. Pemanggilan ditolak. Kode Anda memutuskan bahwa penolakan ini
adalah penolakan yang perlu dilihat manusia, dan memanggil
client.request_approval(decision), yang melakukan POST permintaan persetujuan ke backend. Langkah ini eksplisit: tidak ada tag kebijakan yang melakukannya untuk Anda. - Pemberi persetujuan diberi tahu. Lonceng dalam aplikasi + email (dengan magic-link untuk sesi dingin).
- Pemberi persetujuan memilih satu: Tolak / Setujui sekali / Setujui selama 24 jam, 7 hari, 30 hari / Setujui selamanya.
- SDK melanjutkan. Agen melanjutkan pemanggilan (jalur izinkan), atau mematuhi penolakan (jalur tolak).
Teks asli berbahasa Inggris -- terjemahan menunggu tinjauan teknis
Every approval is auditable: who approved, when, why, what grant was created or what policy diff was applied.
Jenis keputusan
Pemberi persetujuan memilih salah satu dari:
| Jenis keputusan | Yang dilakukannya | Penyimpanan |
|---|---|---|
approved_once | Single call only; auto-revoke after first use OR 5 minutes | hitl_grants row, args_hash-bound |
approved_timed | 24 jam, 7 hari, 30 hari, atau kustom (maks 90 hari) | baris hitl_grants, terikat expires_at |
approved_forever_grant | Selamanya; dapat dicabut dari halaman admin /grants | baris hitl_grants, expires_at IS NULL |
approved_forever | Pengeditan kebijakan: menyisipkan aturan izinkan di atas penolakan | Kenaikan versi kebijakan; aturan membawa metadata created_by_hitl |
Defaultnya adalah approved_once. Admin menaikkan cakupan ketika mereka melihat sebuah pola.
Pemilih "Siapa yang dapat menggunakan persetujuan ini?"
Untuk setiap keputusan grant, pemberi persetujuan memilih cakupan prinsipal:
- Hanya <requestor_email> (default untuk alat + grant berjangka waktu)
- Siapa pun yang menggunakan proyek X
- Siapa pun di mesin Y
- Siapa pun yang menggunakan kunci Z
- Kondisi kustom (admin mengedit aturan secara manual)
Untuk secret, defaultnya adalah berlingkup pengguna bahkan pada approved_forever. Grant secret berumur panjang untuk seluruh proyek melemahkan vault. Lihat Persetujuan secret.
Lapisan identitas
Alur persetujuan perlu mengetahui manusia mana yang memicu permintaan. Kunci API adalah kredensial mesin; kunci tersebut dapat dibagikan. SDK mewajibkan controlzero install --email <email> saat pemasangan; email dikirim pada setiap pemanggilan backend sebagai header X-CZ-Requestor-Email.
Ini paling penting untuk kunci API bersama (kunci proyek, kunci CI). Lihat Kunci multi-pengguna untuk model ancaman dan cerita forensiknya.
Apa yang BUKAN persetujuan
- Bukan pengganti penulisan kebijakan yang baik. Persetujuan adalah jalan keluar darurat ketika sebuah penolakan akan memaksa pelanggan melonggarkan aturan.
Teks asli berbahasa Inggris -- terjemahan menunggu tinjauan teknis
- Not silent. Every approval is in the audit log. The
/approvalspage is the canonical surface for security review.
Teks asli berbahasa Inggris -- terjemahan menunggu tinjauan teknis
- Not unlimited. Custom grant duration is capped at 365 days (default cap 90 days, configurable per scope).
- Bukan untuk paket Free / Solo. Kedua paket hanya memiliki satu pengguna; persetujuan oleh diri sendiri hanya formalitas dan tidak memberikan tata kelola. Tingkatkan ke Teams untuk menggunakannya.
Lihat juga
- Persetujuan secret. Persetujuan atas pembacaan kredensial
- Kunci multi-pengguna. Identitas untuk kunci API bersama
- SDK:
request_approval+wait. API SDK - Pengaturan persetujuan dan kaskade. Sakelar aktif/nonaktif per cakupan
- E1701 batas waktu persetujuan
- E1707 identitas diperlukan
- E1500 persetujuan dinonaktifkan pada cakupan