Ruby SDK
Keeperシークレットマネージャー用Ruby SDKの詳細資料

Keeperシークレットマネージャー (KSM) は、ゼロ知識のシークレット管理プラットフォームです。Ruby SDKを使うと、RubyアプリケーションからKeeperボルトへプログラム経由でアクセスできます。
要件
Ruby 3.1以降。
ダウンロードとインストール
インストール
詳しくは、RubyGemsのパッケージページをご参照ください。
gemを使用してインストールする場合
Gemfileに追加する場合
次に以下を実行します。
ソースコード
RubyのソースコードはGitHubリポジトリで公開されています。
SDKの使用
ストレージの初期化
SDKでは、クライアントデバイス上にストレージを初期化するためにワンタイムアクセストークンが必要です。初期化後は、SDKが構成を保存し、以降の利用時に使用します。
token
String
任意
nil
初期バインディングに使用するワンタイムアクセストークン
config
KeyValueStorage
必須
-
構成を永続化するためのストレージ実装
hostname
String
任意
'keepersecurity.com'
APIホスト名 (例: EUデータセンターの場合は 'keepersecurity.eu')
verify_ssl_certs
Boolean
任意
true
SSL証明書検証の有効/無効の設定
使用例
ワンタイムアクセストークンを使用する場合:
ファイルベースのストレージを使用する場合
アプリケーション再起動後も構成を永続的に保持する場合:
ボルトで生成されたBase64構成ファイルを使用して接続する場合:
Base64構成文字列を使用する場合
KeeperSecretsManager.from_config は、Base64エンコードされた構成文字列向けの便利な初期化メソッドです。コマンダーの export コマンドが出力する形式や、KSM_CONFIG などの環境変数に保存する形式と同じです。
KeeperSecretsManager.new が受け付けるキーワードオプション (:hostname、:verify_ssl_certs、:proxy_url など) は、第2引数のハッシュとしても指定できます。
環境変数を使用する場合
環境変数から読み取り専用の構成をロードします。 EnvironmentStorage では、各構成キーが区切りなしで <prefix><KEY.upcase> に対応するため、変数名はレコード側のキャメルケース名とは一致しません。
create_secret および upload_file では KSM_APPOWNERPUBLICKEY が必要です。 EnvironmentStorage は読み取り専用のため、この値は環境変数として直接設定する必要があります。ファイルやメモリ上のストレージとは異なり、ワンタイムアクセストークンを紐付けてもこの値は設定されません。
バインディングライフサイクル
ワンタイムトークンは、クライアント作成時ではなく、最初の get_secrets() 呼び出し時に引き換えられます。構成を外部ストア (AWS Secrets Manager、Azure Key Vaultなど) に永続化する場合は、その呼び出しの後にのみ読み出してください。詳しくは、バインディングライフサイクルをご参照ください。
シークレットの取得
シークレットの取得
uids
Array<String>
任意
nil
取得対象のレコードUID。nil または空の場合はすべてのシークレットを取得
request_links
Boolean
任意
false
true の場合、各返却レコードの links 配列にリンク認証情報エントリが入り、record.get_links でアクセス可能
レスポンス:
型: Array<KeeperRecord>
すべてのKeeperレコード、または指定したUIDに一致するレコードの配列。
使用例
すべてのシークレットを取得する場合:
UIDを指定してシークレットを取得する場合:
タイトルでシークレットを取得する場合
title
String
必須
-
検索対象のレコードタイトル (完全一致)
レスポンス:
型: Array<KeeperRecord> (get_secrets_by_title) または KeeperRecord (get_secret_by_title)
タイトルに一致するすべてのレコード、または最初に一致したレコード。
使用例
リンク認証情報
PAMレコードにリンク認証情報がある場合、get_secrets に request_links: true を渡すと含められます。record.get_links を呼び出すと、生の links 配列を型付きの Array<KeeperRecordLink> として取得できます。
KeeperRecordLink のアクセサ (いずれも例外を発生させません。失敗時は false / nil を返します):
record_uid
String
リンク先レコードのUID
path
String または nil
識別子: "meta"、"ai_settings"、"jit_settings"、または認証情報リンクの場合は nil
admin_user?
Boolean
管理者権限を付与するリンク
launch_credential?
Boolean
起動用認証情報のリンク
iam_user?
Boolean
IAMユーザー認証情報のリンク
allows_rotation?
Boolean
ローテーション許可 (allowedSettings を参照)
allows_connections?
Boolean
接続の許可
allows_session_recording?
Boolean
セッション録画の許可
allows_port_forwards?
Boolean
ポート転送の許可
get_link_data(record_key)
Hash または nil
パース済みのリンクデータ全体 (平文または復号済み)
get_decrypted_data(record_key)
String または nil
AES-256-GCMで復号したデータ文字列 (暗号化パス向け)
get_meta_data
Hash または nil
"meta" リンクからのPAMローテーション/接続設定
get_ai_settings_data(record_key)
Hash または nil
"ai_settings" リンクからのAI設定
get_jit_settings_data(record_key)
Hash または nil
"jit_settings" リンクからのJIT設定
record_key は record.record_key (復号済みレコードキーのバイト列) で、暗号化されたリンクパス (ai_settings、jit_settings) でのみ必要です。平文JSONのリンクはキーなしでパースできます。
詳しくは、リンク認証情報をご参照ください。
シークレットから値を取得する
シークレットを取得した後、フィールド値には複数の方法でアクセスできます。
動的フィールドアクセスを使用する場合
明示的なフィールドメソッドを使用する場合
Keeper表記法を使用する場合
エラーセーフな表記法: try_get_notation
try_get_notation は get_notation の例外非発生ラッパーです。成功時は Array を返し、エラー時は空配列 [] を返すため、フィールドが存在しない場合に値なしとして扱いたいときは rescue ブロックなしで安全に使えます。
get_notation は無効な入力に対して引き続き NotationError を発生させます。エラー時に処理を止めたい場合に適しています。
配列表記法: get_notation_results と try_get_notation_results
get_notation_results は表記法URIを解決し、一致する値の Array を常に返します。複数値フィールド (例: host フィールド内の複数ホスト) ではすべての要素を保持します。無効な入力では NotationError を発生させます。複合 (文字列以外) のフィールド値はJSON文字列として返され、Rubyのハッシュにはなりません。
try_get_notation_results は例外非発生の派生です。エラーをログに記録し、例外の代わりに [] を返します。
対照的に、get_notation はスカラー (多くのセレクタでは最初の値) を返し、try_get_notation は get_notation を Array() で包みます。try_get_notation は値が1件だけの場合でも単一要素の配列を返します。複数値フィールドの全値セットが必要なときは get_notation_results を使用してください。
参照フィールドの展開
一部のPAMレコードフィールドは、インライン値ではなく他レコードを参照するUIDを格納します。inflate_field_value は、参照先レコードを取得してフィールド値を直接返すことで、それらのUIDを解決します。
uids
Array<String>
必須
解決対象の参照レコードUID
replace_fields
Array<String>
必須
参照先レコードから抽出するフィールドタイプ (例: ['address'])
レスポンス:
型: Array。解決済みUIDごとに1エントリで、nil エントリは除去されます。各エントリは解決済みフィールド値 (String、Hash、またはネストした Array。フィールドタイプによる) です。
参照タイプが解決するフィールドタイプを調べるには、get_inflate_ref_types を呼び出します。
addressRef
['address']
cardRef
['paymentCard', 'text', 'pinCode', 'addressRef']
その他
[] (不明な参照タイプは空配列)
使用例
TOTPコードの取得
TOTPコードを生成するには、レコードからTOTP URLを取得し、KeeperSecretsManager::TOTP モジュールを使用します。TOTPの生成には、シークレットのデコード用に base32 gem (gem install base32) が必要です。
secret
String
必須
-
Base32形式でエンコードされたTOTPシークレット
algorithm
String
任意
'SHA1'
ハッシュアルゴリズム (SHA1、SHA256、SHA512)
digits
Integer
任意
6
コードの桁数
period
Integer
任意
30
有効期間 (秒)
レスポンス:
型: String
2要素認証に使用する現在のTOTP (Time-Based One-Time Password) コード。
使用例
ランダムパスワードの生成
文字種や長さなどを指定して、暗号学的に安全なランダムパスワードを生成できます。シークレットをプログラムから作成または更新する際に便利です。
length
Integer
任意
64
パスワード全体の長さ
lowercase
Integer
任意
0
小文字 (a-z) の最小数
uppercase
Integer
任意
0
大文字 (A-Z) の最小数
digits
Integer
任意
0
数字 (0-9) の最小数
special_characters
Integer
任意
0
記号 (!@#$%^&*()_+-=[]{}) の最小数
レスポンス:
型: String
指定した要件を満たす、暗号学的に安全なランダムパスワード。
使用例
デフォルト設定で64文字のパスワードを生成する場合:
生成要件を指定する場合:
新しいシークレットを作成する際に使用する場合:
既存のシークレットを更新する際に使用する場合:
パスワードローテーションスクリプト:
PAMレコードタイプ
PAMレコードは record.type で識別できます。
全11種類のPAMレコードタイプのフィールド定義は、PAMレコードタイプをご参照ください。
PAMローテーショントランザクション
complete_transaction は、ステージ済みのPAMローテーション更新を確定またはロールバックします。ローテーションワークフローでは、update_secret の後に呼び出して変更をサーバーにコミットします。
record_uid
String
必須
-
ステージ済みトランザクションを確定する対象レコードのUID
rollback
Boolean
任意
false
true の場合、コミットではなくステージ済み更新をロールバック
レスポンス:
型: Boolean。成功時は true。
使用例
update_secret は変更をステージし、実際にコミットまたは破棄するのは complete_transaction です。complete_transaction を省略すると、変更はステージされたまま残ります。
シークレットの更新
record
KeeperRecord
必須
-
ボルト内で更新する、変更済みのレコード
レスポンス:
型: void
変更された値を使って、ボルト内のシークレットを更新します。
使用例
非確定保存: save と save_with_options
save は complete_transaction を呼び出さずにレコード更新をサーバーへ送信します。変更をステージしてから別途コミットまたはロールバックするPAMローテーションワークフローや、確定のための往復を発生させずにレコードを更新したい場合に使用します。
record
Dto::KeeperRecord、Hash
必須
-
更新するレコード (get_secrets で取得済みであること)
transaction_type
String または nil
任意
nil
PAMトランザクションタイプ ('rotation'、'general'、または nil)
links_to_remove
Array<String>
任意
nil
このレコードから削除するリンク先レコードのUID
レスポンス:
型: Boolean (成功時は true)。
UpdateOptions を完全に制御する場合は、save_with_options を直接呼び出します。
update_options は、transaction_type: と links_to_remove: 属性を持つ Dto::UpdateOptions オブジェクトです。
update_secret との比較
update_secret
save / save_with_options
complete_transaction を呼び出す
はい (常に)
いいえ
更新後に record.revision を更新する
はい
いいえ
キー取得のための追加の get_secrets 往復
はい
いいえ (既存キーを使用)
用途
標準的なCRUD更新
PAMステージング、バッチ更新、手動コミット制御
使用例
ファイルのダウンロード
file
KeeperFile
必須
-
ダウンロード対象となるKeeperRecord内のファイルオブジェクト
レスポンス:
型: Hash
以下の情報を含むハッシュを返します。
'name'- ファイル名'data'- バイナリ文字列としてのファイルデータ'size'- ファイルサイズ (バイト単位)'type'- ファイルのMIMEタイプ
使用例
ファイルサムネイルのダウンロード
file_data
KeeperFile または Hash
必須
-
レコード内のファイルオブジェクト、または生のファイルメタデータハッシュ
レスポンス:
型: Hash
以下の情報を含むハッシュを返します。
'file_uid'- ファイルUID'data'- 復号済みサムネイル内容 (バイナリ文字列)'size'- サムネイルサイズ (バイト単位)
使用例
ファイルのアップロード
owner_record_uid
String
必須
-
ファイルを添付する対象レコードのUID
file_data
String
必須
-
ファイル内容 (バイナリまたはテキスト)
file_name
String
必須
-
Keeper上でのファイル名
file_title
String
任意
nil
Keeper上でのファイルのタイトル/説明
レスポンス:
型: String
アップロードされたファイルのUID。
使用例
ファイルパスからのアップロード
upload_file_from_path はディスク上のファイルを自動で読み込むため、手動の File.binread 呼び出しは不要です。
owner_record_uid
String
必須
-
ファイルを添付する対象レコードのUID
file_path
String
必須
-
ディスク上のファイルへの絶対パスまたは相対パス
file_title
String
任意
ファイル名
Keeper上に表示するタイトル。省略時はベースファイル名
レスポンス:
型: String (アップロードされたファイルのUID)。
シークレットの作成
record_data
Hash
必須
-
レコード構造 (type、title、fields、custom、notes) を含むハッシュ
options
CreateOptions
必須
-
folder_uid (必須) と任意設定を含むCreateOptionsオブジェクト
レスポンス:
型: String
作成されたシークレットのUID。
要件:
共有フォルダUID (folder_uidを指定する場合)
共有フォルダがシークレットマネージャーアプリケーションからアクセス可能であること
自身とシークレットマネージャーアプリケーションの両方に編集権限があること
共有フォルダ内に少なくとも1件のレコードが存在すること
レコードのフィールド形式が正しく構成されていること (フィールドタイプの資料を参照)
使用例
カスタムタイプレコードの作成
事前取得したフォルダを使った作成
create_secret_with_options は CreateOptions オブジェクトと、任意の事前取得済みフォルダ一覧を受け取ります。同一セッションで複数レコードを作成し、すでにフォルダ一覧を保持している場合に使用します。内部の get_folders 呼び出しをスキップできるため、往復を削減できます。
create_options
Dto::CreateOptions
必須
-
folder_uid: (必須) と subfolder_uid: (任意) を持つオプションオブジェクト
record_data
Dto::KeeperRecord、Hash
必須
-
作成するレコード (create_secret と同じ形状)
folders
Array<KeeperFolder>
任意
nil
事前取得したフォルダ一覧。nil の場合は自動取得
レスポンス:
型: String (新規作成されたレコードのUID)。
create_secret は、一般的な単件作成向けの便利ラッパーで、内部で create_secret_with_options を呼び出します。
シークレットの削除
uids
String または Array<String>
必須
-
削除対象のレコードUID (複数指定可)
レスポンス:
型: void
指定したシークレットをボルトから削除します。
使用例
フォルダ
Ruby SDKでは、フォルダ操作に対して完全なCRUD (作成・取得・更新・削除) が利用できます。
フォルダの取得
レスポンス:
型: Array<KeeperFolder>
シークレットマネージャーアプリケーションがアクセス可能なすべてのフォルダ。
使用例
フォルダパスの取得
folder_uid
String
必須
-
フォルダのUID
レスポンス:
型: String
フォルダの完全なパス ("/" 区切りのパンくずリスト形式)。
使用例
名前でフォルダを検索
name
String
必須
-
検索するフォルダ名
parent_uid
String
任意
nil
指定した親フォルダ内を対象に検索する場合に指定
レスポンス:
型: KeeperFolder または nil
最初に一致したフォルダ。一致しない場合はnil。
使用例
フォルダツリーの構築
フォルダの作成
name
String
必須
-
作成するフォルダ名
parent_uid
String
必須
-
親となる共有フォルダのUID
レスポンス:
型: String
作成されたフォルダのUID。
使用例
フォルダの更新
folder_uid
String
必須
-
更新対象フォルダのUID
new_name
String
必須
-
新しいフォルダ名
レスポンス:
型: void
指定したフォルダの名前を変更します。
使用例
フォルダの削除
folder_uid
String
必須
-
削除対象のフォルダUID
force
Boolean
任意
false
trueの場合、フォルダと内容物をすべて削除。falseの場合、空のフォルダのみ削除
レスポンス:
型: void
指定したフォルダをボルトから削除します。
使用例
キャッシュ
シークレットをローカルにキャッシュすることで、パフォーマンスを向上できます。
CachingStorageの使用
組み込みの災害復旧キャッシュ
KeeperSecretsManager::CachingPostFunction は、ドロップインの custom_post_function です。成功した各APIレスポンスを暗号化済みローカルキャッシュファイルに保存し、ネットワーク不可時にはそのキャッシュへ自動フォールバックします。Python、Java、JavaScript、.NET SDKにある災害復旧キャッシュのパターンと同等です。
キャッシュファイルの場所のデフォルトは ./ksm_cache.bin です。別ディレクトリへ移す場合は、環境変数 KSM_CACHE_DIR を設定します。
キャッシュを直接管理する場合:
custom_post_function によるカスタムキャッシュ
custom_post_function は、読み取り専用の get_secret および get_folders の処理でのみ呼び出されます (作成、更新、削除では常にSDK標準の通信を使います)。呼び出し形式は call(url, transmission_key, encrypted_payload, verify_ssl_certs) です。戻り値は生のレスポンス本文ではなく、 Dto::KSMHttpResponse (status_code:、data:、任意の http_response:) です。
エラー処理
SDKには、エラー状況ごとに専用の例外クラスがあります。
一般的なエラーシナリオ
高度な構成
カスタムホスト名
SSL証明書検証
カスタムロギング
HTTPプロキシ
初期化時に proxy_url: を渡すと、SDKのすべての通信 (API呼び出し、ファイルアップロード、ファイルダウンロード) をHTTPまたはHTTPSプロキシ経由にできます。認証付きプロキシは、URLに認証情報を埋め込んで指定します。
proxy_url: を指定しない場合、SDKは環境変数 HTTPS_PROXY および https_proxy を自動的に確認します。
不正な proxy_url (不正な形式のURL、またはホスト欠落) は、初期化時に説明付きの ArgumentError を発生させます。
すべての構成オプション
フィールドタイプヘルパー
型付きフィールドを作成するための任意の便利メソッドです。
ダイナミックレコードアクセス
Ruby SDKでは、method_missing を利用してJavaScriptのような動的フィールドアクセスを実現しています。
最終更新

