Rust SDK
Keeperシークレットマネージャー用Rust SDK資料

ダウンロードとインストール
要件
本SDKの利用にはRust 1.87 以降が必要です。このバージョン要件により、Edition 2024の依存関係との互換性と、直近のセキュリティ修正への対応が確保されます。
Cargoでパッケージ追加
詳細については、https://crates.io/crates/keeper-secrets-manager-coreをご参照ください。
ソースコード
RustのソースコードについてはGitHubリポジトリをご覧ください。
SDKの使用方法
初期化
トークンのみで新しい設定を生成し、あとから使う場合は、トークンをバインドして config.json を完全に生成するまでに、少なくとも1回の読み取り操作が必要です。
パラメータ
必須
説明
型
token
はい
ワンタイムアクセストークン
String
config
はい
ストレージ設定
KeyValueStorage
プロキシ設定
SDKの通信をすべてHTTPまたはHTTPSのプロキシ経由にするには、ClientOptions の proxy_url を設定するか、環境変数を使います。プロキシは、API呼び出し、ファイルのアップロードとダウンロード、サムネイルのダウンロード、キャッシュへのリクエストなど、SDKのすべての操作に適用されます。
ClientOptions.proxy_url
コードからプロキシを指定 (環境変数より優先)
HTTP_PROXY / HTTPS_PROXY
標準のプロキシ用環境変数 (proxy_url 未設定時に使用)
KSM_PROXY_URL
キャッシュリクエスト用。caching_post_function が使用。make_caching_post_function では未使用。プロキシはファクトリへ渡す reqwest::blocking::Client で設定
ClientOptions.insecure_skip_verify
true で TLS 証明書検証を無効化 (テスト以外は非推奨)
KSM_SKIP_VERIFY
insecure_skip_verify の環境変数版。true で検証をスキップ、false (既定) で検証を実施
シークレットの取得
パラメータ
型
必須
デフォルト
説明
uids
Vec<String>
はい
Vec::new()
取得するレコードUID。空のベクターを渡すと、アプリケーションがアクセスできるすべてのレコードを取得します。
戻り値
型:
Result<Vec<Record>, KSMRError>
すべてのKeeperレコード、または指定したUIDのレコード
デフォルトでは、指定したトークンでアクセス可能なすべてのレコードを取得します
オプション付きでシークレットを取得
GraphSyncによってリンクされたレコードなど、追加データが必要なときは get_secrets_with_options() を使います。
query_options
QueryOptions
はい
リクエストのオプション
QueryOptions のフィールド:
records_filter
Vec<String>
取得するレコードUID。空のベクターですべてのレコードを取得
folders_filter
Vec<String>
絞り込むフォルダUID。空のベクターではフォルダによる絞り込みなし
request_links
Option<bool>
true のとき、レスポンスに GraphSync によるリンク先レコードを含める。リンク先は Record.links で参照
戻り値
型:
Result<Vec<Record>, KSMRError>
クエリオプションに一致するすべてのレコード。
シークレットから値を取得
パスワードを取得
Keeperシークレットマネージャーからシークレットを取得した後に、そのパスワードを参照できます。
標準フィールドの取得
field_type
&str
はい
なし
取得するフィールドタイプ
single
bool
任意
false
最初の値のみを返す
戻り値
型:
Result<Value, KSMRError>
JSON形式のフィールド値。single = true のときは最初の値、それ以外は配列を返します。
フィールドタイプはKeeperレコードタイプに基づきます。利用可能なフィールドの詳細な一覧については、コマンダーで record-type-info コマンドをご参照ください。
カスタムフィールドの取得
field_type
&str
はい
-
取得するフィールドの型
single
bool
任意
false
最初の値のみを返す
カスタムフィールドはレコードタイプ定義に含まれないフィールドで、ユーザーによって追加できます。
戻り値
型:
Result<Value, KSMRError>
JSON形式のフィールド値。single = true のときは最初の値、それ以外は配列を返します。
タイトルでシークレットを検索
レコードタイトルでシークレットを検索する場合、SDKでは以下のAPIを使います。
get_secrets_by_title()— タイトルが完全一致するシークレットをすべて返すget_secret_by_title()— タイトルが完全一致する最初の1件だけを返す
レスポンス
get_secrets_by_title()
Result<Vec<Record>, KSMRError>
タイトルが完全一致するすべてのシークレット
get_secret_by_title()
Result<Option<Record>, KSMRError>
タイトルが完全一致する最初の1件、または None
record_title
&str
はい
検索するレコードのタイトル (完全一致)
タイトル照合は大文字小文字を区別し、完全一致が必要です。部分一致や大文字小文字を区別しない検索には、いったんすべてのシークレットを取得し、クライアント側で絞り込んでください。
Keeper表記法を使用して値を取得
Keeper表記法の形式と機能については、こちらのページ をご参照ください。
query
String
はい
-
指定したフィールドから値を取得するためのKeeper表記法クエリ
戻り値
型:
Result<serde_json::Value, KSMRError>
照会したフィールドの値 (JSON形式)。フィールドが単一値のときはJSON文字列に、複数値のときはJSON配列に解決されます。
TOTPコードの取得
戻り値
型:
Result<TotpCode,KSMRError>
url
&str
はい
TOTP URL
シークレットの更新
レコード更新コマンドは、成功してもローカルのレコードデータ (特に更新後のレコードリビジョン) が更新されないため、すでに更新されたレコードに連続して更新を行うと、リビジョンの不一致により失敗します。各更新バッチの後には、必ず更新されたすべてのレコードを再読み込みしてください。
シークレットを更新
update_secret() メソッドは、レコードを更新する標準的な方法です。
record
Record
はい
更新後のフィールド値を含むレコード
レスポンス
Result<(), KSMRError> — 成功またはエラー
トランザクションによるパスワードローテーション
update_secret_with_transaction() メソッドは、新しいパスワードをコミットする前に検証するパスワードローテーションで利用します。
rollback パラメータは名前どおり、true でローテーションをロールバック、false で確定 (コミット) します。新しいパスワードを確定するには false を渡します。
record
Record
はい
更新後のフィールド値を含むレコード
transaction_type
UpdateTransactionType
はい
General または Rotation
record_uid
String
はい
トランザクションを確定するレコードのUID
rollback
bool
はい
falseでコミット、trueでロールバック
ファイルリンクの削除
update_secret_with_options() メソッドは、ファイルリンクの削除など、更新内容を細かく指定するときに使います。
record
Record
はい
更新後のフィールド値を含むレコード
update_options
UpdateOptions
はい
高度な更新のオプション
UpdateOptions のフィールド:
transaction_type
UpdateTransactionType
General または Rotation
links_to_remove
Vec<String>
削除するファイル添付のUID
フィールド値は set_standard_field_value_mut または set_custom_field_value_mut で設定します。
フィールドはタイプ名で識別します。
フィールドタイプの一覧はレコードタイプをご参照ください。複数値を持つフィールドは、リストとして設定します。
ランダムパスワードの生成
password_options
PasswordOptions
はい
パスワードの構成
special_characterset
String
任意
"""!@#$%()+;<>=?[]{}^.,"""
パスワードに含める特殊文字の集合
length
usize
任意
32
パスワードの長さ
lowercase
i32
任意
なし
パスワードに含める小文字の数
uppercase
i32
任意
なし
パスワードに含める大文字の数
digits
i32
任意
なし
パスワードに含める数字の数
special_characters
i32
任意
なし
パスワードに含める特殊文字の数
デフォルトでは、各件数パラメータはその文字種の最小件数を表します。負の値にするとちょうどその件数になります (例: .lowercase(-8) で小文字がちょうど8文字)。すべての件数パラメータが負またはゼロ (厳密モード) のときは length は無視され、パスワードの総長は絶対値の合計で決まります。
ファイルのダウンロード
file_name
&str
はい
ダウンロードするファイルの名前、タイトル、またはUID
path
&str
はい
ダウンロード先のパス
戻り値
型:
Result<bool, KSMRError>
true — ファイルが見つかり、path に保存された場合。false — レコードに一致する名前・タイトル・UIDのファイルがない場合。
タイトルでファイルをダウンロード
レコードのタイトルと添付ファイル名を指定してダウンロードします。SDKはアクセス可能なレコードのうち record_title に一致するものを探し、そのレコードから file_name の添付を取り出します。
record_title
&str
はい
ファイルを含むレコードのタイトル
file_name
&str
はい
ダウンロードする添付ファイル名
戻り値
型:
Result<Option<Vec<u8>>, KSMRError>
Ok(Some(bytes))— 復号済みのファイルデータ (バイト列)Ok(None)— 一致するタイトルのレコードがない、または一致する名前の添付がないErr(...)— ダウンロードまたは復号のエラー
ファイルのサムネイルをダウンロード
一部の添付ファイル (特に画像) にはサムネイル用のプレビューがあります。本体ファイルとは別にサムネイルだけを取得できます。
戻り値
型:
Result<Option<Vec<u8>>, KSMRError>
Ok(Some(bytes))— サムネイルデータ (通常はJPEG)Ok(None)— このファイルにサムネイルがないErr(...)— サムネイルのダウンロードまたは復号エラー
画像ファイル (PNG、JPEG など) ではサムネイルが付くことが多いです。ドキュメントなど非画像のタイプでは、多くの場合サムネイルはありません。
ファイルのアップロード
ファイルアップロードのパラメータ
owner_record
Record
はい
None
ファイルをアップロードするレコード
keeper_file
KeeperFileUpload
はい
アップロードするファイル
ファイルのパラメータ
file_path
&str
はい
アップロードするファイルのパス
file_name
Option<&str>
はい
アップロードするファイルの名前
file_title
Option<&str>
はい
アップロードするファイルのタイトル
mime_type
Option<&str>
はい
なし
ファイル内のデータの種類。指定がなければ application/octet-stream が使用されます
戻り値
型:
Result<String, KSMRError>
添付ファイルのファイルUID
シークレットの作成
要件
共有フォルダUID
共有フォルダはシークレットマネージャーアプリケーションからアクセス可能であること
あなたとシークレットマネージャーアプリケーションに編集権限があること
共有フォルダ内に少なくとも1件のレコードがあること
作成するレコードとレコードフィールドは正しい形式であること
各レコードタイプで想定されるフィールド形式は、レコードの作成・更新の手順をご参照ください
TOTPフィールドは、KSM SDKの外部で生成されたURLのみを受け付けます
レコード作成後は upload_file を使って添付ファイルをアップロードできます
複数値フィールド: 1つのフィールドに複数の値を割り当てる場合 (電話番号が2件、セキュリティ質問が2件など) は、JSON配列を
RecordField::new_record_fieldに直接渡します。単一オブジェクトはこれまでどおり自動でラップされます。2件以上ある場合のみ配列を指定してください。
parent_folder_uid
String
はい
レコードを作成する共有フォルダのUID
record_create_object
RecordCreate
はい
レコード定義 (タイプ、タイトル、フィールド)
RecordCreate のフィールド:
record_type
String
はい
レコードタイプ (例: "login")
title
String
はい
レコードのタイトル
notes
Option<String>
いいえ
なし
レコードの任意メモ
fields
Vec<RecordField>
いいえ
なし
標準フィールド
custom
Vec<RecordField>
いいえ
なし
カスタムフィールド
戻り値
型:
Result<String, KSMRError>
新規レコードのレコードUID
シークレットの削除
Rust KSM SDKでは、Keeperボルト内のレコードを削除できます。
record_uid
Vec<String>
はい
なし
削除対象レコードのUID
戻り値
型:
Result<String, KSMRError>
成功時のサーバー応答文字列。
キャッシュ
ネットワークにアクセスできなくなった場合にシークレットへのアクセスを失わないようにするため、Rust SDKではシークレットをローカルマシン上の暗号化ファイルにキャッシュできます。
キャッシュの設定と構成
Rust SDKには、災害復旧用キャッシュとして caching::make_caching_post_function(client) があります。最後に成功したAPIレスポンスをローカルの暗号化ファイルに保存し、サーバーに到達できないときはそのデータへ自動的にフォールバックします。reqwest::blocking::Client は非同期コンテキストの外で一度だけ構築してください (tokio::task::spawn_blocking 内での利用は安全です)。構築したクライアントをファクトリに渡します。ネットワーク接続があるときは、キャッシュよりライブ応答が優先されます。
キャッシュの保存場所
既定:
$KSM_CACHE_DIR/ksm_cache.binKSM_CACHE_DIRが未設定の場合はシステムの一時ディレクトリを使用環境変数で上書き:
export KSM_CACHE_DIR=/path/to/cache
既定のキャッシュ関数は最後に成功したリクエストの内容だけを保持します。たとえば、最初のリクエスト (R1) で UID1 を取得してキャッシュを更新したあと、続くリクエスト (R2) で UID2 の取得に失敗すると、キャッシュには UID2 が入りません。そのため、ネットワークが使えないときに UID2 を参照しようとしても、キャッシュに載っていなければ空の結果になります。
キャッシュからレコードを更新する場合 (または新規レコードを作成する場合)、キャッシュされたレコードデータは無効化され、同一レコードへの連続更新は失敗します。バッチ更新は、異なるレコードを変更する限り問題なく動作します。キャッシュ経由でレコードを更新したあとは、必ず get_secrets() を呼び出してキャッシュを更新し、ボルトから新しいレコードリビジョンなどの最新メタデータを取得してください。
カスタムキャッシュの実装
ローカルキャッシュをネットワークより優先する、更新間隔を独自に制御するなど、要件が細かい場合は KSMRCache を基点にキャッシュ処理を実装できます。
フォルダ
フォルダは、作成・読み取り・更新・削除 (CRUD) の全操作に対応しています。
フォルダの読み取り
フォルダ階層全体をダウンロードします。
戻り値
型:
Result<Vec<KeeperFolder>, KSMRError>
フォルダの作成
CreateOptions とフォルダ名の指定が必要です。CreateOptions のフォルダUIDパラメータは必須で、共有フォルダのUIDです。サブフォルダのUIDは任意で、省略すると親 (共有フォルダ) 直下に通常のフォルダが作成されます。サブフォルダが親共有フォルダの直下の子である必要はなく、深い階層にも配置できます。
create_options
CreateOptions
はい
なし
親とサブフォルダのUID
folder_name
String
はい
フォルダ名
folders
Vec<KeeperFolder>
いいえ
なし
CreateOptionsの親/サブフォルダ検索に使用するフォルダ一覧
フォルダの更新
フォルダのメタデータを更新します。現在はフォルダ名のみ更新可能です。
folder_uid
String
はい
フォルダUID
folder_name
String
はい
新しいフォルダ名
folders
Vec<KeeperFolder>
いいえ
なし
親フォルダを検索するために使用するフォルダのリスト
戻り値
型:
Result<String, KSMRError>
成功時のサーバー応答文字列。
フォルダの削除
フォルダのリストを削除します。force_delete フラグを使うと、空でないフォルダも削除できます。
ボルトに存在しない、またはKSMアプリケーションと共有されていないフォルダUIDがあっても、エラーにはなりません。
force_delete を使用する場合、親フォルダとその子フォルダのUIDを同時に送信しないようにしてください。削除の順序によってはエラーが発生する可能性があります。例えば、親を削除する前に子が強制削除された場合などです。リストが常にFIFO順で処理される保証はありません。
folder_uids
Vec<String>
はい
―
フォルダUIDのリスト
force_delete
bool
いいえ
false
true にすると空でないフォルダも削除。既定の false ではレコードを含むフォルダはエラー
戻り値
型:
Result<Vec<HashMap<String, Value>>, KSMRError>
削除した各フォルダの応答エントリのリスト。成功時は通常空です。
最終更新

