Files
rustfs/docs/operations/kms-admin-contract.md
T
Zhengchao An f1a4588326 docs(kms): record CLI and console admin handoff matrix (#5639)
docs(kms): record client admin API handoff matrix
2026-08-02 19:27:19 +08:00

6.6 KiB

KMS admin API contract and client handoff

This page is the server-side handoff for rustfs/backlog#1639. Response-shape snapshots for the key and metadata handlers live beside the producers under rustfs/src/admin/handlers/snapshots/ (PR #5626). This matrix records the remaining route-level handoff contract without duplicating those snapshots. The management KmsStatusResponse shape remains an identified gap and will be pinned after the status-handler changes in #1636 land.

The wire prefix is /rustfs/admin/v3. Request and response field names for the producer snapshots are pinned in #5626; fields in this matrix are the client handoff reference. GET /kms/status and GET /kms/service-status intentionally use different response types; capabilities on /kms/status is additive and optional.

Method and endpoint Action / risk Per-key rc console Handoff
POST /kms/configure kms:Configure / high no supported supported none
POST /kms/reconfigure kms:Configure / high no supported supported none
POST /kms/start kms:ServiceControl / high no supported supported none
POST /kms/stop kms:ServiceControl / high no supported supported none
GET /kms/config kms:Configure / sensitive no no supported Redact operational paths before display.
POST /kms/clear-cache kms:ClearCache / high no no supported Keep the current {status,message} response stable.
POST /kms/keys kms:Configure / high no supported supported none
GET /kms/keys kms:ListKeys / sensitive no supported supported none
GET /kms/keys/{key_id} kms:DescribeKey / sensitive yes supported supported none
DELETE /kms/keys/delete kms:DeleteKey / critical yes supported supported Preserve immediate-delete confirmations.
POST /kms/keys/cancel-deletion kms:DeleteKey / high yes supported supported none
POST /kms/create-key kms:Configure / high no no no Legacy mc alias; do not add a second client command.
POST /kms/key/create kms:Configure / high no no no Legacy mc alias; do not add a second client command.
GET /kms/describe-key kms:DescribeKey / sensitive yes no no Legacy mc alias.
GET /kms/key/status kms:DescribeKey / sensitive yes supported no rc key status uses this legacy-compatible shape.
GET /kms/list-keys kms:ListKeys / sensitive no supported no rc key list uses this legacy-compatible shape.
POST /kms/generate-data-key kms:GenerateDataKey / high yes do not expose do not expose Programmatic primitive; never print plaintext key material.
GET /kms/status kms:ServiceControl / sensitive no supported supported Keep capabilities optional for old servers.
POST /kms/status kms:ServiceControl / high no no no Internal compatibility route; not a client command.
GET /kms/service-status kms:ServiceControl / sensitive no no supported Do not conflate this type with /kms/status.
POST /kms/keys/enable kms:EnableKey / high yes pending pending Add an explicit lifecycle command/UI action.
POST /kms/keys/disable kms:DisableKey / high yes pending pending Add an explicit lifecycle command/UI action.
POST /kms/keys/rotate kms:RotateKey / high yes pending pending Add an explicit lifecycle command/UI action.
POST /kms/keys/update-description kms:UpdateKeyDescription / high yes pending pending Add a metadata mutation command/UI action.
POST /kms/keys/tag kms:TagResource / high yes pending pending Add a metadata mutation command/UI action.
POST /kms/keys/untag kms:UntagResource / high yes pending pending Add a metadata mutation command/UI action.
GET /kms/backup kms:Backup / sensitive no pending pending Status/readiness only; never expose KEK material.
POST /kms/backup kms:Backup / high no pending pending Preserve backup_id and metadata-only response.
POST /kms/restore/dry-run kms:Restore / sensitive no pending pending Dry-run must be the default and show differences.
POST /kms/restore kms:Restore / high no pending pending Require confirm_backup_id and confirm_conflict_policy; no blanket --yes.
POST /kms/restore/abort kms:Restore / high no pending pending Require confirm_target_key_dir.

Server-side snapshot coverage

The merged #5626 producer snapshots cover the nine modern/legacy key response types and the metadata response type served by kms_keys.rs and kms_key_metadata.rs: create, describe, list, generate-data-key, delete, cancel-deletion, update-description, tag, and untag. The four dynamic responses served verbatim by kms_dynamic.rs are covered in crates/kms/src/snapshots/: configure, start, stop, and the service-status response.

The remaining wire-shape gaps are intentionally documented rather than duplicated here: the management KmsStatusResponse (GET|POST /kms/status, pending #1636), KmsConfigResponse, the inline clear-cache JSON, all three lifecycle responses, and the backup/restore response family. Adding producer snapshots for those gaps is a separate server test task; it must not be inferred from the client matrix.

Client handoff gaps

The rc client currently has status, key list/status/create/delete/cancel-deletion, configure/reconfigure/start/restart/stop, and diagnostic/roundtrip entry points. It has no lifecycle enable/disable/rotate, key metadata, or backup/restore commands. The console currently calls service-status, configure/reconfigure/start/stop/config, clear-cache, status, and the modern key CRUD routes. It has no lifecycle, metadata, or backup/restore UI. These pending cells are delivery items for rustfs/cli and rustfs/console; they are not implemented in this repository. A read-only issue search on 2026-08-02 found no matching KMS issue in either client repository, so the client handoff still needs issue creation there.

POST /kms/generate-data-key is deliberately marked “do not expose” for both clients: its response contains a base64 plaintext data key. GET /kms/config and backup status/restore responses contain operational paths and identifiers, not key material, but still require UI/CLI redaction and confirmation handling.

The producer response snapshots in #5626 and this matrix do not imply that rustfs/backlog#1639 is complete. The pending client cells must be closed in their respective repositories before the parent delivery item can be marked complete.