ダウンロードとインストール
MavenまたはGradleを使用したインストール
Gradle Maven
コピー repositories {
mavenCentral()
}
dependencies {
implementation 'com.keepersecurity.secrets-manager:core:16.5.4+'
}
コピー < dependency >
< groupId >com.keepersecurity.secrets-manager</ groupId >
< artifactId >core</ artifactId >
< version >[16.5.4,)</ version >
</ dependency >
ソースコード
Java/Kotlinのソースコードは、GitHubリポジトリ で入手できます
SDKの使用
ストレージの初期化
トークンのみを使用して (後で使用するために) 新しい設定を生成するには、トークンをバインドして、config.json
に完全に読み込むための読み取り操作が少なくとも1回必要です。
シークレットを取得するには、まずマシンのローカルストレージを初期化する必要があります。
コピー initializeStorage(storage : KeyValueStorage , clientKey : String ? = null , hostName : String ? = null )
使用例
コピー import static com . keepersecurity . secretsManager . core . SecretsManager . initializeStorage ;
import com . keepersecurity . secretsManager . core . LocalConfigStorage ;
import com . keepersecurity . secretsManager . core . SecretsManagerOptions ;
// oneTimeTokenはストレージの初期化に一度だけ使用
// 初回実行以降の呼び出しでは「ksm-config.txt」ファイルを使用
String oneTimeToken = "[One Time Access Token]" ;
LocalConfigStorage storage = new LocalConfigStorage( "ksm-config.txt" ) ;
try {
initializeStorage(storage , oneTimeToken) ;
SecretsManagerOptions options = new SecretsManagerOptions(storage) ;
// トークンのみを使用して(後で使用するために)設定を生成するには
// トークンをバインドするアクセス操作が少なくとも1回必要です
//getSecrets(options)
} catch ( Exception e) {
System . out . println ( e . getMessage ());
}
シークレットの取得
コピー getSecrets(options : SecretsManagerOptions , recordsFilter :List< String > = emptyList()) :KeeperSecrets
レスポンス
型:KeeperSecrets
すべてのKeeperのレコード、または指定したフィルタ条件に一致するレコードを含むオブジェクト
使用例
すべてのシークレットを取得
コピー import com . keepersecurity . secretsManager . core . SecretsManagerOptions ;
import com . keepersecurity . secretsManager . core . SecretsManager ;
import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperSecrets ;
// シークレットを取得
SecretsManagerOptions options = new SecretsManagerOptions(storage) ;
KeeperSecrets secrets = SecretsManager . getSecrets (options);
// シークレットからレコードを取得
List < KeeperRecord > records = secrets . getRecords ();
UIDで1つのシークレットを取得
コピー import com . keepersecurity . secretsManager . core . SecretsManagerOptions ;
import com . keepersecurity . secretsManager . core . SecretsManager ;
import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperSecrets ;
// シークレットを取得
SecretsManagerOptions options = new SecretsManagerOptions(storage) ;
KeeperSecrets secrets = SecretsManager . getSecrets (options);
// シークレットを取得するための1つまたは複数のUIDレコードを指定
List < String > uidFilter = List . of ( "[XXX]" );
// フィルタを使用してシークレットを取得
KeeperSecrets secrets = SecretsManager . getSecrets (options , uidFilter);
// シークレットからレコードを取得
List < KeeperRecord > records = secrets . getRecords ();
タイトルでシークレットを取得
コピー // 一致するレコードをすべて取得
getSecretsByTitle(recordTitle : String) :List< KeeperRecord >
// 最初に一致したレコードだけを取得
getSecretByTitle(recordTitle : String) :KeeperRecord
使用例
コピー import com . keepersecurity . secretsManager . core . * ;
import java . util . List ;
public class KSMSample {
public static void main ( String [] args){
// 事前に初期化されたストレージを取得
KeyValueStorage storage = new LocalConfigStorage( "ksm-config.json" ) ;
try {
SecretsManagerOptions options = new SecretsManagerOptions(storage) ;
// 取得するレコードのタイトル
String recordTitle = "My Credentials" ;
// タイトルでレコードを検索
KeeperRecord myCredentials = secrets . getRecords () . getSecretByTitle (recordTitle);
// レコードの詳細を出力
System . out . println ( "Record UID: " + myCredentials . getRecordUid ());
System . out . println ( "Title: " + myCredentials . getData () . getTitle ());
} catch ( Exception e) {
System . out . println ( e . getMessage ());
}
}
}
シークレットから値を取得
パスワードを取得
シークレットをKeeperシークレットマネージャーから取得すると、このショートカットでそのシークレットのパスワードを取得します。
Get Password Example Usage
コピー import com . keepersecurity . secretsManager . core . SecretsManagerOptions ;
import com . keepersecurity . secretsManager . core . SecretsManager ;
import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperSecrets ;
// シークレットを取得
SecretsManagerOptions options = new SecretsManagerOptions(storage) ;
KeeperSecrets secrets = SecretsManager . getSecrets (options);
// 最初のレコードを取得
List < KeeperRecord > records = secrets . getRecords () . get ( 0 );
// 最初のレコードからパスワードを取得
firstRecord . getPassword ()
フィールドを取得
Get Field Example Usage
コピー secret . getData () . getField ( < FIELD_TYPE > )
コピー import com . keepersecurity . secretsManager . core . SecretsManagerOptions ;
import com . keepersecurity . secretsManager . core . SecretsManager ;
import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperSecrets ;
// シークレットを取得
SecretsManagerOptions options = new SecretsManagerOptions(storage) ;
KeeperSecrets secrets = SecretsManager . getSecrets (options);
// 最初のレコードを取得
List < KeeperRecord > records = secrets . getRecords ();
KeeperRecord firstRecord = secrets . getRecords () . get ( 0 );
// 最初のレコードからパスワードを取得
KeeperRecordField pwd = firstRecord . getData () . getField ( Password . class )
フィールド値を取得するには、戻り値を対応するフィールドタイプのクラス にキャストする必要があります。フィールドタイプの一覧は、レコードタイプ ページをご参照ください。
Keeper表記法
Get Value Example Usage
コピー Notation . getValue (secret , "<query>" );
// クエリの例 「<RECORD UID>/field/login」
コピー import static com . keepersecurity . secretsManager . core . SecretsManager . *
import static com . keepersecurity . secretsManager . core . Notation . * ;
...
// シークレットを取得
KeeperSecrets secrets = getSecrets(options) ;
// ドット記法でログインを取得
String login = getValue(secrets , "BediNKCMG21ztm5xGYgNww/field/login" ) ;
TOTPコードを取得
Get TOTP Code Example Usage
コピー TotpCode . uriToTotpCode (url)
コピー import static com . keepersecurity . secretsManager . core . Notation . * ;
import static com . keepersecurity . secretsManager . core . TotpCode . * ;
...
// シークレットを取得
KeeperSecrets secrets = getSecrets(options) ;
// レコードからTOTP urlを取得
String url = getValue(secrets , "BediNKCMG21ztm5xGYgNww/field/oneTimeCode" ) ;
// TOTPコードを取得
TotpCode totp = uriToTotpCode(url) ;
シークレットの値を更新
シークレットを更新
Update Secret Example Usage
コピー updateSecret(options : SecretsManagerOptions , recordToUpdate : KeeperRecord) ;
コピー import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperSecrets ;
import com . keepersecurity . secretsManager . core . SecretsManagerOptions ;
import static com . keepersecurity . secretsManager . core . SecretsManager . * ;
...
// シークレットを取得
SecretsManagerOptions options = SecretsManagerOptions(storage) ;
KeeperSecrets secrets = getSecrets(options) ;
// 最初のレコードを更新
KeeperRecord recordToUpdate = secrets . getRecords () . get ( 0 );
// パスワードを更新
recordToUpdate . updatePassword ( "aP1$t367QOCvL$eM$bG#" );
// 変更を保存
updateSecret(options , recordToUpdate) ;
UpdateSecretを使用して、シークレットに加えた変更を保存します。 UpdateSecretが正常に実行されると、変更がKeeperボルトに反映されます。
パスワード****を更新
Update Password Example Usage
コピー recordToUpdate . updatePassword (password : String);
SecretsManager . updateSecret (options , recordToUpdate);
コピー import static com . keepersecurity . secretsManager . core . SecretsManager ;
import com . keepersecurity . secretsManager . core . SecretsManagerOptions ;
import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperSecrets ;
// シークレットを取得
SecretsManagerOptions options = SecretsManagerOptions(storage) ;
KeeperSecrets secrets = getSecrets(options) ;
// 最初のレコードを更新
KeeperRecord recordToUpdate = secrets . getRecords () . get ( 0 );
// パスワードを更新
recordToUpdate . updatePassword ( "aP1$t367QOCvL$eM$bG#" );
// 変更を保存
SecretsManager . updateSecret (options , recordToUpdate);
他のフィールドを更新
Set Value Example Usage
コピー // 形式
RecordField . getValue () . set (index , value)
// 例 - ログインフィールド
recordLogin . getValue () . set ( 0 , "New Login" );
コピー // 編集するフィールドを取得
Login recordLogin = (Login) recordToUpdate . getData () . getField ( Login . class );
// フィールド値を更新
recordLogin . getValue () . set ( 0 , "New Login" );
// 変更を保存
SecretsManager . updateSecret (options , recordToUpdate);
レコードの各フィールドタイプは、クラスに相当します。 フィールドの値に正しくアクセスするために、フィールドを対応するクラスにキャストします。 フィールドタイプの一覧は、レコードタイプ のドキュメントをご確認ください。
フィールドには複数の値を設定でき、リストでアクセスします。 この例では、1つの値のみを指定するログインフィールドを更新するため、値リスト内の1つの値を更新します。
ランダムなパスワードを生成
Generate Password Example Usage
コピー generatePassword(length : int , lowercase : int , uppercase : int , digits : int , specialCharacters : int )
コピー import com . keepersecurity . secretsManager . core . CryptoUtils ;
// 編集するフィールドを取得
Password recordPassword = (Password) recordToUpdate . getData () . getField ( Password . class );
// ランダムなパスワードを生成
String password = CryptoUtils . generatePassword ();
// フィールド値を更新
recordPassword . getValue () . set ( 0 , password);
// 変更を保存
SecretsManager . updateSecret (options , recordToUpdate);
各パラメータは、使用する文字の種類の最小数を示します。たとえば、「uppercase」は、使用する大文字の最小数を示します。
ファイルのダウンロード
Download File Example Usage
コピー SecretsManager . downloadFile (file) :ByteArray
コピー import static com . keepersecurity . secretsManager . core . SecretsManager ;
import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperFile ;
// 最初のレコードから最初のファイルをダウンロード
KeeperRecord firstRecord = secrets . getRecords () . get ( 0 );
KeeperFile file = firstRecord . getFileByName ( "acme.cer" );
byte [] fileBytes = SecretsManager . downloadFile (file);
// ファイルをディスクに書き込む
try ( FileOutputStream fos = new FileOutputStream( file . getData() . getName()) ) {
fos . write (fileBytes);
} catch ( IOException ioException){
ioException . printStackTrace ();
}
レスポンス
型:ByteArray
ダウンロード用のファイルのバイト配列
サムネイル のダウンロード
Download Thumbnail Example Usage
コピー SecretsManager . downloadThumbnail (file) :ByteArray
コピー import static com . keepersecurity . secretsManager . core . SecretsManager ;
import com . keepersecurity . secretsManager . core . KeeperRecord ;
import com . keepersecurity . secretsManager . core . KeeperFile ;
// 最初のレコードから最初のファイルをダウンロード
KeeperRecord firstRecord = secrets . getRecords () . get ( 0 );
KeeperFile file = firstRecord . getFileByName ( "acme.cer" );
byte [] fileBytes = SecretsManager . downloadThumbnail (file);
// ファイルをディスクに書き込む
try ( FileOutputStream fos = new FileOutputStream( file . getData() . getName()) ) {
fos . write (fileBytes);
} catch ( IOException ioException){
ioException . printStackTrace ();
}
レスポンス
型:ByteArray
ダウンロード用サムネイルのバイト配列
ファイルのアップロード
ファイルのアップロード:
コピー uploadFile(options : SecretsManagerOptions , ownerRecord : KeeperRecord , file : KeeperFileUpload) :String
Keeperファイルアップロードオブジェクトを作成:
コピー KeeperFileUpload (
val name: String ,
val title: String ,
val type: String ?,
val data : ByteArray
)
パラメータ 型 必須 説明 アップロード後にKeeperに格納されるファイルの名前
アップロード後にKeeperに格納されるファイルのタイトル
ファイルのデータのMIMEタイプ。何も指定しない場合は、「application/octet-stream」が使用されます
使用例
コピー import com . keepersecurity . secretsManager . core . * ;
import java . io . File ;
import java . io . FileInputStream ;
import java . util . Arrays ;
public class KSMSample {
public static void main ( String [] args){
// 事前に初期化されたストレージを取得
KeyValueStorage storage = new LocalConfigStorage( "ksm-config.json" ) ;
try {
SecretsManagerOptions options = new SecretsManagerOptions(storage) ;
// 必要なレコードのUIDを含むフィルタを作成
List < String > uidFilter = List . of ( "XXX" );
// フィルタを使用してシークレットを取得
KeeperSecrets secrets = SecretsManager . getSecrets (options , uidFilter);
// ファイルのアップロード先のシークレットを取得
KeeperRecord ownerRecord = secrets . getRecords () . get ( 0 );
// アップロードするファイルからバイトを取得
File file = new File( "./myFile.json" ) ;
FileInputStream fl = new FileInputStream(file) ;
byte [] fileBytes = new byte [( int ) file . length ()];
fl . read (fileBytes);
fl . close ();
// アップロードするKeeperファイルを作成
KeeperFileUpload myFile = new KeeperFileUpload(
"myFile.json" ,
"My File" ,
"application/json" ,
fileBytes
)
// 選択したレコードにファイルをアップロード
SecretsManager . uploadFile (options , ownerRecord , myFile);
} catch ( Exception e) {
System . out . println ( "KSM ran into an problem: " + e . getMessage ());
}
}
}
シークレットの作成
前提条件:
共有フォルダのUID
共有フォルダには、シークレットマネージャーアプリケーションからアクセスできる必要があります
あなたとシークレットマネージャーアプリケーションには編集権限が必要です
共有フォルダには、少なくとも1つのレコードが存在する必要があります
作成されたレコードとレコードのフィールドは正しく書式設定されている必要があります
レコードタイプごとの適切なフィールド形式については、このドキュメント をご参照ください
TOTPフィールドには、KSM SDK以外で生成されたURLのみを指定できます
シークレットマネージャーSDKで作成したKeeperのレコードは、現時点ではファイル添付をサポートしていません
Create a Record Login Record Example Custom Type Example
コピー SecretsManager . createSecret (options , folderUid , newRecordData , secrets);
この例では、ログイン値と生成されたパスワードを含むログインタイプのレコードを作成します。
例にある「[FOLDER UID]
」をシークレットマネージャーアプリケーションがアクセスできる共有フォルダのUIDに置き換えます。
コピー import com . keepersecurity . secretsManager . core . * ;
KeeperRecordData newRecordData = new KeeperRecordData(
"Sample KSM Record:Java" ,
"login" ,
Arrays . asList(
new Login( "My Username" ) ,
new Password( CryptoUtils . generatePassword())
) ,
null ,
"This is a \nmultiline\n\n\tnote"
) ;
String recordUid = SecretsManager . createSecret (options , folderUid , newRecordData);
この例では、カスタムのレコードタイプのレコードを作成します。
例にある「[FOLDER UID]
」をシークレットマネージャーアプリケーションがアクセスできる共有フォルダのUIDに置き換えます。
コピー import com . keepersecurity . secretsManager . core . * ;
KeeperRecordData newRecordData = new KeeperRecordData(
"Sample Custom Type KSM Record:Java" ,
"Custom Login" , // レコードタイプの名前
Arrays . asList(
new Hosts(
"My Custom Host lbl" , // ラベル
true , // 必須
false , // プライベートスクリーン
List . of( new Host( "127.0.0.1" , "8000" ))) ,
// または new Hosts(new Host("127.0.0.1", "8000"))
new Login( "My Custom Login lbl" ,
true ,
false ,
List . of( "login@email.com" )) ,
// または new Login("username@email.com")
new Password( "My Custom Password lbl" ,
true ,
false ,
List . of( CryptoUtils . generatePassword())) ,
// または new Password(CryptoUtils.generatePassword())
new Url( "My Login Page" ,
true ,
false ,
List . of( "http://localhost:8080/login" )) ,
// または new Url("http://localhost:8080/login")
new SecurityQuestions(
"My Question 1" ,
true ,
false ,
List . of( new SecurityQuestion( "What is one plus one (write just a number)" , "2" ))) ,
// または new SecurityQuestions(new SecurityQuestion("What is one plus one (write just a number)", "2"))
new Phones( "My Phone Number" ,
true ,
false ,
List . of( new Phone( "US" , "510-444-3333" , "2345" , "Mobile" ))) ,
// または new Phones(new Phone("US", "510-444-3333", "2345", "Mobile"))
new Date( "My Date Lbl" ,
true ,
false ,
List . of( 1641934793000L )
) ,
// または new Date(1641934793000L),
new Names( "My Custom Name lbl" ,
true ,
false ,
List . of( new Name( "John" , "Patrick" , "Smith" ))) ,
// または new Names(new Name("John", "Patrick", "Smith"))
new OneTimeCode( "My TOTP" ,
true ,
false ,
List . of( "otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example" ))
// または new OneTimeCode("otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example")
) ,
Arrays . asList(
new Phones( new Phone( "US" , "(510) 123-3456" )) ,
new Phones( new Phone( "US" , "510-111-3333" , "45674" , "Mobile" ))
) ,
"\tThis custom type record was created\n\tvia KSM Java Document Example"
) ;
String recordUid = SecretsManager . createSecret (options , "[FOLDER UID]" , newRecordData);
パラメータ 型 必須 デフォルト Keeperサーバーから新たに取得したすべてのシークレットのリスト
シークレットの削除
Java/Kotlin KSM SDKでKeeperボルトのレコードを削除できます。
Delete Secret Example
コピー deleteSecret(smOptions , recordUids) ;
コピー // シークレットマネージャーを設定
val storage = LocalConfigStorage( "ksm-config.json" )
//initializeStorage(storage, "<One Time Access Token>")
val smOptions = SecretsManagerOptions(storage)
// UIDレコードで特定のシークレットを削除
deleteSecret(smOptions , List . of( "EG6KdJaaLG7esRZbMnfbFA" )) ;
キャッシュ
ネットワークアクセスが失われたときにシークレットにアクセスできなくならないようにするために、Java SDKを使用してシークレットを暗号化されたファイルでローカルマシンにキャッシュできます。
キャッシュの設定と構成
Java SDKでキャッシュを設定するには、SecretsManagerOptions
オブジェクトをインスタンス化するときに、2番目の引数としてPOSTキャッシュ関数を指定します。
Java SDKには、クエリをキャッシュしてファイルに保存するデフォルトのキャッシュ関数cachingPostFunction
が含まれています。
コピー // キャッシュオプションを作成
SecretsManagerOptions options = new SecretsManagerOptions(storage , SecretsManager :: cachingPostFunction) ;
// 例すべてのシークレットを取得
SecretsManager . getSecrets (options)
フォルダ
フォルダは完全なCRUD (作成、読み取り、更新、削除操作) をサポートしています。
追加のパラメータ (バッチ処理の高速化などに有効なKeeperFolder
のリスト) を指定できるメソッドもあります。パラメータが見つからないか空の場合は、呼び出されるたびに完全なフォルダメタデータをそれぞれダウンロードします。
フォルダの読み取り
フォルダの完全な階層構造をダウンロードします。
コピー getFolders(options : SecretsManagerOptions) :List< KeeperFolder >
レスポンス
型:List<KeeperFolder>
使用例
コピー import com . keepersecurity . secretsManager . core . * ;
SecretsManagerOptions options = new SecretsManagerOptions( new LocalConfigStorage( "ksm-config.json" )) ;
List < KeeperFolder > folders = SecretsManager . getFolders (options);
フォルダの作成
CreateOptions
とフォルダ名の指定が必要です。CreateOptions
はフォルダのUIDパラメータ (共有フォルダのUID) が必須ですが、サブフォルダのUIDはオプションであり、指定されていない場合は、通常の新しいフォルダが親 (共有フォルダ) の直下に作成されます。サブフォルダは、親の共有フォルダの直接の下位オブジェクトである必要はありません。深さレベルは様々な場合があります。
コピー createFolder(options:SecretsManagerOptions, createOptions:CreateOptions, folderName:String, folders:List<KeeperFolder> = getFolders(options)):String
パラメータ 型 必須 デフォルト 説明 CreateOptionsで作成した親とサブフォルダの検索に使用するフォルダのリスト
コピー data class CreateOptions constructor (
val folderUid: String ,
val subFolderUid: String ? = null ,
)
コピー data class KeeperFolder (
val folderKey: ByteArray ,
val folderUid: String ,
val parentUid: String ? = null ,
val name: String
)
使用例
コピー import com . keepersecurity . secretsManager . core . * ;
SecretsManagerOptions options = new SecretsManagerOptions( new LocalConfigStorage( "ksm-config.json" )) ;
CreateOptions co := new CreateOptions( "[SHARED_FOLDER_UID]" ) ;
String folderUid = SecretsManager . createFolder (options , co , "new_folder" );
フォルダの更新
フォルダのメタデータ (現在はフォルダ名のみ) を更新します。
コピー updateFolder(options:SecretsManagerOptions, folderUid:String, folderName:String, folders:List<KeeperFolder> = getFolders(options))
使用例
コピー import com . keepersecurity . secretsManager . core . * ;
SecretsManagerOptions options = new SecretsManagerOptions( new LocalConfigStorage( "ksm-config.json" )) ;
SecretsManager . updateFolder (options , "[FOLDER_UID]" , "new_folder_name" );
フォルダの削除
フォルダのリストを削除します。空でないフォルダを削除するには、forceDeletion
フラグを使用します。
forceDeletionを使用する場合は、親フォルダと子フォルダのUIDを一緒に送信しないでください。削除する順序によっては、エラーが発生する可能性があります。_たとえば、_親が子を先に強制削除した場合。リストが必ずしもFIFO順で処理される保証はありません。
ボルトに存在しないフォルダのUIDやKSMアプリケーションで共有されていないフォルダのUIDはエラーになりません。
コピー deleteFolder(options:SecretsManagerOptions, folderUids:List<String>, forceDeletion:Boolean = false):SecretsManagerDeleteResponse
使用例
コピー import com . keepersecurity . secretsManager . core . * ;
SecretsManagerOptions options = new SecretsManagerOptions( new LocalConfigStorage( "ksm-config.json" )) ;
SecretsManager . deleteFolder (options , Arrays . asList ( "[FOLDER_UID1]" , "[FOLDER_UID2]" ) , true );