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のプロキシ経由にするには、ClientOptionsproxy_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.bin

  • KSM_CACHE_DIR が未設定の場合はシステムの一時ディレクトリを使用

  • 環境変数で上書き: export KSM_CACHE_DIR=/path/to/cache

カスタムキャッシュの実装

ローカルキャッシュをネットワークより優先する、更新間隔を独自に制御するなど、要件が細かい場合は 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>

削除した各フォルダの応答エントリのリスト。成功時は通常空です。

最終更新