AWS ECS上のゲートウェイ

AWS ECSへのKeeperゲートウェイのインストール手順

概要

本文書では、AWS ECS上にKeeperゲートウェイをインストール、構成、更新する手順を説明します。Keeperゲートウェイのコンテナは、Rocky Linux 9のベースイメージを基にビルドされ、DockerHubで配布されています。

要件

  • VPC: 少なくとも1つのプライベートサブネットを持つVPC

  • インターネットアクセス: ECSホストから、パブリックサブネット上のインターネットゲートウェイ (IGW) 経由でKeeperのエンドポイントへの外向きルートが必要です。詳細はゲートウェイのネットワーク構成をご参照ください。

  • インスタンスタイプ: 利用可能メモリが少なくとも8GBあるEC2インスタンスタイプを使用してください。サイジングの推奨事項はシステム要件をご参照ください。

  • ゲートウェイの最大インスタンス数の設定: 以下およびスケーリングと高可用性をご参照ください。


ゲートウェイの作成

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

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

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

Docker ComposeのYAMLをダウンロードし、Base64の構成トークンを保存してください。


AWSインフラのセットアップ

セキュリティグループのアウトバウンド: HTTPS (443)、送信先 0.0.0.0/0

ゲートウェイ構成シークレットの作成

AWS Secrets Managerコンソールに移動します。

「新しいシークレットを保存」を選択: ボタンをクリックして作成を開始します。

シークレットタイプの選択:

  • その他のタイプのシークレット」を選択します。

シークレット値の入力:

  • 「プレーンテキスト」タブに切り替えます。

  • 既存の波括弧 {} を削除し、Base64の構成トークンを貼り付けます。

暗号化キー: aws/secretsmanager のままにします。

次へをクリックします。

シークレットメタデータの設定:

  • シークレット名: keeper/gateway-config など、わかりやすい名前を入力します。

シークレットの保存: オプションのローテーション設定はスキップし、保存をクリックします。

シークレットARNのコピー: 保存後、新しいシークレットを開き、シークレットARNをコピーします (後で使用します)。

  • 形式の例: arn:aws:secretsmanager:us-east-1:012345678901:secret:keeper/gateway-config-abc123

IAMロールの作成

ECSインスタンスロール

EC2インスタンスがECSクラスターと通信し、リモートトラブルシューティング用にAWS Systems Manager (SSM)を利用できるようにするロールです。

  • IAM > ロール > ロールを作成に移動します。

  • 信頼できるエンティティの選択: AWSのサービスを選択します。

  • サービスまたはユースケース: EC2を選択します。

  • 許可を追加 (以下の2つのマネージドポリシーをアタッチ):

    • AmazonEC2ContainerServiceforEC2Role

    • AmazonSSMManagedInstanceCore

  • ロール名: [INSTANCE_ROLE_NAME] (例: ecsInstanceRole)

  • ロールを作成をクリックします。

タスク実行ロール

このロールは、アプリ起動前にECSエージェントがイメージをプルし、シークレットを復号化するために使用されます。

  • IAM > ロールに移動し、ロールを作成をクリックします。

  • 信頼できるエンティティのタイプ: AWSのサービスを選択します。

  • サービスまたはユースケース: Elastic Container Serviceを選択します。

  • ユースケース: 以下を検索してチェックします。

    • AmazonECSTaskExecutionRolePolicy

  • 次へをクリックします。

  • ロール名:ecsgateway-execution-role

  • ロールを作成をクリックします。

  • シークレット用のインラインポリシーを追加します。

    • 作成した ecsgateway-execution-role を開きます。

    • 許可を追加 > インラインポリシーを作成をクリックします。

    • JSONタブに切り替え、以下を貼り付けます (YOUR_SECRET_ARN を先にコピーしたARNに置き換えます)。

  • ポリシーの確認をクリックし、名前を KeeperSecretAccess と入力して ポリシーを作成をクリックします。

タスクロール

このロールは、アプリケーション実行中にAWSリソースを管理するために使用されます。

  • IAM > ロールに移動し、ロールを作成をクリックします。

  • 信頼できるエンティティのタイプ: AWSのサービスを選択します。

  • サービスまたはユースケース: Elastic Container Service を選び、Elastic Container Service タスクを選択します。次へをクリックします。

  • 許可の追加: 次へをクリックします (カスタムポリシーで追加します)。

  • ロール名:ecsgateway-task-roleロールを作成をクリックします。

  • リソース管理用のインラインポリシーを追加します。

    • 新しい ecsgateway-task-role をクリックします。

    • 許可を追加 > インラインポリシーを作成をクリックします。

    • JSONタブに切り替え、以下を貼り付けます。


ECSクラスターの作成

ECS > クラスター > クラスターの作成に移動します。

クラスター名: [CLUSTER_NAME]

Fargateとセルフマネージドインスタンスを選択します。

プロビジョニング方式: オンデマンド

コンテナインスタンスのAmazonマシンイメージ (AMI): Amazon Linux 2023

インスタンスタイプ: t3.large

EC2インスタンスロール: 事前に作成したECSインスタンスロールを選択します。

希望キャパシティ: 最小1、希望する最大値を設定します。

ネットワーク設定: VPC、サブネット、セキュリティグループを選択します。

作成: 作成をクリックします。


タスク定義の作成

  • ECSコンソールを開く: Amazon Elastic Container Service > タスク定義に移動します。

  • 作成の開始: 新しいタスク定義の作成をクリックし、JSONで新しいタスク定義を作成を選択します。

  • 貼り付けと編集: 以下のテンプレートを貼り付けます。CPUとメモリのサイジングが要件を満たしていることを確認してください。

パラメータ

[TASK_FAMILY_NAME]: タスクの名前を付けます。

ACCOUNT_ID: 右上に表示されます。

サイジングを必要なゲートウェイ規模に合わせて更新します。

privileged: true: リモートブラウザ分離 (RBI)に必要です。Chromiumが「サンドボックス化された」ブラウザの名前空間を扱うには昇格した権限が必要です。

sharedMemorySize: 2048: Dockerの共有メモリは既定で64MBのみです。現代のウェブページをクラッシュなく描画するには、少なくとも2GBが必要です。

secrets ブロック: 環境変数 GATEWAY_CONFIG をAWS Secrets ManagerのARNにマッピングします。復号化はECSエージェントが実行時に自動で行います。

network: bridge モードではコンテナがホストのネットワークスタックを共有し、VPC内リソースの検出に適しています。インスタンスをプライベートサブネットに置く場合は、VPCのルートテーブルで外向き通信をNATゲートウェイへ向け、Keeperクラウドへの安全なインターネット接続を確保してください。この場合はJSONの networkModeawsvpc を指定します。


デプロイと確認

ECSサービスの作成

サービスを作成すると、タスク定義に基づくタスクを常時実行できます。

  • ECSコンソールを開く: クラスターに移動し、クラスター (例: Keeper-Cluster)を選択します。

  • サービスの作成: サービスタブで作成をクリックします。

  • 環境の構成:

    • コンピューティングオプション: 起動タイプを選択します。

    • 起動タイプ: EC2を選択します。

  • デプロイの構成:

    • ファミリー: 作成した ecsgatewaytask を選択します。

    • リビジョン: 最新のリビジョンを選択します。

    • サービス名: keeper-gateway-service

    • 希望タスク数: 1 に設定します。

  • ネットワーク:

    • セキュリティグループ:

      • Bridge モードの場合: ネットワーク設定はEC2ホストから継承されます。このウィザードではSGの選択をスキップします。

      • awsvpc モードの場合: VPC、サブネット、ゲートウェイ用セキュリティグループを選択します。

  • 確認と作成: 作成をクリックします。


スケーリングと高可用性

追加のコンテナをデプロイする前に、スケーリングと高可用性向けにゲートウェイを構成する必要があります。クラスターで設定した最大インスタンス数と整合させてください。

Keeperコマンダーにログインしたうえで、以下のコマンドでゲートウェイの一覧を取得します。

スケーリング対象のゲートウェイに対して、以下のコマンドを実行します。

  • <GATEWAY_UID> はスケーリングするゲートウェイのUIDです。

  • <MAX_INSTANCES> は許可するゲートウェイインスタンス数の上限です。

例: 最大5つのゲートウェイインスタンスを同時に実行できるようにする設定例です。

ゲートウェイのスケーリングと高可用性の詳細は、スケーリングと高可用性をご参照ください。


ネットワーク構成

Keeperゲートウェイは外向き接続のみを確立し、インバウンドのファイアウォールルールは不要です。以下の外向き接続を許可する必要があります。

宛先エンドポイント
必要なポート
補足

Keeperクラウド keepersecurity.[x]

エンドポイント:

US: .com

EU: .eu

AU: .com.au

JP: .jp

CA: .ca

US_GOV: .us

TLSポート443

ネイティブプロトコル (例: SSH、RDP)で接続先のインフラにアクセスするため、Keeperクラウドと通信します

Keeperルーター connect.keepersecurity.[x]

エンドポイント:

US: .com

EU: .eu

AU: .com.au

JP: .jp

CA: .ca

US_GOV: .us

TLSポート443

安全なリアルタイムのWebSocket接続を確立するため、Keeperルーターと通信します

Keeper STUN/TURNサービス

krelay.keepersecurity.[x]

エンドポイント:

US: .com

EU: .eu

AU: .com.au

JP: .jp

CA: .ca

US_GOV: .us

TCPおよびUDPのポート3478を開放 TCPおよびUDPのポート49152〜65535への外向きアクセス

エンドユーザーのボルトと接続先システムの間で、ゲートウェイ経由の安全で暗号化されたWebRTC接続を実現します

ゲートウェイはすべての暗号化と復号化をローカルで行うことでゼロ知識を維持します。Keeperクラウドとの通信にはKeeperシークレットマネージャーAPIを用います。

最終更新