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

Go SDK

Keeperシークレットマネージャー用Go SDKの詳細ドキュメント

要件

Go SDKではGo 1.16以上が必要です。

Goのバージョンを確認するには、以下のコマンドを実行します。

アップグレードが必要な場合はhttps://go.dev/dl/をご参照ください。

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

GitHubからインストール

Go SDKの最新リリースは、GitHubのリポジトリから入手できます。

詳細については、pkg.go.dev のパッケージドキュメントをご参照ください。

ソースコード

Goのソースコードは、GitHubリポジトリで入手できます。

SDKの使用

初期化

(後から再利用する場合)トークンのみで新しい構成を用意するには、読み取り操作を少なくとも 1 回実行し、トークンをバインドして config.json を完全に埋める必要があります。

シークレットを取得するには、まずシークレットマネージャーのクライアントを初期化します。

ClientOptions のパラメータ

パラメータ
必須
デフォルト
説明

Token

string

初回のみ

-

リージョンプレフィックス付きのワンタイムアクセストークン (例: US:...)。初回バインドに必要です。

Config

IKeyValueStorage

はい

-

構成の永続化用ストレージ実装 (ファイルまたはメモリ)。

HostName

string

いいえ

トークンから導出

サーバーホスト名の上書き。トークンのリージョンプレフィックスから自動算出されます。

VerifySslCerts

bool

いいえ

true

SSL証明書の検証の有効/無効。*

NewSecretsManager 関数は、指定したパラメータでシークレットマネージャーを初期化し、ClientOptions の設定を保存します。

シークレットの取得

パラメータ
説明

uids

[]string

取得するレコードのUID。空のスライス []string{} を渡すと、共有されているすべてのレコードを取得

レスポンス

型: []*Record

指定したUIDのレコード。UIDを省略した場合は、シークレットマネージャーのクライアントと共有されているすべてのレコードです。

使用例

すべてのシークレットを取得

フィルタでシークレットを取得

タイトルでシークレットを取得

パラメータ
説明

recordTitle

string

検索するレコードタイトル

使用例

シークレットから値を取得

パスワードを取得

フィールド型から値を取得

パラメータ
説明

fieldType

string

フィールド型 (例: loginurl)

一致する標準フィールドの先頭の値を文字列で返します。フィールドが存在しない場合は空文字列を返します。複数値や構造化フィールドには GetFieldsByType を使用します。

フィールド型はKeeperのレコードタイプに基づきます。レコードタイプごとの利用可能なフィールドの一覧は、Keeperコマンダーの record-type-info コマンドをご参照ください。

Keeper表記法を使用して値を取得

GetNotation

Keeper表記法の形式と機能については、Keeper表記法のドキュメントをご参照ください。

パラメータ
説明

query

string

指定フィールドの値を取得するKeeper表記法のクエリ

戻り値

型: []interface{}

クエリに一致したフィールドの値

GetNotationResults

パラメータ
説明

notation

string

Keeper表記法のクエリ

GetNotationResults はフィールド値を []string として返します。値が文字列のときは GetNotation の代わりにこちらを使います。TryGetNotationResults はエラーを返さない版で、失敗時は空のスライスを返します。

使用例

TOTPコードを取得

パラメータ

必須

デフォルト

説明

url

string

はい

TOTP の URL

シークレットを更新

パスワードを更新

パラメータ
必須
デフォルト
説明

password

string

はい

レコードに設定する新しいパスワード

他のフィールドを更新

パラメータ
必須
デフォルト
説明

field

string

はい

更新するフィールドの名前

value

string

はい

フィールドに設定する値

ボルトのシークレットを更新

レコードを保存すると、加えた変更がボルトに反映されます。

パラメータ
説明

record

*Record

保存する更新済みフィールドを含むレコード

使用例

パスワードを更新

CompleteTransaction(uid, rollback bool) では、false を渡すとローテーションをコミットし、true を渡すとロールバックします。例では !success を渡しており、ローテーション関数が false (失敗) を返したときに true (ロールバック) になります。

他のフィールドを更新

v1.7.0: SetNotes はUPSERT動作になり、レコードにメモフィールドが存在しない場合は作成します。v1.6.x以前では、メモのないレコードに対する SetNotes は何も行いませんでした。

レコードの各フィールド型はクラスとして表現されます。値を正しく扱うには、フィールドを対応する型にキャストします。フィールド型の一覧は、レコードタイプのドキュメントをご参照ください。

ランダムなパスワードを生成

パラメータ
説明

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

UpdateOptionsSaveWithOptions および SaveBeginTransaction のオプション動作を制御します。

フィールド
説明

TransactionType

UpdateTransactionType

二相のトランザクション更新には Rotation を指定。通常の保存では省略。

LinksToRemove

[]string

保存時にレコードから切り離すファイルのUID。

シークレットの作成

要件

  • 共有フォルダのUID

    • 共有フォルダには、シークレットマネージャーアプリケーションからアクセスできる必要があります

    • ユーザーとシークレットマネージャーアプリケーションの双方に編集権限が必要です

    • 共有フォルダには、少なくとも1つのレコードが存在する必要があります

  • 作成されたレコードとレコードのフィールドは正しく書式設定されている必要があります

  • TOTPフィールドには、KSM SDKの外で生成したURLのみを指定できます

  • レコード作成後は、ファイルのアップロードUploadFile を使ってファイル添付をアップロードできます

パラメータ
必須
デフォルト

recordUid

string

いいえ

自動生成されたランダムなUID

folderUid

string

はい

record

*RecordCreate

はい

recordUid は任意です。"" を渡すと、SDKがUIDを自動生成します。

シークレットの削除

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 が成功するたびに、キャッシュは最新のレスポンスで更新されます。

フォルダ

フォルダでは、作成・読み取り・更新・削除 (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 フラグを使います。

forceDeletion を使う場合、親フォルダと子フォルダのUIDを1つのリストにまとめて送らないでください。削除順によってはエラーになることがあります (例: 親が子より先に強制削除された場合)。リストが常にFIFO順で処理される保証はありません。

ボルトに存在しないフォルダのUID、またはKSMアプリケーションに共有されていないフォルダのUIDであっても、エラーにはなりません。

パラメータ
必須
説明

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はリージョンプレフィックスから接続先を判断します。プレフィックスがない場合は、ClientOptionsHostname を明示的に指定する必要があります。

HTTPプロキシ構成

Go SDKは、標準の環境変数からプロキシ設定を自動検出します。

環境変数

SDKは以下の順で環境変数を確認します。

  1. HTTPS_PROXY または https_proxy - HTTPS向けに推奨

  2. HTTP_PROXY または http_proxy - フォールバック用プロキシ

  3. NO_PROXY または no_proxy - プロキシを使わないホストのカンマ区切りリスト

認証付きプロキシ:

バイパスリスト付き:

KSM_CONFIG 環境変数

CI/CDやコンテナ環境では、ClientOptionsConfig を渡さない場合、SDKは KSM_CONFIG 環境変数から構成を自動読み込みします。

初回の端末バインド後に生成したJSON構成をBase64で設定します。

既存の ksm-config.json からBase64値を生成する例です。

構成ファイルのセキュリティ

NewFileKeyValueStorage() を使うと、SDKは自動的に以下を行います。

  1. 新規構成ファイルを権限 0600 (所有者のみ読み書き) で作成

  2. アクセスを所有者に限定し、他ユーザーからの参照を防ぐ

  3. 暗号化キーとデバイストークンを安全に保存

権限の確認

rw------- (0600) により、構成ファイルは所有者だけが読み書きできます。

セキュリティ上の推奨事項

  • 構成ファイルをバージョン管理にコミットしない (.gitignore*.json を追加)

  • 開発・ステージング・本番で別の構成を使う

  • ワンタイムアクセストークンは90日ごとにローテーション

  • 構成ファイルは安全で暗号化されたディレクトリに保存

エラー処理

v1.7.0で改善: HTTPエラーは *core.KeeperHTTPError 型で返り、StatusCodeResultCodeMessage フィールドを持ちます。文字列を解析する代わりに errors.As で扱えます。エラーメッセージ文字列には、すべてのパスでHTTPステータスコードが一貫して含まれます。

よくあるHTTPステータスコード

ステータスコード
エラー種別
推奨アクション

401

Unauthorized

新しいワンタイムトークンで再初期化

403

Forbidden

シークレットマネージャーでアプリケーション権限を確認

404

Not Found

UIDが正しくアクセス可能か確認

429

Too Many Requests

指数バックオフで再試行

500

Internal Server Error

指数バックオフで再試行

503

Service Unavailable

しばらく待ってから再試行

型付きHTTPエラー

GetSecrets および関連呼び出しからのHTTPエラーはすべて *core.KeeperHTTPError として返ります。文字列を解析する代わりに errors.As で構造化情報を取り出します。

GetSecrets から返ると、呼び出し側には POST Error: HTTPStatus=403 Error: access_denied, message=... のように見えます。

基本的なエラー処理

特定のHTTPステータスを判定

破損レコードの扱い

v1.7.0の耐性強化: レコード・ファイル・フォルダで暗号化が破損している場合でも、SDKは全体を失敗させずに処理を続けます。

  • 破損したレコードは警告を出してスキップ

  • 破損したファイルはファイル一覧から除外

  • 破損したフォルダは全体失敗を引き起こさないように処理

  • 有効なレコードは引き続き正常に返却

最終更新