# ルータのセキュリティ

## 概要

Keeperルータ (ルータ) は、Keeperのクラウド環境にホストされたクラウドサービスであり、KeeperバックエンドAPI、エンドユーザーアプリケーション (ウェブボルト、デスクトップアプリなど)、ユーザーの環境にインストールされたKeeperゲートウェイとの間の通信をサポートします。ルータは、リソースの検出、パスワードローテーション、時間制限アクセス、特権接続管理を実行する通信を担当します。

## Keeperルータの動作原理

従来型またはレガシーの特権アクセス製品では、顧客はオンプレミスのソフトウェアをインストールする責任があり、そのためクラウド環境での管理・設定が難しくなります。Keeperのモデルでは、ホスト型サービス (ゲートウェイ) が顧客の環境にインストールされ、Keeperルータへのアウトバウンドセキュア接続を確立します。これにより、ネットワーク設定なしでKeeperクラウドとの双方向通信が可能になります。Keeperルータで、WebSocketを利用してオンプレミスのインフラストラクチャへのクラウドアクセスを簡単かつ安全に実現します。

Keeperにより、エンドユーザーのデバイス (ウェブボルトなど) とKeeperルータの間でユーザーの現在のセッショントークンを使用してWebSocketsが確立されます。このセッショントークンは、Keeperルータによって検証され、セッションの認証が行われます。Keeperルータに送信されるすべての暗号化されたペイロードは、TLSに加えて256ビットAES転送キーで保護されており、MITM攻撃から保護されます。この転送キーは、エンドユーザーのデバイスで生成され、ルータの公開ECキーを使用したECIES暗号化を通じてサーバーに転送されます。

ユーザーがウェブボルトやデスクトップアプリでパスワードローテーション、検出ジョブ、リモート接続を発動する際のメッセージフローは以下の通りです。

* ゲートウェイがインストールされると、最初に一度だけハッシュ化されたワンタイムアクセストークンを使用してKeeperクラウドと認証を行います。クライアントはペイロードに署名し、最初の認証時にクライアントデバイス公開鍵をサーバに登録します。最初の認証後、以降のリクエストはKeeperルータに送信され、クライアントデバイス秘密鍵で署名されます。
* ゲートウェイは、クライアントデバイス秘密鍵とECDSA署名を使用して認証されたWebSocket接続を確立します。
* ボルトはKeeperルータにコマンドを実行 (ローテーション、トンネル、検出、接続) するようにメッセージを送信し、ユーザーのアクティブなセッショントークンを使用してコマンドを認証します。
* ボルトは「UID XXXをローテーションする」のようなコマンドと制御メッセージのみをルータに送信します。このプロセス中、ボルトとルータの間で機密方法や秘密情報が共有されることはありません。ルータでは、レコードのローテーション設定に関連つけられたセッショントークンを使用してコマンドを認証し、ユーザーのリクエストが有効であることを検証します。
* ルータは、既存のWebSocket接続を介してコマンドを目的のゲートウェイにリレーします。
* ゲートウェイは[KeeperシークレットマネージャーAPI](https://docs.keeper.io/keeperpam/secrets-manager/developer-sdk-library)を使用してシークレット、管理者認証情報、レコードの詳細、その他のプライベートデータを取得します。KeeperクラウドへのAPIリクエストは、クライアントデバイス識別子とリクエスト本文をクライアントデバイス秘密鍵で署名して送信されます。サーバでは、クライアントデバイス識別子に対するリクエストのECDSA署名を、デバイスのクライアント公開鍵を使用して確認します。クライアントデバイスは、サーバからの暗号化された応答をアプリケーション秘密鍵で復号し、レコードキーと共有フォルダキーを復号します。共有フォルダキーがレコードキーを復号し、レコードキーが個々のレコード情報を復号します。
* ゲートウェイは、Keeperシークレットマネージャーの「update」コマンドを使用して、パスワードや検出ジョブの更新内容をユーザーのボルトに反映させます。
* ローテーションまたはディスカバリージョブが完了した後、ゲートウェイはルータにジョブが完了したことを通知します。[ARAMイベントログ](https://docs.keeper.io/enterprise-guide/event-reporting)がルータによって発動します。

Keeperルータアーキテクチャはゼロ知識に基づいており、Keeperのインフラストラクチャから顧客の保存したボルトデータにアクセスしたり復号したりすることはできません。

## Keeperルータのアーキテクチャ

ルータは、ヘッドとワーカーという2つの論理的な展開で構成されており、これらが連携して動作します。 ルータはKeeperのAWSクラウド環境にホストされ、各グローバルリージョン (米国、欧州、カナダ、豪州、日本、米国政府機関) で隔離されています。

ヘッドはインターネットに公開されておらず、以下の機能を実行します。

* ワーカー間のグローバル状態の同期
* ワーカー間通信
* イベントのスケジューリング (ローテーション、検出、接続リクエストなど)

ワーカーはWebSocketを介してヘッドに接続し、REST API呼び出しを使用して情報を取得します。ワーカーは以下の機能を実行します。

* ゲートウェイとの通信
* Keeperエンドユーザーアプリケーションとの通信
* KeeperバックエンドAPIとの通信
* ヘッドとの通信

ワーカーは、各Keeper環境でスケーリングおよびロードバランシングされます。Keeperルータへのアクセスは、各リージョンで共通のURLパターンを介して確立されます。

* 米国: <https://connect.keepersecurity.com>
* 欧州: <https://connect.keepersecurity.eu>
* 豪州: <https://connect.keepersecurity.com.au>
* カナダ: <https://connect.keepersecurity.ca>
* 日本: <https://connect.keepersecurity.jp>
* 米国政府機関: <https://connect.keepersecurity.us>

エンドユーザーデバイスは常に同じルータインスタンスを介して通信します。エンドユーザーボルトがルータシステムに接続すると、ボルトが希望するゲートウェイに通信していることを確認するための通信交換が行われます。ゲートウェイ通信が確立されると、ユーザーのブラウザにCookieがローカルに保存され、7日後に自動的に期限切れとなります。このCookieはターゲットルータインスタンスとのスティッキーセッションを確立するためだけに使用され、機密情報は含まれていません。

各ゲートウェイデバイスには固有のUIDが関連付けられています。ゲートウェイUIDは管理者のボルト内の暗号化された「PAM設定」レコードに保存されます。これにより、Keeperボルトレコードはリクエストされたローテーション、検出、接続機能を実行するために使用すべきゲートウェイを認識します。
