JavaScript SDK

Keeperシークレットマネージャー用Javascript SDKの詳細

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

NPMによるインストール

npm install @keeper-security/secrets-manager-core

ソースコード

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

SDKの使用

ストレージの初期化

トークンのみを使用して新しい構成 (後で使用するため) を生成する場合、トークンをバインドして config.jsonを完全に生成するために、少なくとも1回の読み取り操作が必要です。

シークレットを取得するには、まずマシンのローカルストレージを初期化する必要があります。

initializeStorage(storage:KeyValueStorage, clientKey:String? = null, hostName:String? = null)
パラメータ
必須
デフォルト
説明

storage

KeyValueStorage

はい

保存場所

clientKey

string

オプション

null

Keeperシークレットマネージャーに接続するためのトークン

hostName

string

オプション

null

シークレットを取得するサーバーの場所。 何も指定しない場合は、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
パラメータ
必須
デフォルト
説明

storage

KeyValueStorage

はい

保存場所

recordsFilter

string[]

オプション

空のリスト

取得するUIDレコード

レスポンス

型: 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>
パラメータ
必須
説明

options

SecretsManagerOptions

はい

事前に設定されたオプション

recordTitle

string

はい

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

使用例

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')

フィールドはタイプで検索されます。フィールドタイプの一覧は、レコードタイプのドキュメントをご参照ください。

Keeper表記法を使用して他のフィールドを取得

getValue(secrets:KeeperSecrets, query: string): any

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

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

secrets

KeeperSecrets

はい

照会するシークレット

query

string

はい

Keeper表記法を使用したクエリ

  • この表記を使用したクエリで指定するレコードUIDは、secretsパラメーターで渡されたシークレットのいずれかである必要があります。そうでない場合、クエリでは何も取得されません。

戻り値

型: any

ドット記法を使用したクエリで指定された位置のフィールドに値が存在する場合はその値 (存在しない場合は不定)

TOTPコードを取得

getTotpCode(url: string): string

Keeper表記法の形式と機能については、Keeper表記法のページをご参照ください。

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

url

string

はい

TOTP Url

  • この表記を使用したクエリで指定するレコードUIDは、secretsパラメーターで渡されたシークレットのいずれかである必要があります。そうでない場合、クエリでは何も取得されません。

戻り値

型: any

ドット記法を使用したクエリで指定された位置のフィールドに値が存在する場合はその値 (存在しない場合は不定)

シークレットを更新

updateSecret(options, record)

パラメータ

必須

デフォルト

説明

options

SecretManagerOptions

はい

record

KeeperRecord

はい

戻り値

型: Promise<void>

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

generatePassword(length, lowercase, uppercase, digits, specialCharacters)
パラメータ
必須
デフォルト

length

int

オプション

64

lowercase

int

オプション

0

uppercase

int

オプション

0

digits

int

オプション

0

specialCharacters

int

オプション

0

各パラメーターは、それぞれの文字タイプを最低何文字含めるかを指定します。たとえば、uppercase は「大文字を最低何文字含めるか」を示します。

戻り値

型: String

ファイルのダウンロード

downloadFile(file:KeeperFile):ByteArray
パラメータ
必須
デフォルト
説明

file

KeeperFile

はい

ダウンロードするファイル

レスポンス

型: Promise<Uint8Array>

ダウンロード用のファイルのバイト列

サムネイルのダウンロード

downloadThumbnail(file:KeeperFile):ByteArray
パラメータ
必須
デフォルト
説明

file

KeeperFile

はい

ダウンロードするサムネイル付きファイル

レスポンス

型: Promise<Uint8Array>

ダウンロード用サムネイルのバイト列

ファイルのアップロード

ファイルのアップロード:

uploadFile = async (options:SecretManagerOptions, ownerRecord:KeeperRecord, file:KeeperFileUpload):Promise<string>
パラメータ
必須
説明

options

SecretsManagerOptions

はい

ストレージとクエリの設定

ownerRecord

KeeperRecord

はい

アップロードされたファイルを添付するレコード

file

KeeperFileUpload

はい

アップロードするファイル

Keeperファイルアップロードオブジェクトを作成:

type KeeperFileUpload = {
    name: string
    title: string
    type?: string
    data:Uint8Array
}
パラメータ
必須
説明

name

string

はい

アップロード後にKeeperに格納されるファイルの名前

title

string

はい

アップロード後にKeeperに格納されるファイルのタイトル

type

string

オプション

ファイルのデータのMIMEタイプ。何も指定しない場合は、「application/octet-stream」が使用されます

data

Uint8Array

はい

バイト型のファイルデータ

使用例

// ファイルを添付するレコードを取得
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のみを指定できます

  • レコードを作成した後、uploadFileを使用して添付ファイルをアップロードできます

createSecret(options, folderUid, record)
パラメータ
必須
デフォルト

options

SecretManagerOptions

はい

folderUid

string

はい

record

JSON Object

はい

シークレットの削除

JavaScript KSM SDKでKeeperボルトのレコードを削除できます。

deleteSecret(smOptions, recordUids);
パラメータ
必須

smOptions

SecretManagerOptions

はい

recordUids

string[]

はい

キャッシュ

ネットワークへのアクセスが失われた際にシークレットへのアクセスも失うという事態を避けるため、JavaScript SDKでは、シークレットを暗号化されたファイルとしてローカルマシンにキャッシュすることができます。

SecretManagerOptionsqueryFunction: cachingPostFunctionを追加

使用例:

const options:SecretManagerOptions = {    
    storage: kvs,
    queryFunction: cachingPostFunction // `cachingPostFunction` をインポートする
}

フォルダ

フォルダは完全なCRUD (作成、読み取り、更新、削除操作) に対応しています。

フォルダの読み取り

フォルダの完全な階層構造をダウンロードします。

getFolders = async (options:SecretManagerOptions):Promise<KeeperFolder[]>

レスポンス

型: KeeperFolder[]

使用例

const storage = localConfigStorage("ksm-config.json")
const folders = await getFolders({storage: storage})

フォルダの作成

作成にはCreateOptionsとフォルダ名の指定が必要です。CreateOptionsに含まれるfolder UIDパラメータは必須で、これは共有フォルダのUIDを指定します。sub-folder UIDは任意で、省略された場合は、指定された共有フォルダの直下に通常のフォルダが新規作成されます。なお、sub-folder UIDは必ずしも親の共有フォルダの直下である必要はなく、何階層も深い位置を指定することも可能です。

createFolder = async (options:SecretManagerOptions, createOptions:CreateOptions, folderName: string):Promise<string>
パラメータ
必須
説明

options

SecretsManagerOptions

はい

事前に設定されたオプション

createOptions

CreateOptions

はい

親およびサブフォルダのUID

folderName

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>
パラメータ
必須
説明

options

SecretsManagerOptions

はい

事前に設定されたオプション

folderUid

string

はい

フォルダのUID

folderName

string

はい

新しいフォルダ名

使用例

const storage = localConfigStorage("ksm-config.json")
await updateFolder({storage: storage}, "[FOLDER_UID]", "new_folder_name")

フォルダの削除

フォルダのリストを削除します。空でないフォルダを削除するには、forceDeletionフラグを使用します。

forceDeletionを使用する際は、親フォルダとその子フォルダのUIDを同時に送信しないように注意してください。削除の順序によっては、エラーが発生する可能性があります (例: 親が先に削除され、その後で子フォルダを削除しようとした場合など)。UIDのリストが常にFIFO (先入れ先出し) 順に処理される保証はありません。

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

deleteFolder = async (options:SecretManagerOptions, folderUids: string[], forceDeletion?: boolean):Promise<SecretsManagerDeleteResponse>
パラメータ
必須
デフォルト
説明

options

SecretsManagerOptions

はい

事前に設定されたオプション

folderUids

string[]

はい

フォルダUIDリスト

forceDeletion

bool

いいえ

false

空でないフォルダを強制的に削除

使用例

const storage = localConfigStorage("ksm-config.json")
await deleteFolder({storage: storage}, ["[FOLDER_UID1]", "[FOLDER_UID2]"], true)

最終更新