Python用コマンダーSDK

Python用コマンダーSDKのセットアップ手順

概要

新Python SDK (PyPIのkeepersdkライブラリ) を使用すると、エンタープライズやボルト、管理操作などKeeperプラットフォームの機能をPythonから直接利用できます。

このSDKにはPythonから直接呼び出せる関数が揃っており、従来必要だったコマンダーCLIやコマンドラインラッパーを使わずに操作を行えます。

インストールとセットアップ

要件

システムにはPython (バージョン3.10以上) がインストールされている必要があります。

仮想環境の作成と有効化

python3 -m venv venv
source venv/bin/activate

PyPiからインストール

pip install keepersdk

ソースコードからインストール

ソースコードをこちらのGithubリポジトリからクローンします。

git clone https://github.com/Keeper-Security/keeper-sdk-python.git
cd keeper-sdk-python

「master」ブランチは本番リリースと同期されます。「release」ブランチは次回リリースに対応しています。任意で「release」ブランチに切り替えるには、以下の手順を実行してください。

git checkout release

依存関係をインストール

cd keepersdk-package
pip install -r requirements.txt
pip install setuptools.py
python setup.py install

クライアントの要件

新しいデバイスから keepersdk にアクセスする場合、SDKが認証情報を読み込むための config.json ファイルが存在することを確認する必要があります。これにより、クライアントにハードコーディングされた認証情報が含まれないようにできます。

現在のユーザーの.keeperフォルダに config.json ファイルを作成してください。

必要となる config.json の構造例は以下の通りです。

{
  "users": [
    {
      "user": "[email protected]",
      "password":"yourpassword",
      "server": "keepersecurity.com",
      "last_device": {
        "device_token": ""
      }
    }
  ],
  "servers": [
    {
      "server": "keepersecurity.com",
      "server_key_id": 10
    }
  ],
  "devices": [
    {
      "device_token": "",
      "private_key": "",
      "server_info": [
        {
          "server": "keepersecurity.com",
          "clone_code": ""
        }
      ]
    }
  ],
  "last_login": "[email protected]",
  "last_server": "keepersecurity.com"
}

クライアントを作成

.py ファイルを作成し、keepersdk にアクセスしてボルトおよび管理機能を実行するクライアントとして機能させます。

以下は、レコードを一覧表示するサンプルコードです。

import sqlite3
import getpass

from keepersdk.authentication import login_auth, configuration, endpoint
from keepersdk.vault import sqlite_storage, vault_online, vault_record

# 構成と認証コンテキストを初期化
config = configuration.JsonConfigurationStorage()
keeper_endpoint = endpoint.KeeperEndpoint(config)
login_auth_context = login_auth.LoginAuth(keeper_endpoint)

# ユーザーを認証
login_auth_context.login(config.get().users()[0].username, config.get().users()[0].password)

while not login_auth_context.login_step.is_final():
    if isinstance(login_auth_context.login_step, login_auth.LoginStepDeviceApproval):
        login_auth_context.login_step.send_push(login_auth.DeviceApprovalChannel.KeeperPush)
        print("デバイス承認リクエストを送信しました。既存のボルト/コンソールにログインするか管理者にこのデバイスを承認してもらい、続行するにはEnterキーを押してください")
        input()
    elif isinstance(login_auth_context.login_step, login_auth.LoginStepPassword):
        password = getpass.getpass('パスワードを入力してください: ')
        login_auth_context.login_step.verify_password(password)
    elif isinstance(login_auth_context.login_step, login_auth.LoginStepTwoFactor):
        channel = login_auth_context.login_step.get_channels()[0]
        code = getpass.getpass(f'{channel.channel_name} の2FAコードを入力してください: ')
        login_auth_context.login_step.send_code(channel.channel_uid, code)
    else:
        raise NotImplementedError()

# ログインが成功したか確認
if isinstance(login_auth_context.login_step, login_auth.LoginStepConnected):
    # 認証済みセッションを取得
    keeper_auth = login_auth_context.login_step.take_keeper_auth()
    
    # ボルトストレージを設定(SQLiteインメモリデータベースを使用)
    conn = sqlite3.Connection('file::memory:', uri=True)
    vault_storage = sqlite_storage.SqliteVaultStorage(
        lambda: conn,
        vault_owner=bytes(keeper_auth.auth_context.username, 'utf-8')
    )
    
    # ボルトを初期化し、Keeperサーバーと同期
    vault = vault_online.VaultOnline(keeper_auth, vault_storage)
    vault.sync_down()
    
    # ボルトのレコードにアクセスして表示
    print("ボルトレコード:")
    print("-" * 50)
    for record in vault.vault_data.records():
        print(f'Title: {record.title}')
        
        # レガシー(v2)レコードの処理
        if record.version == 2:
            legacy_record = vault.vault_data.load_record(record.record_uid)
            if isinstance(legacy_record, vault_record.PasswordRecord):
                print(f'Username: {legacy_record.login}')
                print(f'URL: {legacy_record.link}')
        
        # モダン(v3+)レコードの処理
        elif record.version >= 3:
            print(f'Record Type: {record.record_type}')
        
        print("-" * 50)
    vault.close()
    keeper_auth.close()

ドキュメント

コマンダーSDKのドキュメントとコマンドリファレンスをご活用ください。

最終更新