Go SDK
Keeperシークレットマネージャー用Go SDKの詳細ドキュメント
要件
Go SDKではGo 1.16以上が必要です。
Goのバージョンを確認するには、以下のコマンドを実行します。
アップグレードが必要な場合はhttps://go.dev/dl/をご参照ください。
v1.7.0の破壊的変更: 最低Goバージョンが1.16以上に引き上げられました。
ダウンロードとインストール
GitHubからインストール
Go SDKの最新リリースは、GitHubのリポジトリから入手できます。
詳細については、pkg.go.dev のパッケージドキュメントをご参照ください。
ソースコード
Goのソースコードは、GitHubリポジトリで入手できます。
SDKの使用
初期化
シークレットを取得するには、まずシークレットマネージャーのクライアントを初期化します。
ClientOptions のパラメータ
Token
string
初回のみ
-
リージョンプレフィックス付きのワンタイムアクセストークン (例: US:...)。初回バインドに必要です。
Config
IKeyValueStorage
はい
-
構成の永続化用ストレージ実装 (ファイルまたはメモリ)。
HostName
string
いいえ
トークンから導出
サーバーホスト名の上書き。トークンのリージョンプレフィックスから自動算出されます。
VerifySslCerts
bool
いいえ
true
SSL証明書の検証の有効/無効。*
NewSecretsManager 関数は、指定したパラメータでシークレットマネージャーを初期化し、ClientOptions の設定を保存します。
バインディングライフサイクル
ワンタイムトークンは、クライアント作成時ではなく、最初の GetSecrets() 呼び出し時に引き換えられます。構成を外部ストア (AWS Secrets Manager、Azure Key Vault など) に保存する場合は、バインド後に読み出してから永続化します。詳しくは、バインディングライフサイクルをご参照ください。
シークレットの取得
uids
[]string
取得するレコードのUID。空のスライス []string{} を渡すと、共有されているすべてのレコードを取得
レスポンス
型: []*Record
指定したUIDのレコード。UIDを省略した場合は、シークレットマネージャーのクライアントと共有されているすべてのレコードです。
使用例
すべてのシークレットを取得
フィルタでシークレットを取得
タイトルでシークレットを取得
recordTitle
string
検索するレコードタイトル
使用例
シークレットから値を取得
パスワードを取得
login タイプのレコードではパスワードフィールドの値を返します。それ以外のレコードタイプでは空文字列を返します。
フィールド型から値を取得
fieldType
string
フィールド型 (例: login、url)
一致する標準フィールドの先頭の値を文字列で返します。フィールドが存在しない場合は空文字列を返します。複数値や構造化フィールドには GetFieldsByType を使用します。
フィールド型はKeeperのレコードタイプに基づきます。レコードタイプごとの利用可能なフィールドの一覧は、Keeperコマンダーの record-type-info コマンドをご参照ください。
Keeper表記法を使用して値を取得
GetNotation
query
string
指定フィールドの値を取得するKeeper表記法のクエリ
戻り値
型: []interface{}
クエリに一致したフィールドの値
GetNotationResults
notation
string
Keeper表記法のクエリ
GetNotationResults はフィールド値を []string として返します。値が文字列のときは GetNotation の代わりにこちらを使います。TryGetNotationResults はエラーを返さない版で、失敗時は空のスライスを返します。
使用例
TOTPコードを取得
パラメータ
型
必須
デフォルト
説明
url
string
はい
TOTP の URL
PAMレコードタイプ
PAMレコードは record.Type() で識別できます。
全11種類のPAMレコードタイプのフィールド定義は、PAMレコードタイプをご参照ください。
リンク済み認証情報
PAMリソースレコードとリンク済み認証情報を含めて取得するには、QueryOptions で RequestLinks: true を指定します。
リンクを要求しなかった場合、またはリンクが存在しない場合は record.Links は nil または空です。各SDK共通の説明は、リンク済み認証情報をご参照ください。
シークレットを更新
レコード更新コマンドは、更新に成功してもローカル上のレコード内容は更新されません(改訂番号なども反映されません)。再取得せずに続けて更新すると、改訂番号の不一致で失敗します。更新のたびに、対象レコードを必ず再取得してください。
パスワードを更新
password
string
はい
レコードに設定する新しいパスワード
他のフィールドを更新
field
string
はい
更新するフィールドの名前
value
string
はい
フィールドに設定する値
ボルトのシークレットを更新
レコードを保存すると、加えた変更がボルトに反映されます。
record
*Record
保存する更新済みフィールドを含むレコード
使用例
パスワードを更新
他のフィールドを更新
レコードの各フィールド型はクラスとして表現されます。値を正しく扱うには、フィールドを対応する型にキャストします。フィールド型の一覧は、レコードタイプのドキュメントをご参照ください。
ランダムなパスワードを生成
length
int
パスワード長。0 以下を渡すとデフォルト (32文字) を使用します
lowercase
string
小文字の最小数。最小を設けない場合は ""
uppercase
string
大文字の最小数。最小を設けない場合は ""
digits
string
数字の最小数。最小を設けない場合は ""
specialCharacters
string
記号の最小数。最小を設けない場合は ""
specialCharacterSet
string
使用する記号の集合。"" の場合はデフォルト "!@#$%()+;<>=?[]{}^.," を使用します
ファイルのダウンロード
DownloadFileByTitle
title
string
ダウンロードするファイル名
path
string
保存先のパス
レスポンス
型: error
成功時は nil を返します。失敗時は、タイトル不一致・ディレクトリ不存在・書き込み失敗などを示すエラーを返します。ログ出力や上位へのラップに利用します。
使用例
DownloadFile
fileUid
string
ダウンロードするファイルのUID
path
string
保存先のパス
レスポンス
型: error
使用例
SaveFile
path
string
書き込み先のフルパス
createFolders
bool
true のとき、親ディレクトリがなければ作成します
レスポンス
型: error
record.Files から得た *KeeperFile に対して使用します。
使用例
ファイルのアップロード
ownerRecord
Record
はい
アップロードされたファイルを添付するレコード
file
KeeperFileUpload
はい
アップロードするファイル
name
string
はい
アップロード後にKeeperに格納されるファイルの名前
title
string
はい
アップロード後にKeeperに格納されるファイルのタイトル
type
string
はい
ファイルのデータのMIMEタイプ(「application/octet-stream」など)
data
[]byte
はい
バイト型のファイルデータ
使用例
ファイルパスからアップロード
record
*Record
ファイルを添付するレコード
filePath
string
アップロードするローカルファイルのパス
レスポンス
型: string, error
アップロードされた添付ファイルのUIDを返します。ディスクから直接アップロードする場合に UploadFile の代わりに使います。ファイルを読み込み、MIMEタイプを推定して内部で UploadFile を呼び出します。
使用例
レコードからファイルを削除する
SaveWithOptions() 呼び出し時に LinksToRemove にファイルUIDを指定すると、レコードからファイルを外せます。
複数ファイルの削除:
UpdateOptions
UpdateOptions は SaveWithOptions および SaveBeginTransaction のオプション動作を制御します。
TransactionType
UpdateTransactionType
二相のトランザクション更新には Rotation を指定。通常の保存では省略。
LinksToRemove
[]string
保存時にレコードから切り離すファイルのUID。
シークレットの作成
要件
共有フォルダのUID
共有フォルダには、シークレットマネージャーアプリケーションからアクセスできる必要があります
ユーザーとシークレットマネージャーアプリケーションの双方に編集権限が必要です
共有フォルダには、少なくとも1つのレコードが存在する必要があります
作成されたレコードとレコードのフィールドは正しく書式設定されている必要があります
レコードタイプごとのフィールド形式の詳細は、レコードタイプ定義をご参照ください
TOTPフィールドには、KSM SDKの外で生成したURLのみを指定できます
レコード作成後は、ファイルのアップロードの
UploadFileを使ってファイル添付をアップロードできます
recordUid
string
いいえ
自動生成されたランダムなUID
folderUid
string
はい
record
*RecordCreate
はい
recordUid は任意です。"" を渡すと、SDKがUIDを自動生成します。
createOptions
*CreateOptions
はい
recordData
*RecordCreate
はい
folders
[]*KeeperFolder
いいえ
folders に nil を渡すと、SDKがフォルダ一覧を自動取得します。
この例では、ログイン値と生成されたパスワードを含むログインタイプのレコードを作成します。
この例では、カスタムのレコードタイプのレコードを作成します。
シークレットの削除
GoのKSM SDKでは、Keeperボルトのレコードを削除できます。
recordUids
[]string
削除するレコードのUID
statuses
map[string]string
UIDごとの削除結果
err
error
エラー (ある場合)
ボルトに存在しない、またはKSMアプリケーションからアクセスできないUIDは黙ってスキップされ、エラーにはなりません。
キャッシュ
ネットワークに接続できないときでもシークレットを参照できるよう、Go SDKでシークレットを暗号化したファイルとしてローカルにキャッシュできます。
キャッシュの設定と構成
キャッシュを有効にするには、SetCache(cache ICache) を呼び出し、組み込みのメモリまたはファイルベースの実装のいずれかを渡すか、独自の ICache 実装を渡します。
Go SDKには、メモリベースとファイルベースのキャッシュ実装があらかじめ用意されています。
オフライン時のフォールバック動作を示す完全な ICache 実装の例は、SDKリポジトリの example/custom-cache/main.go をご参照ください。
SDKは常にまずライブのネットワーク要求を試みます。キャッシュは、サーバーがHTTP 200以外を返した場合、またはDNS解決失敗・接続拒否・TLSハンドシェイク失敗・タイムアウトなどトランスポート層での失敗があった場合にフォールバックとして参照されます。ネットワーク層のエラーでキャッシュからレコードが返されると警告がログに出力されます。GetSecrets が成功するたびに、キャッシュは最新のレスポンスで更新されます。
直近のリクエストのみ: キャッシュは最も新しいレスポンスだけを保持します。最後に成功した呼び出しがUIDフィルタ付きだった場合、キャッシュフォールバックではそのレコードだけが返り、アプリケーションに共有されているすべてのレコードは返りません。キャッシュの使い方はこの点を踏まえて設計してください。
更新後: レコードを保存するとボルト上のリビジョンが変わります。更新後にキャッシュへフォールバックすると、キャッシュのリビジョンは古いままとなり、同じレコードへの続けての更新はリビジョン不一致で失敗します。保存のたびに GetSecrets を呼び出してキャッシュを更新してください。
フォルダ
フォルダでは、作成・読み取り・更新・削除 (CRUD) の操作がすべて利用できます。
フォルダの読み取り
フォルダの完全な階層構造をダウンロードします。
レスポンス
型: []*KeeperFolder, error
使用例
フォルダの作成
フォルダの作成には CreateOptions とフォルダ名が必要です。CreateOptions のフォルダ UID パラメータ (共有フォルダの UID) は必須で、サブフォルダの UID は任意です。サブフォルダの UID を省略した場合、新しいフォルダは親 (共有フォルダ) の直下に作成されます。サブフォルダは共有フォルダの直下でなくても構いません。階層の深さはさまざまです。
createOptions
CreateOptions
はい
親およびサブフォルダのUID
folderName
string
はい
フォルダ名
folders
[]*KeeperFolder
いいえ
CreateOptionsで作成した親とサブフォルダの検索に使用するフォルダのリスト
使用例
フォルダの更新
フォルダのメタデータ (現在はフォルダ名のみ) を更新します。
folderUid
string
はい
フォルダのUID
folderName
string
はい
新しいフォルダ名
folders
[]*KeeperFolder
いいえ
親フォルダの検索に使用するフォルダのリスト
使用例
フォルダの削除
フォルダのリストを削除します。空でないフォルダを削除するときは、forceDeletion フラグを使います。
folderUids
[]string
はい
削除するフォルダのUID
forceDeletion
bool
いいえ
空でないフォルダを削除するには true
使用例
高度な構成
トークンのリージョンプレフィックス
トークンにリージョンプレフィックスが含まれている場合、接続先のKeeperデータセンターが自動的に選ばれます。
US
United States
keepersecurity.com
EU
Europe
keepersecurity.eu
AU
Australia
keepersecurity.com.au
GOV
US Government Cloud
govcloud.keepersecurity.us
JP
Japan
keepersecurity.jp
CA
Canada
keepersecurity.ca
トークンの例
SDKはリージョンプレフィックスから接続先を判断します。プレフィックスがない場合は、ClientOptions の Hostname を明示的に指定する必要があります。
HTTPプロキシ構成
Go SDKは、標準の環境変数からプロキシ設定を自動検出します。
環境変数
SDKは以下の順で環境変数を確認します。
HTTPS_PROXYまたはhttps_proxy- HTTPS向けに推奨HTTP_PROXYまたはhttp_proxy- フォールバック用プロキシNO_PROXYまたはno_proxy- プロキシを使わないホストのカンマ区切りリスト
例
認証付きプロキシ:
バイパスリスト付き:
認証情報の特殊文字: ユーザー名とパスワードに含まれる特殊文字はパーセントエンコーディングでURLエンコードします (例: @ は %40、! は %21)。
KSM_CONFIG 環境変数
CI/CDやコンテナ環境では、ClientOptions に Config を渡さない場合、SDKは KSM_CONFIG 環境変数から構成を自動読み込みします。
初回の端末バインド後に生成したJSON構成をBase64で設定します。
KSM_CONFIG は ClientOptions.Config が nil のときだけ読み込まれます。Config を明示的に渡すと、環境変数は無視されます。
構成ファイルのセキュリティ
NewFileKeyValueStorage() を使うと、SDKは自動的に以下を行います。
新規構成ファイルを権限
0600(所有者のみ読み書き) で作成アクセスを所有者に限定し、他ユーザーからの参照を防ぐ
暗号化キーとデバイストークンを安全に保存
権限の確認
rw------- (0600) により、構成ファイルは所有者だけが読み書きできます。
セキュリティ上の推奨事項
構成ファイルをバージョン管理にコミットしない (
.gitignoreに*.jsonを追加)開発・ステージング・本番で別の構成を使う
ワンタイムアクセストークンは90日ごとにローテーション
構成ファイルは安全で暗号化されたディレクトリに保存
エラー処理
よくあるHTTPステータスコード
401
Unauthorized
新しいワンタイムトークンで再初期化
403
Forbidden
シークレットマネージャーでアプリケーション権限を確認
404
Not Found
UIDが正しくアクセス可能か確認
429
Too Many Requests
指数バックオフで再試行
500
Internal Server Error
指数バックオフで再試行
503
Service Unavailable
しばらく待ってから再試行
v1.7.0の破壊的変更: 復号失敗時の nil 返却
以下の関数は、復号に失敗した場合に空のスタブではなく nil を返すようになりました。
レコード鍵またはレコードデータの復号に失敗したときの
NewRecordFromJsonフォルダ復号に失敗したときの
NewFolderFromJson/NewKeeperFolderファイル鍵の復号に失敗したときの
NewKeeperFileFromJson
また、直後のバインドフローでアプリ鍵の復号に失敗した場合、GetSecrets は空リストと nil エラーではなくエラーを返します。
これらの関数を直接呼ぶ場合は、戻り値をデリファレンスする前に nil チェックを追加してください。
v1.7.0の破壊的変更: HTTPエラー文字列の形式
JSONエラー応答のエラー文字列には HTTPStatus=N プレフィックスが付くようになりました (例: POST Error: HTTPStatus=403 Error: access_denied, message=...)。以前のJSONエラーパスではステータスコードが文字列に含まれませんでした。文字列を解析している呼び出し側は、errors.As(err, &khe) へ移行し、khe.StatusCode、khe.ResultCode、khe.Message をコードから直接取得してください。
型付きHTTPエラー
GetSecrets および関連呼び出しからのHTTPエラーはすべて *core.KeeperHTTPError として返ります。文字列を解析する代わりに errors.As で構造化情報を取り出します。
GetSecrets から返ると、呼び出し側には POST Error: HTTPStatus=403 Error: access_denied, message=... のように見えます。
基本的なエラー処理
特定のHTTPステータスを判定
破損レコードの扱い
破損したレコードは警告を出してスキップ
破損したファイルはファイル一覧から除外
破損したフォルダは全体失敗を引き起こさないように処理
有効なレコードは引き続き正常に返却
最終更新

