For the complete documentation index, see llms.txt. This page is also available as Markdown.

Rust SDK

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

ダウンロードとインストール

要件

本SDKの利用にはRust 1.87 以降が必要です。このバージョン要件により、Edition 2024の依存関係との互換性と、直近のセキュリティ修正への対応が確保されます。

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の使用方法

初期化

トークンのみで新しい設定を生成し、あとから使う場合は、トークンをバインドして config.json を完全に生成するまでに、少なくとも1回の読み取り操作が必要です。

パラメータ

必須

説明

token

はい

ワンタイムアクセストークン

String

config

はい

ストレージ設定

KeyValueStorage

バインディングライフサイクル

ワンタイムトークンは、クライアント作成時ではなく、最初の get_secrets() 呼び出し時に引き換えられます。構成を外部ストア (AWS Secrets Manager、Azure Key Vaultなど) に保存する場合は、バインド後に読み出してから永続化します。詳しくは、バインディングライフサイクルをご参照ください。

プロキシ設定

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 (既定) で検証を実施

カスタムサーバー公開鍵

一部の環境では、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

カスタム鍵が有効な間は、サーバーから送られる鍵ローテーションのヒントは抑制されます。注入した鍵は標準鍵で上書きされません。

シークレットの取得

KeeperバックエンドがHTTP 403スロットル応答を返した場合、指数バックオフ (11秒、22秒、44秒、88秒、176秒) と ±25% のジッター付きで最大5回まで自動リトライされます。すべて失敗すると KSMRError::Throttled が返されます。この動作を有効にするためのコード変更は不要です。

パラメータ

必須

デフォルト

説明

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_linksget_secrets_with_options を使います。

リンクを要求しなかった場合、またはリンクが存在しない場合は record.links は空です。

record.get_links()Vec<KeeperRecordLink> を返し、生のリンクエントリを型付きで包むラッパーです。権限フラグ、認証情報フラグ、構造化された設定を、手動のJSON解析なしに参照できます。元のエントリは link.raw に保持されるため、将来のサーバーバージョンで追加されたフィールドも失われません。

KeeperRecordLink フィールド:

フィールド
説明

record_uid

String

リンク先レコードのUID

data

Option<String>

Base64エンコードのリンクメタデータ

path

Option<String>

metaai_settingsjit_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() メソッドは、新しいパスワードをコミットする前に検証するパスワードローテーションで利用します。

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のファイルがない場合。

ファイルをディスクに保存

record.files 内の KeeperFile インスタンスでは、save_to_file により (未キャッシュの場合は) ダウンロードと復号済み内容の書き込みを1回の呼び出しで実行できます。引数には &strString&PathPathBuf を指定できます。

パラメータ
必須
説明

path

impl AsRef<Path>

はい

保存先パス (&strString&PathPathBuf)。親ディレクトリの存在が必要

戻り値

型: 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(...) — サムネイルのダウンロードまたは復号エラー

画像ファイル (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>

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

最終更新