ダウンロードとインストール
NPMによるインストール
npm install @keeper-security/secrets-manager-core
ソースコード
JavaScriptのソースコードは、GitHubリポジトリで入手できます。
SDKの使用
ストレージの初期化
トークンのみを使用して (後で使用するために) 新しい設定を生成するには、トークンをバインドして、config.json
に完全に読み込むための読み取り操作が少なくとも1回必要です。
シークレットを取得するには、まずマシンのローカルストレージを初期化する必要があります。
initializeStorage(storage:KeyValueStorage, clientKey:String? = null, hostName:String? = null)
Keeperシークレットマネージャーに接続するためのトークン
シークレットを取得するサーバーの場所。 何も指定しない場合は、keepersecurity.com (米国) が使用されます
使用例
const { getSecrets, initializeStorage, localConfigStorage } = require('@keeper-security/secrets-manager-core')
const getKeeperRecords = async () => {
// oneTimeTokenはストレージの初期化に一度だけ使用
// 初回実行以降の呼び出しでは、ksm-config.txtを使用
const oneTimeToken = "<One Time Access Token>";
const storage = localConfigStorage("ksm-config.json")
await initializeStorage(storage, oneTimeToken)
// トークンのみを使用して(後で使用するために)設定を生成するには
// トークンをバインドするアクセス操作が少なくとも1回必要です
//await getSecrets({storage: storage})
const {records} = await getSecrets({storage: storage})
console.log(records)
const firstRecord = records[0]
const firstRecordPassword = firstRecord.data.fields.find(x => x.type === 'password')
console.log(firstRecordPassword.value[0])
}
getKeeperRecords().finally()
シークレットの取得
getSecrets(options:SecretsManagerOptions, recordsFilter:List<String> = emptyList()):KeeperSecrets
レスポンス
型:KeeperSecrets
すべてのKeeperのレコード、または指定したフィルタ条件に一致するレコードを含むオブジェクト
使用例
すべてのシークレットを取得
const storage = inMemoryStorage() // see initialization example
val secrets = getSecrets(storage)
タイトルでシークレットを取得
// 一致するレコードをすべて取得
getSecretsByTitle = async (options:SecretManagerOptions, recordTitle: string):Promise<KeeperRecord[]>
// 最初に一致したレコードだけを取得
getSecretByTitle = async (options:SecretManagerOptions, recordTitle: string):Promise<KeeperRecord>
使用例
const {
getSecretByTitle,
localConfigStorage,
} = require('@keeper-security/secrets-manager-core')
const getKeeperRecord = async () => {
const options = { storage: localConfigStorage("ksm-config.json")
const {myCredential} = await getSecretByTitle(options, "My Credential")
}
getKeeperRecord().finally()
シークレットから値を取得
パスワードを取得
secret.data.fields.find(x => x.type === 'password')
const { getSecrets, initializeStorage, localConfigStorage } = require('@keeper-security/secrets-manager-core')
const getKeeperRecords = async () => {
const storage = localConfigStorage("ksm-config.json")
// レコードを取得
const {records} = await getSecrets({storage: storage})
// 最初のレコードからパスワードを取得
const firstRecord = records[0]
const firstRecordPassword = firstRecord.data.fields.find(x => x.type === 'password')
}
フィールドはタイプで検索されます。フィールドタイプの一覧は、レコードタイプのドキュメントをご参照ください。
Keeper表記法を使用して他のフィールドを取得
getValue(secrets:KeeperSecrets, query: string): any
const {
getSecrets,
localConfigStorage,
getValue
} = require('@keeper-security/secrets-manager-core')
const getKeeperRecords = async () => {
const options = { storage: localConfigStorage("ksm-config.json") }
// シークレットを取得
const secrets = await getSecrets(options)
// ドット記法でログインを取得
const loginValue = getValue(secrets, 'RECORD_UID/field/login')
}
この表記を使用したクエリのUIDレコードは、secretsパラメータで指定したシークレットのレコードである必要があります。そうでないと、クエリに何も返されません。
戻り値
型: any
ドット記法を使用したクエリで指定された位置のフィールドに値が存在する場合はその値 (存在しない場合は不定)
TOTPコードを取得
getTotpCode(url: string): string
const {
getSecrets,
localConfigStorage,
getTotpCode,
getValue} = require('@keeper-security/secrets-manager-core')
const getKeeperRecords = async () => {
const options = { storage: localConfigStorage("ksm-config.json") }
// シークレットを取得
const secrets = await getSecrets(options)
// ドット記法でログインを取得
const totpUri = getValue(secrets,'RECORD_UID/field/oneTimeCode')
// TOTPコードを取得
const totp = await getTotpCode(totpUri)
}
この表記を使用したクエリのUIDレコードは、secretsパラメータで指定したシークレットのレコードである必要があります。そうでないと、クエリに何も返されません。
戻り値
型: any
ドット記法を使用したクエリで指定された位置のフィールドに値が存在する場合はその値 (存在しない場合は不定)
シークレットを更新
updateSecret(options, record)
const {
getSecrets,
localConfigStorage,
updateSecret} = require('@keeper-security/secrets-manager-core')
const storage = localConfigStorage("ksm-config.json")
// レコードを取得
const {records} = await getSecrets({storage: storage})
// 最初のレコードを取得
const recordToUpdate = records[0]
// 新しいレコードタイトルを設定
recordToUpdate.data.title = 'New Title'
// レコードの変更を保存
await updateSecret(options, recordToUpdate)
戻り値
型:Promise<void>
ランダムなパスワードを生成
generatePassword(length, lowercase, uppercase, digits, specialCharacters)
const {
getSecrets,
localConfigStorage,
updateSecret,
generatePassword } = require('@keeper-security/secrets-manager-core')
// ランダムなパスワードを生成
let newRandomPwd = await generatePassword()
const storage = localConfigStorage("ksm-config.json")
const {records} = await getSecrets({storage: storage})
// 最初のレコードを取得
const recordToUpdate = records[0]
// タイプが「password」のフィールドを検索
const recordToUpdatePasswordField = recordToUpdate.data.fields.find(x => x.type === 'password')
// passwordフィールドに新しい値を設定
recordToUpdatePasswordField.value[0] = newRandomPwd
await updateSecret({storage: storage}, recordToUpdate)
各パラメータは、使用する文字の種類の最小数を示します。たとえば、「uppercase」は、使用する大文字の最小数を示します。
戻り値
型:String
ファイルのダウンロード
downloadFile(file:KeeperFile):ByteArray
レスポンス
型:Promise<Uint8Array>
ダウンロード用のファイルのバイト
サムネイルのダウンロード
downloadThumbnail(file:KeeperFile):ByteArray
レスポンス
型:Promise<Uint8Array>
ダウンロード用サムネイルのバイト
ファイルのアップロード
ファイルのアップロード:
uploadFile = async (options:SecretManagerOptions, ownerRecord:KeeperRecord, file:KeeperFileUpload):Promise<string>
Keeperファイルアップロードオブジェクトを作成:
type KeeperFileUpload = {
name: string
title: string
type?: string
data:Uint8Array
}
アップロード後にKeeperに格納されるファイルの名前
アップロード後にKeeperに格納されるファイルのタイトル
ファイルのデータのMIMEタイプ。何も指定しない場合は、「application/octet-stream」が使用されます
使用例
// ファイルを添付するレコードを取得
const {records} = await getSecrets({storage: storage}, ['XXX'])
const ownerRecord = records[0]
// アップロードするファイルデータを取得
const fileData = fs.readFileSync('./assets/my-file.json')
// 選択したレコードにファイルをアップロード
await uploadFile(options, ownerRecord, {
name: 'my-file.json',
title:'Sample File',
type: 'application/json',
data: fileData
})
シークレットの作成
前提条件:
共有フォルダのUID
共有フォルダには、シークレットマネージャーアプリケーションからアクセスできる必要があります
あなたとシークレットマネージャーアプリケーションには編集権限が必要です
共有フォルダには、少なくとも1つのレコードが存在する必要があります
作成されたレコードとレコードのフィールドは正しく書式設定されている必要があります
レコードタイプごとの適切なフィールド形式については、このドキュメントをご参照ください
TOTPフィールドには、KSM SDK以外で生成されたURLのみを指定できます
シークレットマネージャーSDKで作成したKeeperのレコードは、現時点ではファイル添付をサポートしていません
createSecret(options, folderUid, record)
この例では、ログイン値と生成されたパスワードを含むログインタイプのレコードを作成します。
例にある「[FOLDER UID]
」をシークレットマネージャーがアクセスできる共有フォルダのUIDに置き換えます。
let newRec = {
"title":"Sample KSM Record:JavaScript",
"type": "login",
"fields": [
{ "type": "login", "value": [ "username@email.com" ] },
{ "type": "password", "value": [ await generatePassword() ] }
],
"notes":"This is a JavaScript record creation example"
}
let recordUid = await createSecret(options, folderUid, newRec)
この例では、カスタムのレコードタイプのレコードを作成します。
例にある「[FOLDER UID]
」をシークレットマネージャーがアクセスできる共有フォルダのUIDに置き換えます。
let newRec = {
"title":"Sample Custom Type KSM Record:JavaScript",
"type":"Custom Login",
"fields": [
{
"type": "host",
"label":"My Custom Host lbl",
"value": [ {"hostName":"127.0.0.1", "port":"8080"} ],
"required": true,
"privacyScreen": false
},
{
"type": "login",
"label":"My Custom Login lbl",
"value": [ "login@email.com" ],
"required": true,
"privacyScreen": false
},
{
"type": "password",
"label":"My Custom Password lbl",
"value": [ await generatePassword() ],
"required": true,
"privacyScreen": false
},
{
"type": "url",
"label":"My Login Page",
"value": [ "http://localhost:8080/login" ],
"required": true,
"privacyScreen": false
},
{
"type": "securityQuestion",
"label":"My Question 1",
"value": [ {
"question":"What is one plus one (write just a number)",
"answer":"2"
} ],
"required": true,
"privacyScreen": false
},
{
"type": "phone",
"value": [{
"region":"US",
"number":"510-444-3333",
"ext":"2345",
"type":"Mobile"
}],
"label":"My Phone Number"
},
{
"type": "date",
"value": [ 1641934793000 ],
"label":"My Date Lbl",
"required": true,
"privacyScreen": false
},
{
"type": "name",
"value": [{
"first":"John",
"middle":"Patrick",
"last":"Smith"
}],
"label":"My Custom Name lbl",
"required": true,
"privacyScreen": false
},
{
"type": "oneTimeCode",
"label":"My TOTP",
"value": ["otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example"],
"required": true,
"privacyScreen": false
}
],
"custom": [
{
"type": "phone",
"value": [{
"region":"US",
"number": "(510) 123-3456"
}],
"label":"My Custom Phone Lbl 1"
},
{
"type": "phone",
"value": [ {
"region":"US",
"number":"510-111-3333",
"ext":"45674",
"type":"Mobile" } ],
"label":"My Custom Phone Lbl 2"
}
],
"notes": "\tThis custom type record was created\n\tvia KSM Katacoda JavaScript Example"
}
let recordUid = await createSecret(options, "[FOLDER UID]", newRec)
シークレットの削除
JavaScript KSM SDKでKeeperボルトのレコードを削除できます。
deleteSecret(smOptions, recordUids);
// シークレットマネージャーを設定
const smOptions = { storage: localConfigStorage("ksm-config.json")
// UIDレコードで特定のシークレットを削除
await deleteSecret(smOptions, ["EG6KdJaaLG7esRZbMnfbFA"]);
キャッシュ
ネットワークアクセスが失われたときにシークレットにアクセスできなくならないようにするために、JavaScript SDKを使用してシークレットを暗号化されたファイルでローカルマシンにキャッシュできます。
SecretManagerOptions
にqueryFunction: cachingPostFunction
を追加
使用例:
const options:SecretManagerOptions = {
storage: kvs,
queryFunction: cachingPostFunction // Import `cachingPostFunction`
}
フォルダ
フォルダは完全なCRUD (作成、読み取り、更新、削除操作) をサポートしています。
追加のパラメータ (バッチ処理の高速化などに有効なKeeperFolder
のリスト) を指定できるメソッドもあります。パラメータが見つからないか空の場合は、呼び出されるたびに完全なフォルダメタデータをそれぞれダウンロードします。
フォルダの読み取り
フォルダの完全な階層構造をダウンロードします。
getFolders = async (options:SecretManagerOptions):Promise<KeeperFolder[]>
レスポンス
型:KeeperFolder[]
使用例
const storage = localConfigStorage("ksm-config.json")
const folders = await getFolders({storage: storage})
フォルダの作成
CreateOptions
とフォルダ名の指定が必要です。CreateOptions
はフォルダのUIDパラメータ (共有フォルダのUID) が必須ですが、サブフォルダのUIDはオプションであり、指定されていない場合は、通常の新しいフォルダが親 (共有フォルダ) の直下に作成されます。サブフォルダは、親の共有フォルダの直接の下位オブジェクトである必要はありません。深さレベルは様々な場合があります。
createFolder = async (options:SecretManagerOptions, createOptions:CreateOptions, folderName: string):Promise<string>
type CreateOptions = {
folderUid: string
subFolderUid?: string
}
使用例
const storage = localConfigStorage("ksm-config.json")
const folderUid = await createFolder({storage: storage}, {folderUid: "[SHARED_FOLDER_UID]"}, "new_folder")
フォルダの更新
フォルダのメタデータ (現在はフォルダ名のみ) を更新します。
updateFolder = async (options:SecretManagerOptions, folderUid: string, folderName: string):Promise<void>
使用例
const storage = localConfigStorage("ksm-config.json")
await updateFolder({storage: storage}, "[FOLDER_UID]", "new_folder_name")
フォルダの削除
フォルダのリストを削除します。空でないフォルダを削除するには、forceDeletion
フラグを使用します。
forceDeletionを使用する場合は、親フォルダと子フォルダのUIDを一緒に送信しないでください。削除する順序によっては、エラーが発生する可能性があります。たとえば、親が子を先に強制削除した場合。リストが必ずしもFIFO順で処理される保証はありません。
ボルトに存在しないフォルダのUIDやKSMアプリケーションで共有されていないフォルダのUIDはエラーになりません。
deleteFolder = async (options:SecretManagerOptions, folderUids: string[], forceDeletion?: boolean):Promise<SecretsManagerDeleteResponse>
使用例
const storage = localConfigStorage("ksm-config.json")
await deleteFolder({storage: storage}, ["[FOLDER_UID1]", "[FOLDER_UID2]"], true)