開発者用SDK
Keeper Secrets Manager用のサンプルコードとSDKの実装ガイド
最終更新
Keeper Secrets Manager用のサンプルコードとSDKの実装ガイド
最終更新
Keeper Secrets Manager SDKは、すべての一般的な言語からシークレットの管理機能への極めて簡単/高速/効率的なアクセスを実現するために特別に設計されています。
mavenのスナップショットリポジトリを参照:
repositories {
mavenCentral()
maven { url "https://s01.oss.sonatype.org/content/groups/public/" }
}
プロジェクトに次の依存関係を追加:
com.keepersecurity.secrets-manager:core:16.0.1-SNAPSHOT
Java SDKはJDKバージョン8
から13.02+8
をサポートしています
mavenのスナップショットリポジトリを参照:
repositories {
mavenCentral()
maven("https://s01.oss.sonatype.org/content/groups/public/")
}
プロジェクトに次の依存関係を追加:
com.keepersecurity.secrets-manager:core:16.0.1-SNAPSHOT
npm install @keeper-security/secrets-manager-core
JavaScript SDKは、Nodeバージョン11
から16.12.0
までをサポートしています
pip3 install -U keeper-secrets-manager-core
Python SDKはPythonバージョン3.6
から3.10
をサポートしています
dotnet add package Keeper.SecretsManager
.Net SDKは.Netバージョン4.7
から4.8
または.Net Coreバージョン2.1
以降をサポートしています
import (
ksm "github.com/keeper-security/secrets-manager-go/core"
klog "github.com/keeper-security/secrets-manager-go/core/logger"
)
GoLang SDKはGoLangバージョン1.13
以降をサポートしています
Secrets Manager SDKは、ワンタイムアクセストークンまたはローカル設定ファイル内で生成された鍵を使用して、Keeperボルトに対して認証を行います。 Commander CLIで1つまたは複数のワンタイムアクセストークンを生成するには、secrets-manager client add
コマンドを使用します。
$ keeper shell
... login ...
My Vault> secrets-manager client add --app MyApplication --unlock-ip
SecretsManager SDKは、設定ファイルを使用して接続のトークンと設定を格納します。以下のサンプルコードで、SDKとワンタイムアクセストークンを使用して設定ファイルを作成する方法を示します。
import com.keepersecurity.secretsManager.core.*;
import static com.keepersecurity.secretsManager.core.SecretsManager.*;
public class KSMSample {
public static void main(String[] args){
// oneTimeTokenはストレージの初期化に一度だけ使用
// 初回実行以降の呼び出しでは、ksm-config.jsonを使用
String oneTimeToken = "[ONE TIME TOKEN]";
KeyValueStorage storage = new LocalConfigStorage("ksm-config.json");
try {
// 初回の実行後、この行は削除可能
initializeStorage(storage, oneTimeToken);
SecretsManagerOptions options = new SecretsManagerOptions(storage);
} catch (Exception e) {
System.out.println(e.getMessage());
}
// `options`を使用する他のコード
}
}
const {
getSecrets,
initializeStorage,
localConfigStorage,
downloadFile,
updateSecret
} = require('@keeper-security/secrets-manager-core')
const oneTimeToken = '[One Time Access Token]'
const getKeeperRecords = async () => {
const storage = localConfigStorage("ksm-config.json")
await initializeStorage(storage, oneTimeToken)
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()
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import FileKeyValueStorage
oneTimeToken = "[One Time Access Token]"
secrets_manager = SecretsManager(
# ワンタイムトークンは一度しか使用できません - 以後は、生成された設定ファイルを使用します
token=oneTimeToken,
config=FileKeyValueStorage('ksm-config.json')
)
# すべてのパスワードレコードを取得(設定も初期化)
records = secrets_manager.get_secrets()
using System;
using SecretsManager;
var oneTimeToken = "[One Time Access Token]";
var storage = new LocalConfigStorage("ksm-config.json");
try {
// ワンタイムトークンは一度しか使用できません - 以後は、生成された設定ファイルを使用します
SecretsManagerClient.InitializeStorage(storage, oneTimeToken);
var options = new SecretsManagerOptions(storage);
// すべてのパスワードレコードを取得(設定も初期化)
var records = (await SecretsManagerClient.GetSecrets(options)).Records;
Console.WriteLine($"Received {records.Length} record(s)");
// 最初のレコードからパスワードを取得
var firstRecord = records[0];
var password = records[0].FieldValue("password").ToString();
Console.WriteLine($"Password: {password}");
} catch (Exception e) {
Console.WriteLine(e);
}
package main
// Secrets Managerのインポート
import ksm "github.com/keeper-security/secrets-manager-go/core"
func main() {
onetimeAccessCode := "[One Time Access Token]"
options := &ksm.ClientOptions{
// ワンタイムトークンは一度しか使用できません - 以後は、生成された設定ファイルを使用します
Token: onetimeAccessCode,
Config: ksm.NewFileKeyValueStorage("ksm-config.json")}
sm := ksm.NewSecretsManager(options)
// すべてのパスワードレコードを取得(設定も初期化)
allRecords, _ := sm.GetSecrets([]string{})
// 最初のレコードからパスワードを取得:
firstRecord := allRecords[0]
firstRecordPassword := firstRecord.Password()
print("Password: [", firstRecordPassword, "]")
}
設定ファイルを初期化したら、ワンタイムアクセストークンをコードから削除する必要があります
この初期化コードは、以下のキーを含むJSON設定ファイルをデバイスのローカルストレージに作成します。
キー | 説明 |
| 自社テナントが配置されている宛先ホスト:
|
| ハッシュ化された |
| クライアントデバイスの秘密鍵 |
| Keeperインフラストラクチャの公開鍵のID |
| アプリケーションの秘密鍵 |
| アプリケーション所有者の公開鍵 |
生成された設定ファイルの例を以下に示します。
{
"hostname": "keepersecurity.com",
"clientId": "ab2x3z/Acz0QFTiilm8UxIlqNLlNa25KMj=TpOqznwa4Si-h9tY7n3zvFwlXXDoVWkIs3xrMjcLGwgu3ilmq7Q==",
"privateKey":"MLSHAgABCDEFGyqGSM49AEGCCqGSM49AwEHBG0wawIWALTARgmcnWx/DH+r7cKh4kokasdasdaDbvHmLABstNbqDwaCWhRANCAARjunta9SJdZE/LVXfVb22lpIfK4YMkJEDaFMOAyoBt0BrQ8aEhvrHN5/Z1BgZ/WpDm9dMR7E5ASIQuYUiAw0t9",
"serverPublicKeyId":"10",
"appKey":"RzhSIyKxbpjNu045TUrKaNREYIns+Hk9Kn8YtT+CtK0=",
"appOwnerPublicKey":"Sq1W1OAnTwi8V/Vs/lhsin2sfSoaRfOwwDDBqoP+EO9bsBMWCzQdl9ClauDiKLXGmlmyx2xmSAdH+hlxvBRs6kU="
}
設定ファイルを作成するその他の方法については、設定ファイルのドキュメントをご参照ください。
import com.keepersecurity.secretsManager.core.*;
import static com.keepersecurity.secretsManager.core.SecretsManager.*;
import java.io.FileOutputStream;
public class KSMSample {
public static void main(String[] args){
// 事前に初期化されたストレージを取得
KeyValueStorage storage = new LocalConfigStorage("ksm-config.json");
try {
SecretsManagerOptions options = new SecretsManagerOptions(storage);
// 使用可能なすべてのシークレットを取得
KeeperSecrets secrets = SecretsManager.getSecrets(options);
// レコードの詳細を出力
System.out.println(secrets.getRecords());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
const {
getSecrets,
initializeStorage,
localConfigStorage,
downloadFile,
updateSecret
} = require('@keeper-security/secrets-manager-core')
const oneTimeToken = '[One Time Access Token]'
const getKeeperRecords = async () => {
const storage = localConfigStorage("ksm-config.json")
await initializeStorage(storage, oneTimeToken)
const {records} = await getSecrets({storage: storage})
}
getKeeperRecords().finally()
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import FileKeyValueStorage
secrets_manager = SecretsManager(
config=FileKeyValueStorage('ksm-config.json')
)
all_records = secrets_manager.get_secrets()
# すべてのレコードのJSONデータを出力
for record in all_records:
# record.print () # 記録をSTDOUTに出力
print(record.uid + " - " + record.title)
print("\tLogin: " + record.field('login')[0])
print("\tPassword: " + record.field('password')[0])
using System;
using System.Threading.Tasks;
using SecretsManager;
private static async Task retrieveAllSecrets()
{
// 事前に初期化されたストレージを取得
var storage = new LocalConfigStorage("ksm-config.json");
var options = new SecretsManagerOptions(storage);
// 使用可能なすべてのシークレットを取得
var records = (await SecretsManagerClient.GetSecrets(options)).Records;
foreach (var record in records)
{
Console.WriteLine(record.RecordUid + " - " + record.Data.title);
foreach (var field in record.Data.fields)
{
Console.WriteLine("\t" + field.label + " (" + field.type + "): [" + String.Join(", ", field.value) + "]");
}
}
}
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{})
for _, record := range allRecords {
println("UID", record.Uid, ", title [", record.Title(), "]")
}
}
これらの例では、Secrets Managerの設定ファイルがすでに初期化済みであることを前提としています。
設定ファイルを初期化する方法については、初期化セクションをご参照ください。
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());
}
}
}
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()
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import FileKeyValueStorage
secrets_manager = SecretsManager(
config=FileKeyValueStorage('ksm-config.json')
)
record_title = "My Record"
record = secrets_manager.get_secret_by_title(record_title)
if record:
print(record.uid + " - " + record.title)
print("\tLogin: " + record.field('login')[0])
print("\tPassword: " + record.field('password')[0])
else:
print("No record found with title: " + record_title)
using System;
using System.Threading.Tasks;
using SecretsManager;
private static async Task getOneIndividualSecret()
{
var storage = new LocalConfigStorage("ksm-config.json");
var options = new SecretsManagerOptions(storage);
var records = (await SecretsManagerClient.GetSecretsByTitle(
options, "My Credentials")
).Records;
foreach (var record in records)
{
Console.WriteLine(record.RecordUid + " - " + record.Data.title);
foreach (var field in record.Data.fields)
{
Console.WriteLine("\t" + field.label + " (" + field.type + "): [" + String.Join(", ", field.value) + "]");
}
}
}
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(), "]")
}
}
この例では、UIDレコードはXXX
になっています
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);
// 必要なレコードのUIDを含むフィルタを作成
List<String> uidFilter = List.of("[XXX]");
// フィルタを使用してシークレットを取得
KeeperSecrets secrets = SecretsManager.getSecrets(options, uidFilter);
// 取得結果から目的のシークレットを取得
KeeperRecord myCredentials = secrets.getRecords().get(0);
// レコードの詳細を出力
System.out.println("Record UID: " + myCredentials.getRecordUid());
System.out.println("Title: " + myCredentials.getData().getTitle());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
const {
getSecretsByTitle,
localConfigStorage,
} = require('@keeper-security/secrets-manager-core')
const oneTimeToken = '[One Time Access Token]'
const getKeeperRecord = async () => {
const options = { storage: localConfigStorage("config.json")
const {myCredential} = await getSecrets(options, ["XXX"]
}
getKeeperRecord().finally()
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import FileKeyValueStorage
secrets_manager = SecretsManager(
config=FileKeyValueStorage('ksm-config.json')
)
UID_FILTER = ['RECORD_UID']
record = secrets_manager.get_secrets(UID_FILTER)[0]
print(record.uid + " - " + record.title)
print("\tLogin: " + record.field('login')[0])
print("\tPassword: " + record.field('password')[0])
シークレットを取得すると、シークレットから個々のフィールドを取得できます。
# 標準テンプレートフィールドを取得
login = record.field('login', single=True)
# APIキーなどのカスタムフィールドを取得
api_key = record.custom_field('API Key', single=True)
using System;
using System.Threading.Tasks;
using SecretsManager;
private static async Task getOneIndividualSecret()
{
var storage = new LocalConfigStorage("ksm-config.json");
var options = new SecretsManagerOptions(storage);
var records = (await SecretsManagerClient.GetSecrets(
options, new[] { "XXX" })
).Records;
foreach (var record in records)
{
Console.WriteLine(record.RecordUid + " - " + record.Data.title);
foreach (var field in record.Data.fields)
{
Console.WriteLine("\t" + field.label + " (" + field.type + "): [" + String.Join(", ", field.value) + "]");
}
}
}
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)
// UIDで個々のレコードを取得(設定も初期化)
allRecords, _ := sm.GetSecrets([]string{"[Record UID]"})
for _, record := range allRecords {
println("UID", record.Uid, ", title [", record.Title(), "]")
}
}
これらの例では、Secrets Managerの設定ファイルがすでに初期化済みであることを前提としています。
設定ファイルを初期化する方法については、初期化セクションをご参照ください。
個々のレコードのパスワードフィールドを取得する例。
この例では、UIDレコードはXXX
になっています
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);
// 必要なレコードのUIDを含むフィルタを作成
List<String> uidFilter = List.of("XXX");
// フィルタを使用してシークレットを取得
KeeperSecrets secrets = SecretsManager.getSecrets(options, uidFilter);
// 取得結果から目的のシークレットを取得
KeeperRecord myCredentials = secrets.getRecords().get(0);
// パスワードを取得して出力
String pwd = myCredentials.getPassword();
System.out.println("Password from Keeper: " + pwd);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
secret.data.fields.find(x => x.type === 'password')
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import FileKeyValueStorage
secrets_manager = SecretsManager(
config=FileKeyValueStorage('ksm-config.json')
)
# UIDで個々のシークレットを取得
UID_FILTER = 'XXX'
secret = secrets_manager.get_secrets([UID_FILTER])[0]
# シークレットからパスワードを取得
secret.field('password', single=True)
using System;
using System.Threading.Tasks;
using SecretsManager;
private static async Task retrieveAPassword()
{
var storage = new LocalConfigStorage("ksm-config.json");
var options = new SecretsManagerOptions(storage);
var records = (await SecretsManagerClient.GetSecrets(
options, new[] { "XXX" })
).Records;
foreach (var record in records)
{
// 「password」フィールドを取得
var passwordVal = record.FieldValue("password");
Console.WriteLine(record.RecordUid + " - " + record.Data.title + " - password=[" + passwordVal + "]");
}
}
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{})
for _, record := range allRecords {
passwordMethod1 := record.Password()
//passwordMethod2 := record.GetFieldValueByType("password") // フィールドにアクセスしてパスワードを取得
println("UID", record.Uid, ", Password [", passwordMethod1, "]")
}
}
これらの例では、Secrets Managerの設定ファイルがすでに初期化済みであることを前提としています。
設定ファイルを初期化する方法については、初期化セクションをご参照ください。
import com.keepersecurity.secretsManager.core.*;
import java.io.FileOutputStream;
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);
// 必要なレコードのUIDを含むフィルタを作成
List<String> uidFilter = List.of("XXX");
// フィルタを使用してシークレットを取得
KeeperSecrets secrets = SecretsManager.getSecrets(options, uidFilter);
// 取得結果から目的のシークレットを取得
KeeperRecord myCredentials = secrets.getRecords().get(0);
// レコードからファイル名によるファイル参照を取得
KeeperFile file = myCredentials.getFileByName("acme.cer");
// ファイルをダウンロード
byte[] fileBytes = SecretsManager.downloadFile(file);
String filename = file.getData().getName();
FileOutputStream fos = new FileOutputStream(filename);
fos.write(fileBytes);
System.out.println("Downloaded File: " + filename);
} catch (Exception e) {
System.out.println("KSM ran into an problem: " + e.getMessage());
}
}
}
const file = firstRecord.files.find(x => x.data.name === 'acme.cer')
if (file) {
const fileBytes = await downloadFile(file)
fs.writeFileSync(file.data.name, fileBytes)
}
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import FileKeyValueStorage
secrets_manager = SecretsManager(
config=FileKeyValueStorage('ksm-config.json')
)
# UIDで個々のシークレットを取得
UID_FILTER = 'XXX'
secret = secrets_manager.get_secrets([UID_FILTER])[0]
# すべてのファイルを/tmpフォルダに保存(存在しない場合はフォルダを作成)
for file in secret.files:
print("file: %s" % file)
file.save_file("/tmp/" + file.name, True)
using System;
using System.IO;
using System.Threading.Tasks;
using SecretsManager;
private static async Task downloadAFileAttachment()
{
var storage = new LocalConfigStorage("ksm-config.json");
var options = new SecretsManagerOptions(storage);
// UIDでレコードを取得
var records = (await SecretsManagerClient.GetSecrets(
options, new[] { "XXX" })
).Records;
foreach (var record in records)
{
// 最初のレコードからファイルをダウンロード
var file = record.GetFileByName("acme.cer");
if (file != null)
{
var fileBytes = SecretsManagerClient.DownloadFile(file);
// ディスクにバイトを書き込む
await File.WriteAllBytesAsync(file.Data.name, fileBytes);
}
}
}
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]"})
for _, record := range allRecords {
// タイトルでファイルを検索
file := record.FindFileByTitle("[FILE TITLE]")
// 配列からインデックスでファイルを取得
//file := record.Files[0]
// ファイルをディスクに保存
file.SaveFile("/tmp/"+file.Name, true)
}
}
これらの例では、Secrets Managerの設定ファイルがすでに初期化済みであることを前提としています。
設定ファイルを初期化する方法については、初期化セクションをご参照ください。
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",