Files
rustfs/docs/kms/frontend-api-guide-zh.md
T
安正超 dd47fcf2a8 fix: restore localized samples in tests (#749)
* fix: restore required localized examples

* style: fix formatting issues
2025-10-29 13:16:31 +08:00

12 KiB
Raw Permalink Blame History

RustFS KMS Frontend Integration Guide

This document targets frontend engineers who need to integrate with the RustFS Key Management Service (KMS). It provides a complete API reference, usage notes, and example implementations.

📋 Contents

  1. Quick Start
  2. Authentication & Permissions
  3. API Catalog
  4. Service Management APIs
  5. Key Management APIs
  6. Data Encryption APIs
  7. Bucket Encryption Configuration APIs
  8. Monitoring & Cache APIs
  9. Common Error Codes
  10. Data Types
  11. Implementation Examples

Quick Start

Base configuration

Setting Value
Base URL http://localhost:9000/rustfs/admin/v3 (local development)
Production URL https://your-rustfs-domain.com/rustfs/admin/v3
Request format application/json
Response format application/json
Authentication AWS Signature Version 4
Encoding UTF-8

Common request headers

Header Required Value
Content-Type ✅ application/json
Authorization ✅ AWS4-HMAC-SHA256 Credential=...
X-Amz-Date ✅ ISO 8601 timestamp

Authentication & Permissions

Required IAM permissions

Clients must have ServerInfoAdminAction to invoke KMS APIs.

AWS SigV4 signing

All requests must be signed with SigV4.

  • Access Key ID – account access key
  • Secret Access Key – corresponding secret key
  • Region – us-east-1
  • Service – execute-api

API Catalog

Service management

Method Path Description Status
POST /kms/configure Configure the KMS service ✅ Available
POST /kms/start Start the service ✅ Available
POST /kms/stop Stop the service ✅ Available
GET /kms/service-status Retrieve service status ✅ Available
POST /kms/reconfigure Reconfigure and restart ✅ Available

Key management

Method Path Description Status
POST /kms/keys Create a master key ✅ Available
GET /kms/keys List keys ✅ Available
GET /kms/keys/{key_id} Get key metadata ✅ Available
DELETE /kms/keys/delete Schedule key deletion ✅ Available
POST /kms/keys/cancel-deletion Cancel key deletion ✅ Available

Data encryption

Method Path Description Status
POST /kms/generate-data-key Generate a data key ✅ Available
POST /kms/decrypt Decrypt a data key ⚠️ Not implemented

Bucket encryption configuration

Method Path Description Status
GET /api/v1/buckets List buckets ✅ Available
GET /api/v1/bucket-encryption/{bucket} Get default encryption ✅ Available
PUT /api/v1/bucket-encryption/{bucket} Set default encryption ✅ Available
DELETE /api/v1/bucket-encryption/{bucket} Remove default encryption ✅ Available

Monitoring & cache

Method Path Description Status
GET /kms/config Retrieve KMS configuration ✅ Available
POST /kms/clear-cache Clear the KMS cache ✅ Available

Legacy compatibility endpoints

Method Path Description Status
POST /kms/create-key Create key (legacy) ✅ Available
GET /kms/describe-key Describe key (legacy) ✅ Available
GET /kms/list-keys List keys (legacy) ✅ Available
GET /kms/status KMS status (legacy) ✅ Available

✅ Available – implemented and usable.
⚠️ Not implemented – API shape defined but backend missing.
Prefer the new endpoints; legacy routes exist for backwards compatibility.

Service Management APIs

1. Configure KMS

POST /kms/configure

Parameters:

Name Type Required Description
backend_type string ✅ "local" or "vault"
key_directory string Cond. Local backend key directory
default_key_id string ✅ Default master key ID
enable_cache boolean ❌ Toggle cache (default true)
cache_ttl_seconds integer ❌ Cache TTL (default 600)
timeout_seconds integer ❌ Operation timeout (default 30)
retry_attempts integer ❌ Retry attempts (default 3)
address string Cond. Vault server address
auth_method object Cond. Vault auth config
mount_path string Cond. Vault transit mount path
kv_mount string Cond. Vault KV mount
key_path_prefix string Cond. Vault key prefix

Vault auth_method fields:

Name Type Required Description
token string ✅ Vault token

Response

{
  "success": boolean,
  "message": string,
  "config_id": string?
}

2. Start KMS

POST /kms/start

Response fields: success, message, status (Running, Stopped, Error).

3. Stop KMS

POST /kms/stop

Same response structure as /kms/start.

4. Service status

GET /kms/service-status

Response

{
  "status": "Running" | "Stopped" | "NotConfigured" | "Error",
  "backend_type": "local" | "vault",
  "healthy": boolean,
  "config_summary": {
    "backend_type": string,
    "default_key_id": string,
    "timeout_seconds": integer,
    "retry_attempts": integer,
    "enable_cache": boolean
  }
}

5. Reconfigure

POST /kms/reconfigure

Accepts the same payload as /kms/configure and restarts the service.

Key Management APIs

1. Create key

POST /kms/keys

Parameters:

Name Type Required Description
KeyUsage string ✅ "ENCRYPT_DECRYPT"
Description string ❌ Description (≤256 chars)
Tags object ❌ Key/value tag map

Response includes key_id and key_metadata (enabled, usage, creation date, etc.).

2. Key metadata

GET /kms/keys/{key_id} returns the key_metadata object.

3. List keys

GET /kms/keys?limit=&marker= with pagination support.

4. Schedule deletion

DELETE /kms/keys/delete

Parameters: key_id, optional pending_window_in_days (7–30, default 7).

5. Cancel deletion

POST /kms/keys/cancel-deletion

Provide key_id; response returns updated metadata with deletion_date = null.

Data Encryption APIs

1. Generate data key

POST /kms/generate-data-key

Parameters: key_id, optional key_spec (AES_256 or AES_128), optional encryption_context map.

Response contains plaintext_key (Base64) and ciphertext_blob (Base64).

2. Decrypt data key

POST /kms/decrypt

⚠️ Not yet implemented. Expect parameters ciphertext_blob and optional encryption_context. A future response will expose key_id and plaintext.

Bucket Encryption Configuration APIs

RustFS exposes S3-compatible endpoints via the AWS SDK.

1. List buckets

Use ListBuckets from the AWS SDK.

2. Get default encryption

GetBucketEncryption returns SSE rules (SSEAlgorithm, optional KMSMasterKeyID). A 404 indicates no configuration.

3. Set default encryption

PutBucketEncryption supports SSE-S3 (AES256) or SSE-KMS (aws:kms + key ID).

4. Delete default encryption

DeleteBucketEncryption removes the configuration.

Example composable and helper utilities are provided in the original Chinese document; port them as needed.

Monitoring & Cache APIs

1. Get KMS config

GET /kms/config returns backend, cache settings, and default key ID.

2. Clear cache

POST /kms/clear-cache invalidates cached key metadata.

3. Legacy status

GET /kms/status (legacy) provides cache hit/miss stats.

Common Error Codes

HTTP status codes

Code Error Description
200 – Success
400 InvalidRequest Bad request or parameters
401 AccessDenied Authentication failure
403 AccessDenied Authorization failure
404 NotFound Resource not found
409 Conflict Resource conflict
500 InternalError Server error

Error payload

{
  "error": {
    "code": string,
    "message": string,
    "request_id": string?
  }
}

Specific codes

  • InvalidRequest – check payload
  • AccessDenied – verify credentials/permissions
  • KeyNotFound – key ID incorrect
  • InvalidKeyState – key disabled or invalid
  • ServiceNotConfigured – configure KMS first
  • ServiceNotRunning – start the service
  • BackendError – backend failure
  • EncryptionFailed / DecryptionFailed – inspect ciphertext/context

Data Types

KeyMetadata

Field Type Description
key_id string UUID
description string Key description
enabled boolean Whether the key is enabled
key_usage string Always ENCRYPT_DECRYPT
creation_date string ISO 8601 timestamp
rotation_enabled boolean Rotation status
deletion_date string? Scheduled deletion timestamp

ConfigSummary

Field Type Description
backend_type string local or vault
default_key_id string Default master key
timeout_seconds integer Operation timeout
retry_attempts integer Retry attempts
enable_cache boolean Cache toggle

Enumerations

  • ServiceStatus – Running, Stopped, NotConfigured, Error
  • BackendType – local, vault
  • KeyUsage – ENCRYPT_DECRYPT
  • KeySpec – AES_256, AES_128

Implementation Examples

The original guide included extensive code samples covering bucket encryption flows, Vue/React composables, and full application scaffolding. The key patterns are:

  1. Signed requests – Use AWS SigV4 (via AWS SDK or manual signing) to call /rustfs/admin/v3 endpoints.
  2. Multipart encryption flow – Request a data key, encrypt data locally, upload ciphertext, and store the encrypted key blob.
  3. Bucket encryption lifecycle – Use the S3 SDK to configure default SSE policies, optionally provisioning dedicated KMS keys per bucket.
  4. Health monitoring – Periodically poll /kms/status or /kms/config to ensure the service is healthy and cache hit ratios remain acceptable.

Troubleshooting & Support

If issues arise:

  1. Verify the KMS service is healthy via /kms/service-status.
  2. Confirm Vault or local backend configuration.
  3. Inspect server logs for detailed error messages.
  4. Run cargo test -p e2e_test kms:: -- --nocapture to validate the setup.
  5. Ensure your AWS SDK version supports the required S3/KMS calls.

Common questions:

  • Bucket encryption fails with insufficient permissions – Ensure the IAM policy grants s3:GetBucketEncryption, s3:PutBucketEncryption, s3:DeleteBucketEncryption, and (for SSE-KMS) kms:DescribeKey.
  • Unable to select a KMS key – Confirm the KMS service is running, the key is enabled, and KeyUsage is ENCRYPT_DECRYPT.
  • Frontend shows incorrect encryption state – A 404 during GetBucketEncryption is normal (no configuration). Allow for network latency before refreshing the status.

Last updated: 2024-09-22