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

ダウンロードとインストール
要件
Cargoでパッケージ追加
詳細については、https://crates.io/crates/keeper-secrets-manager-coreをご参照ください。
Cargo機能
SDKには4つのCargo機能が含まれ、いずれも既定で有効です。より小さなバイナリにする場合は default-features = false を指定します。
blocking
on
reqwest ブロッキングHTTPクライアント (すべてのネットワーク操作に必要)
totp
on
TOTPコード生成
password-gen
on
パスワード生成ユーティリティ
tracing-init
on
env_logger ベースのログ初期化
特定の機能のみを含める例
ソースコード
RustのソースコードについてはGitHubリポジトリをご覧ください。
SDKの使用方法
初期化
パラメータ
必須
説明
型
token
はい
ワンタイムアクセストークン
String
config
はい
ストレージ設定
KeyValueStorage
バインディングライフサイクル
ワンタイムトークンは、クライアント作成時ではなく、最初の get_secrets() 呼び出し時に引き換えられます。構成を外部ストア (AWS Secrets Manager、Azure Key Vaultなど) に保存する場合は、バインド後に読み出してから永続化します。詳しくは、バインディングライフサイクルをご参照ください。
プロキシ設定
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 (既定) で検証を実施
カスタムサーバー公開鍵
一部の環境では、SDKに組み込まれていないサーバー公開鍵が使われます。以下の3通りで指定できます。コードから指定する値が最優先されます。
オプション1: 拡張ワンタイムトークン
4セグメント形式 <region>:clientKey:keyId:serverPublicKeyBase64 のトークンを new_client_options_with_token に直接渡します。追加設定は不要です。
オプション2: 構成フィールド
ClientOptions を構築する前に、KSM構成JSONの serverPublicKey (base64urlエンコードのEC公開鍵) を設定します。
オプション3: プログラムから指定
set_server_public_key(key_b64: &str)
カスタムEC公開鍵 (base64url) を注入。OTTセグメントと保存済み構成より優先
set_server_public_key_id(key_id: &str)
カスタム公開鍵とともに送信するキーID
シークレットの取得
パラメータ
型
必須
デフォルト
説明
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
PAMレコードタイプ
PAMレコードは record.record_type で識別できます。
全11種類のPAMレコードタイプのフィールド定義は、PAMレコードタイプをご参照ください。
リンク済み認証情報
PAMリソースレコードとリンク済み認証情報を含めて取得するには、QueryOptions::with_links と get_secrets_with_options を使います。
リンクを要求しなかった場合、またはリンクが存在しない場合は record.links は空です。
get_links() による型付きアクセス
record.get_links() は Vec<KeeperRecordLink> を返し、生のリンクエントリを型付きで包むラッパーです。権限フラグ、認証情報フラグ、構造化された設定を、手動のJSON解析なしに参照できます。元のエントリは link.raw に保持されるため、将来のサーバーバージョンで追加されたフィールドも失われません。
KeeperRecordLink フィールド:
record_uid
String
リンク先レコードのUID
data
Option<String>
Base64エンコードのリンクメタデータ
path
Option<String>
meta、ai_settings、jit_settings などの識別子
raw
HashMap<String, Value>
元のエントリ全体 (未知のフィールドも保持)
権限フラグ (トップレベルまたはネストされた allowedSettings から読み取り):
allows_rotation()
ローテーション許可
allows_connections()
接続許可
allows_port_forwards()
ポートフォワード許可
allows_session_recording()
セッション記録有効
allows_typescript_recording()
TypeScript記録有効
allows_remote_browser_isolation()
リモートブラウザ分離有効
ai_enabled()
AI機能有効
ai_session_terminate()
AIセッション終了有効
rotates_on_termination()
セッション終了時の認証情報ローテーション
認証情報フラグ:
is_admin_user()
管理者認証情報
is_launch_credential()
起動用認証情報
is_iam_user()
IAMユーザー
belongs_to()
このレコードに属する認証情報
no_update_services()
サービス更新無効
構造化アクセサ:
get_allowed_settings()
-> Map
allowedSettings オブジェクト (ない場合は空のMap)
get_rotation_settings()
-> Option<Map>
ローテーションスケジュールと複雑さの設定
get_meta_data(record_key)
-> Option<Map>
path == "meta" のリンクからのPAM設定
get_ai_settings_data(record_key)
-> Option<Map>
path == "ai_settings" のAI設定 (AES-GCM暗号化)
get_jit_settings_data(record_key)
-> Option<Map>
path == "jit_settings" のJITプロビジョニング設定 (AES-GCM暗号化)
get_link_data(record_key)
-> Option<Map>
解析済みペイロード全体 (プレーンJSON・暗号化データを自動処理)
各SDK共通の説明は、リンク済み認証情報をご参照ください。
シークレットの更新
レコード更新コマンドは、成功してもローカルのレコードデータ (特に更新後のレコードリビジョン) が更新されないため、すでに更新されたレコードに連続して更新を行うと、リビジョンの不一致により失敗します。各更新バッチの後には、必ず更新されたすべてのレコードを再読み込みしてください。
シークレットを更新
update_secret() メソッドは、レコードを更新する標準的な方法です。
record
Record
はい
更新後のフィールド値を含むレコード
レスポンス
Result<(), KSMRError> — 成功またはエラー
トランザクションによるパスワードローテーション
update_secret_with_transaction() メソッドは、新しいパスワードをコミットする前に検証するパスワードローテーションで利用します。
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のファイルがない場合。
ファイルをディスクに保存
record.files 内の KeeperFile インスタンスでは、save_to_file により (未キャッシュの場合は) ダウンロードと復号済み内容の書き込みを1回の呼び出しで実行できます。引数には &str、String、&Path、PathBuf を指定できます。
path
impl AsRef<Path>
はい
保存先パス (&str、String、&Path、PathBuf)。親ディレクトリの存在が必要
戻り値
型:
Result<bool, KSMRError>
成功時は true。レコードの添付ファイルを名前・タイトル・UIDで検索する場合は record.download_file(name, path) を使用
タイトルでファイルをダウンロード
レコードのタイトルと添付ファイル名を指定してダウンロードします。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(...)— サムネイルのダウンロードまたは復号エラー
ファイルのアップロード
ファイルアップロードのパラメータ
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 フラグを使うと、空でないフォルダも削除できます。
folder_uids
Vec<String>
はい
―
フォルダUIDのリスト
force_delete
bool
いいえ
false
true にすると空でないフォルダも削除。既定の false ではレコードを含むフォルダはエラー
戻り値
型:
Result<Vec<HashMap<String, Value>>, KSMRError>
削除した各フォルダの応答エントリのリスト。成功時は通常空です。
最終更新

