ダウンロードとインストール
GitHubからインストール
Go SDKの最新リリースは、https://github.com/Keeper-Security/secrets-manager-go で入手できます
コピー $ go get github.com/keeper-security/secrets-manager-go/core
ソースコード
Goのソースコードは、GitHubリポジトリ で入手できます
SDKの使用
初期化
トークンのみを使用して(後で使用するために)新しい設定を生成するには、トークンをバインドして、config.json
に完全に読み込むための読み取り操作が少なくとも1回必要です。
シークレットを取得するには、まずSecrets Managerクライアントを初期化する必要があります。
コピー package main
import (
ksm "github.com/keeper-security/secrets-manager-go/core"
)
func main () {
clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
// トークンのみを使用して(後で使用するために)設定を生成するには
// トークンをバインドするアクセス操作が少なくとも1回必要です
sm.GetSecrets([] string {})
}
パラメータ 型 必須 デフォルト 説明 Keeper Secrets Managerのワンタイムトークン
NewSecretsManager
関数は、指定したパラメータでSecretsManagerを初期化し、ClientOptions
構造体の設定を格納します。
コピー secretsManager := NewSecretsManager(options)
シークレットの取得
コピー records, err := sm.GetSecrets([] string {})
レスポンス
型: []*Record
指定したUIDを持つ記録、またはUIDを指定していない場合は、Secrets Managerクライアントと共有されるすべての記録
使用例
すべてのシークレットを取得
コピー package main
import (
ksm "github.com/keeper-security/secrets-manager-go/core"
)
func main () {
clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
allRecords, err := sm.GetSecrets([] string {})
}
フィルタでシークレットを取得
コピー package main
import (
ksm "github.com/keeper-security/secrets-manager-go/core"
)
func main () {
clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
records, err := sm.GetSecrets([] string { "[Secret UID]" })
}
タイトルでシークレットを取得
コピー // 一致する記録をすべて取得
GetSecretsByTitle(recordTitle string ) (records [] * Record, err error )
// 最初に一致した記録だけを取得
GetSecretByTitle(recordTitle string ) (records * Record, err error )
使用例
コピー package main
// Secrets Managerのインポート
import ksm "github.com/keeper-security/secrets-manager-go/core"
func main () {
options := & ksm . ClientOptions {
// ワンタイムトークンは一度しか使用できません - 以後は、生成された設定ファイルを使用します
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(options)
// タイトルで個々の記録を取得
allRecords, _ := ksm.GetSecretsByTitle( "My Credentials" )
for _, record := range allRecords {
println ( "UID" , record.Uid, ", title [" , record.Title(), "]" )
}
}
シークレットから値を取得
パスワードを取得
Get Password Example Usage
コピー secret.GetFieldsByType( "password" )
コピー clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
// すべての記録を取得
allRecords, err := sm.GetSecrets([] string {})
if err != nil {
println ( "Error retrieving all records: " , err.Error())
os.Exit( 1 )
}
// 最初の記録を取得
firstRecord := allRecords[ 0 ]
// パスワードタイプの記録の最初のフィールドを取得
passwordField := map [ string ] interface {}{}
if passwordFields := firstRecord.GetFieldsByType( "password" ); len (passwordFields) > 0 {
passwordField = passwordFields[ 0 ]
}
フィールドはタイプで検索されます。フィールドタイプの一覧は、記録タイプ のドキュメントをご参照ください。
Keeper表記法を使用して値を取得
Get Notation Example Usage
コピー clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
// 指定したUIDを持つ記録からパスワードを取得
value, err := sm.GetNotation( "[Record UID]/field/password" )
if err == nil && len (value) > 0 {
if password, ok := value[ 0 ].( string ); ok {
println ( "Successfully retrieved field value using notation" )
}
}
指定したフィールドの値を取得するためのKeeper表記法を使用したクエリ
戻り値
型: []interface{}
照会したフィールドの値
TOTPコードを取得
Get TOTP Code Example Usage
コピー clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
// すべての記録を取得
allRecords, err := sm.GetSecrets([] string {})
if err == nil {
// 記録からTOTP urlを取得
urls, err := sm.GetNotation( "[Record UID]/field/OneTimeCode" )
if err == nil && len (urls) == 1 {
// urlからTOTPコードを取得
url := urls[ 0 ].( string )
totp, err := ksm.GetTotpCode(url)
if err == nil {
println (totp.Code, totp.TimeLeft)
}
}
}
シークレットを更新
パスワードを更新
コピー (r * Record) SetPassword(password string )
他のフィールドを更新
コピー (r * Record) SetFieldValueSingle(field string , value string )
ボルトのシークレットを更新
記録を保存して、変更内容を表示
コピー (c * secretsManager) Save(record * Record) (err error )
使用例
パスワードを更新
コピー package main
import (
ksm "github.com/keeper-security/secrets-manager-go/core"
)
func main () {
clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
records, err := sm.GetSecrets([] string { "[Record UID]" })
// 更新する記録を取得
record := records[ 0 ]
// 新しいパスワードを設定
record.SetPassword( "NewPassword123$" )
// 変更を保存
ksm.Save(record)
}
他のフィールドを更新
コピー package main
import (
ksm "github.com/keeper-security/secrets-manager-go/core"
)
func main () {
clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
records, err := sm.GetSecrets([] string { "[Record UID]" })
// 更新する記録を取得
record := records[ 0 ]
// ログインフィールドを新しい値に設定
record.SetFieldValueSingle( "login" , "New Login Value" )
// 変更を保存
ksm.Save(record)
}
記録の各フィールドタイプは、クラスに相当します。 フィールドの値に正しくアクセスするために、フィールドを対応するクラスにキャストします。 フィールドタイプの一覧は、記録タイプ のドキュメントをご確認ください。
ランダムなパスワードを生成
Generate Password Example Usage
コピー GeneratePassword(length, lowercase, uppercase, digits, specialCharacters)
コピー // 記録を取得
allRecords, err := sm.GetSecrets([] string {})
record := allRecords[ 0 ]
// ランダムなパスワードを生成
password := GeneratePassword( 64 , 0 , 0 , 0 , 0 )
// 新しいパスワードで記録を更新
record.SetPassword(password)
各パラメータは、使用する文字の種類の最小数を示します。たとえば、uppercase
は、使用する大文字の最小数を示します。
ファイルのダウンロード
コピー (r * Record) DownloadFileByTitle(title string , path string ) bool
レスポンス
型: bool
ファイルの保存が成功したか否か
使用例
コピー import (
ksm "github.com/keeper-security/secrets-manager-go/core"
)
clientOptions := & ksm . ClientOptions {
Token: "[One Time Access Token]" ,
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(clientOptions)
// 更新する記録を取得
record, err := sm.GetSecrets([] string { "[Record UID]" })
// 記録に添付されたファイルをダウンロード
record.DownloadFileByTitle( "certs.txt" , "secret_files/certs.txt" )
ファイルのアップロード
コピー UploadFile(record * Record, file * KeeperFileUpload) (uid string , err error )
コピー type KeeperFileUpload struct {
Name string
Title string
Type string
Data [] byte
}
パラメータ 型 必須 説明 アップロード後にKeeperに格納されるファイルの名前
アップロード後にKeeperに格納されるファイルのタイトル
ファイルのデータのMIMEタイプ(「application/octet-stream」など)
使用例
コピー package main
// Secrets Managerのインポート
import ksm "github.com/keeper-security/secrets-manager-go/core"
func main () {
options := & ksm . ClientOptions {
// ワンタイムトークンは一度しか使用できません - 以後は、生成された設定ファイルを使用します
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(options)
// ファイルをアップロードする記録を取得
allRecords, _ := sm.GetSecrets([] string { "[Record UID]" })
ownerRecord := allRecords[ 0 ]
// ファイルのデータを取得してアップロードを準備
dat, err := ioutil.ReadFile( "/myFile.json" )
var myFile := KeeperFileUpload {
Name: "myFile.json" ,
Title: "My File" ,
Type: "application/json" ,
Data: dat
}
// 選択した記録にファイルをアップロード
sm.UploadFile(ownerRecord, myFile)
}
シークレットの作成
前提条件:
共有フォルダのUID
共有フォルダには、Secrets Managerアプリケーションからアクセスできる必要があります
あなたとSecrets Managerアプリケーションには編集権限が必要です
共有フォルダには、少なくとも1つの記録が存在する必要があります
作成された記録と記録のフィールドは正しく書式設定されている必要があります
記録タイプごとの適切なフィールド形式については、このドキュメント をご参照ください
TOTPフィールドには、KSM SDK以外で生成されたURLのみを指定できます
Secrets Manager SDKで作成したKeeperの記録は、現時点ではファイル添付をサポートしていません
Create a Record Login Record Example Custom Type Example
コピー secretsManager.CreateSecretWithRecordData(recordUid, folderUid, record)
この例では、ログイン値と生成されたパスワードを含むログインタイプの記録を作成します。
例にある[FOLDER UID]
をSecrets Managerがアクセスできる共有フォルダのUIDに置き換えます。
コピー // 新しいログイン記録を作成
newLoginRecord := NewRecordCreate( "login" , "Sample KSM Record:Go SDK" )
// ログインフィールドとパスワードフィールドに入力
password, _ := GeneratePassword( 32 , 0 , 0 , 0 , 0 )
newLoginRecord.Fields = append (newLoginRecord.Fields,
NewLogin( "username@email.com" ),
NewPassword(password))
// メモに入力
newLoginRecord.Notes = "This is a Go record creation example"
// 新しい記録を作成
recordUid, err := secretsManager.CreateSecretWithRecordData( "" , "[FOLDER UID]" , newLoginRecord)
例にある[FOLDER UID]
をSecrets Managerがアクセスできる共有フォルダのUIDに置き換えます。
この例では、カスタムの記録タイプの記録を作成します。
コピー customLogin := ksm.NewRecordCreate( "Custom Login" , "Sample Custom Type KSM Record:Go SDK" )
password, _ := ksm.GeneratePassword( 32 , 0 , 0 , 0 , 0 )
customLogin.Fields = append (customLogin.Fields,
ksm.NewHosts( ksm . Host {Hostname: "127.0.0.1" , Port: "8080" }),
ksm.NewLogin( "login@email.com" ),
ksm.NewPassword(password),
ksm.NewUrl( "http://localhost:8080/login" ),
ksm.NewSecurityQuestions( ksm . SecurityQuestion {Question: "What is one plus one (write just a number)" , Answer: "2" }),
ksm.NewPhones( ksm . Phone {Region: "US" , Number: "510-444-3333" , Ext: "2345" , Type: "Mobile" }),
ksm.NewDate( 1641934793000 ),
ksm.NewNames( ksm . Name {First: "John" , Middle: "Patrick" , Last: "Smith" }),
ksm.NewOneTimeCode( "otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example" ),
)
customLogin.Custom = append (customLogin.Custom,
ksm.NewPhones( ksm . Phone {Region: "US" , Number: "510-222-5555" , Ext: "99887" , Type: "Mobile" }),
ksm.NewPhones( ksm . Phone {Region: "US" , Number: "510-111-3333" , Ext: "45674" , Type: "Mobile" }),
)
customLogin.Notes = "\tThis custom type record was created\n\tvia Go SDK copied from https://docs.keeper.io/secrets-manager/secrets-manager/developer-sdk-library/golang-sdk"
recordUid, err := sm.CreateSecretWithRecordData( "" , "[FOLDER UID]" , customLogin)
シークレットの削除
Go KSM SDKでKeeperボルトの記録を削除できます。
Delete Secret Example
コピー secretsManager.DeleteSecrets(recordUids)
コピー import ksm "github.com/keeper-security/secrets-manager-go/core"
func main () {
// Secrets Managerを設定
options := & ksm . ClientOptions {
// Token: "<One Time Access Token>",
Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
secretsManager := ksm.NewSecretsManager(options)
// UID記録で特定のシークレットを削除
secrets, err = secretsManager.DeleteSecrets([] string { "EG6KdJaaLG7esRZbMnfbFA" })
}
キャッシュ
ネットワークアクセスが失われたときにシークレットにアクセスできなくならないようにするために、Go SDKを使用してシークレットを暗号化されたファイルでローカルマシンにキャッシュできます。
キャッシュの設定と構成
Go SDKでキャッシュを設定するには、SetCache(cache ICache)
関数を使用して、内蔵メモリもしくはファイルベースのキャッシュのいずれかにキャッシュを設定するか、または独自の実装を使用します。
コピー type ICache interface {
SaveCachedValue (data [] byte ) error
GetCachedValue () ([] byte , error )
Purge () error
}
Go SDKには利便性を考慮して、メモリベースのキャッシュとファイルベースのキャッシュが組み込まれています。
コピー options := & ksm . ClientOptions {Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(options)
// メモリベースのキャッシュ
memCache := ksm.NewMemoryCache()
sm.SetCache(memCache)
// ファイルベースのキャッシュ
fileCache := ksm.NewFileCache( "ksm_cache.bin" )
sm.SetCache(fileCache)
フォルダ
フォルダは完全なCRUD(作成、読み取り、更新、削除操作)をサポートしています。
追加のパラメータ(バッチ処理の高速化などに有効なKeeperFolder
のリスト)を指定できるメソッドもあります。パラメータが見つからないか空の場合は、呼び出されるたびに完全なフォルダメタデータをそれぞれダウンロードします。
フォルダの読み取り
フォルダの完全な階層構造をダウンロードします。
コピー GetFolders() ([] * KeeperFolder, error )
レスポンス
型: []*KeeperFolder, error
使用例
コピー package main
import ksm "github.com/keeper-security/secrets-manager-go/core"
func main () {
options := & ksm . ClientOptions {Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(options)
folders, err := sm.GetFolders()
}
フォルダの作成
CreateOptions
とフォルダ名の指定が必要です。CreateOptions
はフォルダのUIDパラメータ(共有フォルダのUID)が必須ですが、サブフォルダのUIDはオプションであり、指定されていない場合は、通常の新しいフォルダが親(共有フォルダ)の直下に作成されます。サブフォルダは、親の共有フォルダの直接の下位オブジェクトである必要はありません。深さレベルは様々な場合があります。
コピー CreateFolder(createOptions CreateOptions, folderName string , folders [] * KeeperFolder) (folderUid string , err error )
パラメータ 型 必須 説明 CreateOptionsで作成した親とサブフォルダの検索に使用するフォルダのリスト
コピー type CreateOptions struct {
FolderUid string
SubFolderUid string
}
コピー type KeeperFolder struct {
FolderKey [] byte
FolderUid string
ParentUid string
Name string
}
使用例
コピー package main
import ksm "github.com/keeper-security/secrets-manager-go/core"
func main () {
options := & ksm . ClientOptions {Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(options)
co := ksm . CreateOptions {FolderUid: "[SHARED_FOLDER_UID]" , SubFolderUid: "" }
uid, err := sm.CreateFolder(co, "new_folder" , nil )
}
フォルダの更新
フォルダのメタデータ(現在はフォルダ名のみ)を更新します。
コピー UpdateFolder(folderUid, folderName string , folders [] * KeeperFolder) (err error )
使用例
コピー package main
import ksm "github.com/keeper-security/secrets-manager-go/core"
func main () {
options := & ksm . ClientOptions {Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(options)
err := sm.UpdateFolder( "[FOLDER_UID]" , "new_folder_name" , nil )
}
フォルダの削除
フォルダのリストを削除します。空でないフォルダを削除するには、forceDeletion
フラグを使用します。
forceDeletionを使用する場合は、親フォルダと子フォルダのUIDを一緒に送信しないでください。削除する順序によっては、エラーが発生する可能性があります。_たとえば、_親が子を先に強制削除した場合。リストが必ずしもFIFO順で処理される保証はありません。
ボルトに存在しないフォルダのUIDやKSMアプリケーションで共有されていないフォルダのUIDはエラーになりません。
コピー DeleteFolder(folderUids [] string , forceDeletion bool ) (statuses map [ string ] string , err error )
使用例
コピー package main
import ksm "github.com/keeper-security/secrets-manager-go/core"
func main () {
options := & ksm . ClientOptions {Config: ksm.NewFileKeyValueStorage( "ksm-config.json" )}
sm := ksm.NewSecretsManager(options)
stats, err := sm.DeleteFolder([] string { "[FOLDER_UID1]" , "[FOLDER_UID2]" }, true )
}