Docker上でのゲートウェイ

KeeperゲートウェイをDockerにインストール

概要

本ページでは、Docker上でKeeperゲートウェイのインストール、設定、アップデート方法を取り扱います。KeeperゲートウェイコンテナはRocky Linux 8のベースイメージを使用し、DockerHubでホストされています。

要件

  • すべてのPAM機能を活用するのに、x86 AMDプロセッサーを搭載したLinuxホスト

  • docker および docker-compose がインストールされていること (LinuxへのDockerインストールのページをご参照ください)


ゲートウェイを作成

新しいゲートウェイの展開は、ウェブボルトかデスクトップアプリから [新規作成] > [ゲートウェイ] をクリックして作成します。

また、コマンダーCLIからゲートウェイと構成ファイルを作成することもできます。

pam gateway new -n "<Gateway Name>" -a <Application Name or UID> -c b64

アプリケーション名とUIDは、secrets-manager app listコマンドで確認できます。

インストールのオプション

ゲートウェイのセットアップ方法は以下の2種類あります。


1. Docker自動インストール

Keeperの自動インストーラで環境をセットアップします。

1

Dockerゲートウェイの作成とインストールコマンドのコピー

Dockerオペレーティングシステム用に、ゲートウェイウィザードかKeeperシークレットマネージャーのいずれかを使用して、新しいゲートウェイを作成します。

作成が完了すると、Linuxホストに貼り付けて実行するためのインストールコマンドが表示されます。

2

インストールコマンドの実行

Linuxホスト上で、任意の作業ディレクトリに移動し、コピーしたインストールコマンドを実行します。

このインストールコマンドにより、以下の処理が行われます。

  • DockerおよびDocker Composeのインストール (未インストールの場合)

  • Docker Composeファイル、Seccompファイル、AppArmorファイルの生成

  • サービスの準備 (起動に必要な構成のセットアップ)

3

サービスの起動

docker-compose.ymldocker-seccomp.jsongateway-apparmor-profileファイルが保存されているフォルダで作業していることを確認してください。

以下のコマンドを実行すると、Keeperゲートウェイコンテナがバックグラウンドで起動します。

docker compose up -d

2. Docker手動インストール

手動でDocker環境をセットアップする場合は、以下の手順を行います。

1

Docker Compose

Docker Composeファイルは、ボルトUIを通じて提供されます。通常、このファイルはローカル環境に docker-compose.yml として保存し、任意のフォルダに配置します。以下はDocker Composeファイルの例です。

services:
      keeper-gateway:
        platform: linux/amd64
        image: keeper/gateway:latest
        shm_size: 16g
        restart: unless-stopped
        security_opt:
          - seccomp:docker-seccomp.json
          - apparmor:gateway-apparmor-profile
        environment:
          ACCEPT_EULA: Y
          GATEWAY_CONFIG: XXXXXXXXXXXXXXXXX

必要な環境変数は GATEWAY_CONFIG のみとなります。この変数はゲートウェイ作成時にKeeperによって生成されるbase64エンコードされた構成です。

2

Seccompファイル

docker-seccomp.json ファイルをDocker Composeファイルと同じフォルダに配置します。

こちらからファイルをダウンロードするか以下を実行します。

curl -O https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/docker-seccomp.json
3

AppArmorプロファイル (Ubuntu/Debianディストリビューションで必須)

この手順は、UbuntuおよびDebian系ディストリビューションで必須です。 その他のLinuxディストリビューション (RHEL、CentOS、Fedora、Amazon Linuxなど) の場合は、手順4へお進みください。

gateway-apparmor-profile ファイルをDocker Composeファイルと同じフォルダに配置します。

こちらからファイルをダウンロードするか以下を実行します。

curl -O https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/gateway-apparmor-profile

apparmor configを有効にします。

sudo apparmor_parser -r gateway-apparmor-profile
sudo cp gateway-apparmor-profile /etc/apparmor.d/
4

サービスを開始

docker-compose.yml が保存されているフォルダへ移動し、以下のコマンドを実行すると、Docker Composeファイルで定義された通りにKeeperゲートウェイコンテナがバックグラウンドで実行されます。

docker compose up -d

ボルトのバージョン 17.4 では、新しいゲートウェイを作成する際に使用される docker-compose.yml ファイル内で、gateway-apparmor-profile が誤って gateway-app-armor-profile と記載されています。

この問題を修正するには、余分なハイフンを削除し、gateway-apparmor-profile に修正してください。


ログ

Keeperゲートウェイのプレビュー版を実行する際、ログに以下のような出力が表示されます。

docker compose logs keeper-gateway
KeeperゲートウェイのDockerログ

ボルト内の [シークレットマネージャー] 画面から、[アプリケーション] > [ゲートウェイ] へ移動します。ゲートウェイが [オンライン] と表示されます。

オンライン状態のゲートウェイ

ゲートウェイサービスの管理

サービス起動

docker compose up -d

サービス停止

docker compose stop

サービスの再起動

docker compose restart

ゲートウェイコンテナへ接続

docker compose exec keeper-gateway bash

再起動の際に自動的にゲートウェイを起動

docker-compose.yml ファイルで、以下のように再起動ポリシーを設定してください。

services:
  keeper-gateway:
    restart: unless-stopped

docker-compose.yml ファイルに "restart: unless-stopped" または "restart: always" パラメーターを追加すると、環境に再起動ポリシーが適用されます。

Docker環境でKeeperゲートウェイをホストOSに自動起動させたい場合は、以下の手順を実行してください (Linuxホスト)。

最初に、/etc/systemd/system/keeper-gateway.service にファイルを作成します。

[Unit]
Description=Keeper Gateway Docker Compose
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/ec2-user
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
User=ec2-user
Group=docker

[Install]
WantedBy=multi-user.target

備考

  • /path/to/install は、docker-compose.yml の配置パスに置き換えます。

  • myusername は、Dockerを実行するユーザーに置き換えます。

  • docker グループは、環境で定義されているグループに置き換えます。

  • ExecStart および ExecStop のバイナリパスが正しいことを確認します。

その後サービスを有効にします。

sudo systemctl daemon-reload
sudo systemctl enable keeper-gateway.service
sudo systemctl start keeper-gateway.service

再起動後に利用できるよう、AppArmorファイルを読み込ませておきます。

sudo apparmor_parser -r gateway-apparmor-profile
sudo cp gateway-apparmor-profile /etc/apparmor.d/

再起動後、稼働していることを確認します。

systemctl status keeper-gateway

デバッグ

ゲートウェイで詳細なデバッグログを有効化するには、Docker Compose ファイルに以下の environment セクションを追加してデバッグロギングを有効化します。

services:
  keeper-gateway:
    .....
    environment:
      KEEPER_GATEWAY_LOG_LEVEL: "debug" # ゲートウェイ用のログ
      LOG_LEVEL: "debug"                # guacd用のログ

ログレベルを変更した後、以下のコマンドでDockerに反映します。

docker compose up -d

次のコマンドでKeeperゲートウェイのログを確認します。

docker compose logs -f keeper-gateway

アップデート

次のコマンドを実行すると、Keeperゲートウェイコンテナが最新バージョンに更新され、サービスが再起動します。

docker compose pull
docker compose up -d

ヘルスチェック

ゲートウェイサービスの動作状況を確認するために、ヘルスチェックを設定できます。Dockerのオーケストレーションやロードバランサー、自動監視ツールと連携させる際に便利です。設定方法や具体例については、「ヘルスチェック」ページをご参照ください。


ホストインスタンスへの接続

Keeperゲートウェイの便利な機能の一つに、ホストマシンへの接続やトンネルを開く機能があります。Docker Composeファイルに extra_hosts セクションを追加し、値を host.docker.internal:host-gateway と設定すると、ホストへのセッションを直接開くことができます。

以下はゲートウェイコンテナを含むdocker composeの例となります。

services:
      keeper-gateway:
        platform: linux/amd64
        image: keeper/gateway:latest
        shm_size: 2g
        restart: always
        extra_hosts:
          - "host.docker.internal:host-gateway"
        security_opt:
          - "seccomp:docker-seccomp.json"
        environment:
          ACCEPT_EULA: Y
          GATEWAY_CONFIG: xxxxxxxx

このオプションを有効にすると、ホストへの接続を確立できます。例えば、SSH接続を開くには、以下の手順を実行します:

  1. SSH秘密鍵を使用してPAMユーザーレコードを作成します。

  2. ホスト名を host.docker.internal、ポートを 22 にしてPAMマシンレコードを作成します。

  3. PAM設定でPAMユーザーを指定し、SSH接続を有効にします。

ホストからKeeperゲートウェイサービスを更新する

KeeperPAMを使用してホストサービスにSSH接続している場合、バックグラウンドでゲートウェイのコンテナ更新を実行することでコンテナを更新できます。

docker-compose pull
nohup docker-compose up -d keeper-gateway &

ネットワーク構成

Keeperゲートウェイはアウトバウンド専用の接続を確立するため、インバウンドのファイアウォールルールは必要ありません。ただし、以下のアウトバウンド接続は許可されている必要があります。

目的地
必要なポート
備考

Keeper Cloud (keepersecurity.[com|eu|com.au|jp|ca|us])

TLSポート443

Keeper Cloudと通信して、ネイティブプロトコル (例: SSH、RDP) を使用して対象インフラストラクチャへアクセスします。

Keeper Router (connect.keepersecurity.[com|eu|com.au|jp|ca|us])

TLSポート443

Keeper Routerと通信して、安全なリアルタイムWebSocket接続を確立します。

Keeper KRelay Server (krelay.keepersecurity.[com|eu|com.au|jp|ca|us])

ポート3478でのTCPおよびUDP通信を許可する必要があります。 また、TCPおよびUDPのポート49152〜65535へのアウトバウンドアクセスも許可されている必要があります。

エンドユーザーのボルトと対象システム間で、ゲートウェイを介した安全かつ暗号化されたリレー接続を実現します。

ゲートウェイでは、すべての暗号化および復号化処理をローカルで実行することでゼロ知識を保持します。Keeperクラウドとの通信にはKeeperシークレットマネージャーのAPIを使用します。


ディスク容量の管理

時間の経過とともに、新しいゲートウェイのバージョンをデプロイすると、古いDockerイメージがホストサーバー上に蓄積することがあります。これにより、ディスク容量を大きく消費する場合があります。 円滑な運用とストレージ不足の防止のため、定期的にディスク使用状況を確認し、不要なDockerイメージを削除することを推奨します。

ディスク使用状況の確認

Keeperゲートウェイサーバーで、次のコマンドを実行します。

df -h

このコマンドは、すべてのマウント済みファイルシステムの空き容量を人間が読みやすい形式で表示します。特に、Dockerのデータが保存されるパーティション (通常は /var/lib/docker) に注意してください。

ディスク使用率が高くなっている (例: 80〜90%以上使用) 場合は、古いDockerイメージを削除することを検討してください。

古いDockerイメージの削除

Keeperゲートウェイを更新すると、Dockerは以前のイメージをシステム上に保持します。未使用のDockerイメージをすべて削除するには、次のコマンドを使用します。

docker image prune -a
  • -a フラグを付けることで、未使用のすべてのイメージ (参照されていないものも含む) が削除されます。

  • 実行中に確認メッセージが表示されたら、y と入力して続行します。

出力例

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
...
Total reclaimed space: 4.8GB

この操作により、実行中のコンテナで使用されていない古いイメージのみが安全に削除されます。


参考資料

最終更新