# ゲートウェイのセキュリティ

## Keeperゲートウェイとは？

Keeperゲートウェイは、ローテーション、検出、接続の各タスクを実行するためにオンプレミスにインストールするサービスです。Keeperゲートウェイは、WebSocketおよびKeeperシークレットマネージャーの[ゼロ知識プロトコル](https://docs.keeper.io/jp/keeperpam/secrets-manager/about/security-encryption-model)を使用して、アウトバウンドでKeeperルータと通信します。

## ゲートウェイの認証

Keeperゲートウェイは最初にKeeperルーターに認証します。その際にはゲートウェイサービスをターゲットマシンにインストールした際に提供されるワンタイムアクセストークンが使用されます。初回認証後のAPI呼び出しでは、クライアントデバイス識別子 (ワンタイムアクセストークンのHMAC\_SHA512ハッシュ) を使用してルーターに認証されます。

ボルト内のレコードへのアクセスと復号化には、Keeperシークレットマネージャーの標準APIを使用し、クライアントサイドでのデータの暗号化と復号化を行います。Keeperシークレットマネージャーの[セキュリティモデル](https://docs.keeper.io/jp/keeperpam/secrets-manager/about/security-encryption-model)では、サービスに特定のフォルダとレコードのみを割り当てて復号することで最小特権の原則とゼロ知識を確保します。APIリクエストは、クライアントデバイス識別子と、クライアントデバイスの秘密鍵で署名されたリクエストボディを伴ってKeeperクラウドに送信されます。サーバーでは、クライアントデバイス識別子に関連付けられたリクエストのECDSA署名を、デバイスのクライアント公開鍵を使用して検証します。

他のシークレットマネージャーデバイスと同様に、アクセスは暗号化および署名プロセスに加えて、IPアドレスに基づいて制限することも可能です。

## ゲートウェイはどのように指示を取得するか？

ローテーションはオンデマンドまたはスケジュールに基づいて実行できます。ウェブボルトやデスクトップアプリでユーザーがオンデマンドのローテーション、接続、発見ジョブを発動すると、Keeperルーターでは適切なゲートウェイとのアクティブなWebSocket接続を使用して指示を受け取ります。メッセージには、シークレット情報や暗号化されたデータは含まれていません。すべてのメッセージは、コマンドタイプ（例: 「rotate」）と対象のレコードUID (「UID」) のみが含まれます (UIDはシークレット値ではありません)。

スケジュールされたローテーションでも同様のメカニズムが使用されます。ローテーションスケジュールはルーターによって管理され、適切な間隔でローテーション指示がゲートウェイに送信されます。ゲートウェイがローテーションタスクを受信すると、ローカルのKSM構成を使用して指定されたレコードUIDに関連付けられたシークレットを取得し、レコード情報をローカルで復号化します。取得したシークレットは、ローテーション、検出、および接続の各操作を実行するために利用されます。

## ローカルKSM構成はどのように保護されているか？

ゲートウェイサービスがインストールされると、ローカルKSM構成はローカルファイルシステムの権限によって保護されます。デフォルトでは、構成はゲートウェイをインストールしたユーザーのホームディレクトリ (`.keeper`フォルダ) に保存されます。

### Dockerインストール

[Dockerインストール方法](https://github.com/Keeper-Security/gitbook-jp-secrets-manager/blob/main/privileged-access-manager/getting-started/gateways/docker-installation/README.md)では、構成はDocker Composeファイル内の環境変数を通じて渡されます。

### Linuxインストール

* ゲートウェイがユーザーとして起動する場合
  * 設定ファイル: `~/.keeper/gateway-config.json`
  * ログフォルダ: `~/.keeper/log`
* ゲートウェイがサービスとして実行される場合：
  * ユーザー: keeper-gateway-service
  * 設定ファイル: `/etc/keeper-gateway/gateway-config.json`
  * ログフォルダ: `/var/log/keeper-gateway`

### Windowsインストール

コマンドラインからゲートウェイを開始した場合

* ログの保存場所: `C:\Users\[USER NAME]\.keeper\logs\`
* 構成ファイルの保存場所: `C:\Users\[USER NAME]\.keeper\gateway-config.json`

Windows Serviceとしてゲートウェイを開始した場合

* ログの保存場所: `C:\ProgramData\KeeperGateway`
* 構成ファイルの保存場所: `C:\ProgramData\KeeperGatewayPrivate\`\
  注: このフォルダには、ゲートウェイサービスをインストールしたユーザーのみがアクセスできます。

KSM構成ファイルへのアクセスが可能なユーザーは、Keeperに関連するシークレットを取得できます。不正アクセスを防ぐため、このファイルはインストールユーザーおよび管理者アカウントのみが読み取り可能です。Windowsサーバーでは、サービスはデフォルトでWindowsシステムアカウントの下で実行されており、このアカウントもKSM構成ファイルへのアクセス権を持ちます。

AWS環境では、[AWS KMSを活用して構成を保護](https://docs.keeper.io/jp/keeperpam/privileged-access-manager/getting-started/gateways/advanced-configuration/gateway-configuration-with-aws-kms)できます。

### データキャッシュ

キャッシュは検出処理に使用されますが、ローテーションには使用されません。シークレットがローテーションされるたびに、ゲートウェイがKeeperシークレットマネージャーAPIを使用して関連するレコードをリアルタイムで取得します。

## ゲートウェイシェル

ゲートウェイには仮想コマンドシェルが含まれています。ゲートウェイがスタンドアロンアプリケーションとして実行されると、ユーザーはシェルに入ります。サービスとして実行されると、シェルにはアクセスできません。

ゲートウェイには、シェルへの高度なデバッグアクセスを可能にするSSHサービスが同梱されています。デフォルトでは無効化されており、起動しない限りシェルへはアクセスすることはできません。ただし、ゲートウェイサービスの起動時にオプションの引数を指定することでSSHサービスを有効にできます。

SSHサービスを有効にしても、デフォルトでは接続できるアカウントはありません。システム管理者がキー ペアを作成し、アカウントに関連付けることでSSHアクセスを許可できます。

ゲートウェイシェルには、シークレットを直接操作するコマンドは用意されていません。

## コマンダーによるリモートトラブルシューティング

Keeperコマンダーもトラブルシューティングの目的でゲートウェイへのアクセスに使用できます。ゲートウェイとルータ間の接続および関連するセキュリティメカニズムを活用します。例えば、コマンダーはルータにコマンドを送信して、ゲートウェイで実行中のタスクの一覧を取得できます。これらのコマンドは、同じ組織内のどのゲートウェイでも使用できます。

## シークレットとログ

ローテーション中に取得したシークレットは、ゲートウェイが生成するログメッセージから自動的に除去されます。これには、スタックトレースなどの偶発的なログも含まれます。

## ポストローテーションスクリプト

Keeperゲートウェイでは、パスワードローテーション後に特定のアクションを自動的に実行するための管理者が作成したスクリプト (PowerShellやBash) を実行する機能が備わっています。スクリプトはKeeperレコードに添付されてゲートウェイによって処理されます。ポストローテーションスクリプトは一般的な添付ファイルとは別に管理され、レコードの所有者のみが添付する権限をもっています。

スクリプトはゲートウェイによって復号されてから実行されます。サービスの再起動など、二次デバイスへの接続はポストローテーションスクリプト内で調整する必要があります。

当然ながら、Keeperレコードにアップロードされ、ゲートウェイで実行されるスクリプトは不正使用から保護される必要があります。そのため、Keeper管理者からKeeperレコードに最小特権が適用されていることを確かにする必要があります。

ポストローテーションスクリプトが実行される際、スクリプトの標準出力 (stdout) および標準エラー出力 (stderr) がログとしてディスクに保存されますが、シークレットは自動的に削除されます。レコードUIDについては診断目的でログに記録できます。

ポストローテーションスクリプトは任意のコードで記述できますが、Keeperゲートウェイはコマンドラインパラメータを通じて標準的な事例に対応するために必要最小限の情報のみをスクリプトに提供します。これには以下のパラメータが含まれます。

* PAMローテーションレコードUID (環境設定を含む)
* リソースレコードUID (ターゲットリソースデータを含む)
* アカウントレコードUID (ローテーションされたレコード)
* 古いパスワード (アカウントレコードから)
* 新しいパスワード (アカウントレコードから)
* ユーザー名 (アカウントレコードから)

コマンド実行後、KeeperゲートウェイによってLinuxおよびWindowsインスタンスでのコマンドライン履歴をクリアされます。

ポストローテーションスクリプトから自動的に渡された情報以外のシークレットへアクセスする必要がある場合は、KeeperシークレットマネージャーSDKまたはシークレットマネージャーCLIツールをご使用ください。
