Các thực hành tốt nhất cho môi trường production

Keychain trừu tượng hóa backend ký, nhưng việc vận hành một signer trong môi trường production vẫn là trách nhiệm của bạn. Các thực hành này áp dụng cho tất cả các backend; xem Chọn backend để biết cách lựa chọn.

Tách biệt signer nóng và signer lạnh

Sử dụng signer vận hành ("nóng") với số dư thấp cho các giao dịch thường xuyên, tự động, và một signer ("lạnh") riêng biệt có giá trị cao cho các chuyển động ngân quỹ. Bảo vệ signer lạnh bằng MPC custody hoặc cloud HSM và yêu cầu chính sách phê duyệt trước khi ký. Do giao diện hoàn toàn giống nhau, mỗi vai trò có thể sử dụng một backend khác nhau mà không cần thay đổi các điểm gọi.

Xoay vòng khóa có chủ đích

Trên Solana, khóa ký chính là địa chỉ tài khoản, vì vậy việc xoay vòng khóa sẽ tạo ra một địa chỉ mới. Hãy lên kế hoạch xoay vòng như một quá trình di chuyển: cấp phát khóa mới, tái phân công các quyền liên quan (hoặc chuyển tiền) sang địa chỉ mới, rồi thu hồi khóa cũ. Sử dụng các khóa riêng biệt cho từng môi trường để khóa devnet không bao giờ được tái sử dụng trên mainnet.

Cấp quyền truy cập tối thiểu

Giới hạn thông tin xác thực của mỗi backend ở mức tối thiểu cần thiết để ký. Với AWS KMS, đó là kms:Sign, kms:DescribeKey và kms:GetPublicKey trên đúng khóa cần dùng (bước kiểm tra tính khả dụng sử dụng hai quyền sau); nên ưu tiên vai trò IAM thay vì thông tin xác thực tĩnh. Áp dụng nguyên tắc tương tự cho chính sách Vault và khóa API của ví được quản lý.

Lên kế hoạch cho tính sẵn sàng

Các backend từ xa phụ thuộc vào một dịch vụ mạng. Hãy kiểm tra tính khả dụng trước khi dựa vào một signer (isAvailable() trong TypeScript, is_available() trong Rust và Python, IsAvailable(ctx) trong Go), thử lại các lỗi chỉ ký (sign-only) với cơ chế backoff, và xác định phương án dự phòng khi xảy ra gián đoạn. Không nên thử lại một cách máy móc với backend có phát sóng giao dịch (Crossmint, chế độ tự động gốc của Fordefi): xem Xử lý các giao dịch phát sóng chưa được xác nhận. Keychain bắt buộc dùng HTTPS cho các base URL đã cấu hình, từ chối chuyển hướng và áp dụng timeout yêu cầu mặc định.

Xử lý các giao dịch phát sóng chưa được xác nhận

Crossmint và chế độ tự động gốc của Fordefi thực hiện ký và phát sóng ở phía máy chủ, vì vậy một lệnh gọi thất bại không có nghĩa là không có gì được gửi đi. Khi nhà cung cấp có thể đã chấp nhận giao dịch, Keychain sẽ báo BROADCAST_UNCONFIRMED (SignerError::BroadcastUnconfirmed trong Rust). Lỗi này mang theo id giao dịch của nhà cung cấp khi yêu cầu tạo đã được chấp nhận, và luôn mang theo khóa idempotency mà yêu cầu tạo đã được gửi đi cùng, được tạo ra từ thông điệp.

  • Đối soát với nhà cung cấp bằng id giao dịch trước khi làm bất cứ việc gì khác.
  • Gửi lại giao dịch giống hệt từng byte là an toàn: khóa idempotency sẽ loại bỏ bản trùng lặp.
  • Dựng lại giao dịch (ví dụ với blockhash mới) sẽ tạo ra khóa mới và do đó là một giao dịch chuyển mới.

Bảo vệ bí mật và truyền tải

  • Các backend từ xa bắt buộc dùng HTTPS cho các base URL đã cấu hình và từ chối chuyển hướng. Ngoại lệ duy nhất là Vault, vốn chấp nhận HTTP thuần trên loopback để vault server -dev cục bộ hoạt động được.
  • Cung cấp API keys, token và thông tin xác thực từ secret manager hoặc biến môi trường — không bao giờ mã hóa cứng hoặc commit chúng vào source control.
  • Keychain làm sạch các phản hồi lỗi để tránh rò rỉ bí mật vào log; hãy giữ cho hệ thống ghi log của bạn không chứa thông tin xác thực thô và tài liệu khóa.

Giám sát và kiểm toán việc ký

Theo dõi tỷ lệ thành công khi ký, độ trễ và số lần thất bại, đồng thời cảnh báo khi có đột biến — xem các chỉ số trong Sẵn sàng cho môi trường Production. Bật nhật ký kiểm toán phía nhà cung cấp (KMS, Vault hoặc custodian) và đối chiếu chúng với các giao dịch mà ứng dụng của bạn gửi đi.

Nắm rõ những gì Keychain kiểm tra

  • Keychain xác thực chặng ký, chứ không phải giao dịch của bạn: không có mô phỏng, không kiểm tra nội dung giao dịch và không có công cụ chính sách. Hãy thực thi những việc đó trong ứng dụng của bạn hoặc trong các kiểm soát chính sách của nhà cung cấp.
  • Chế độ thủ công gốc của Fordefi viết lại giao dịch (blockhash, các lệnh phí Compute Budget) trước khi ký. Hãy tiếp tục từ giao dịch mà nó trả về, không phải giao dịch bạn đã gửi, và chạy nó trước mọi signer khác.
  • Rust xóa sạch (zeroize) các bộ đệm khóa trung gian; Python và Go thì không thể. Với backend Memory trong các ngôn ngữ đó, hãy coi toàn bộ bộ nhớ của tiến trình là nhạy cảm.
  • Với Ledger, màn hình thiết bị là mô tả đáng tin cậy duy nhất về nội dung đang được ký. Không bật tính năng unsafe-debug hoặc ghi log TRACE cho solana_remote_wallet trong môi trường production, vì cả hai đều ghi log chi tiết thiết bị và giao dịch.

Xem mô hình bảo mật để có bức tranh đầy đủ.

Is this page helpful?