# AWS ECS上のゲートウェイ

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FETnLSTu5qYNj0xwMltI2%2FKeeperPAM%20Machine.jpg?alt=media&#x26;token=7f69333a-8f02-410f-8542-1882216994b6" alt=""><figcaption></figcaption></figure>

## 概要 <a href="#overview" id="overview"></a>

本文書では、AWS ECS上にKeeperゲートウェイをインストール、構成、更新する手順を説明します。Keeperゲートウェイのコンテナは、Rocky Linux 9のベースイメージを基にビルドされ、[DockerHub](https://hub.docker.com/r/keeper/gateway)で配布されています。

## 要件

* VPC: 少なくとも1つのプライベートサブネットを持つVPC
* インターネットアクセス: ECSホストから、インターネットゲートウェイ (IGW)またはNATゲートウェイ経由でKeeperのエンドポイントへの外向きルートが必要です。詳細は[ゲートウェイのネットワーク構成](/keeperpam/jp/privileged-access-manager/references/gateway-network-configuration.md)をご参照ください。
* インスタンスタイプ: 利用可能メモリが少なくとも8GBあるEC2インスタンスタイプを使用してください。サイジングの推奨事項は[システム要件](/keeperpam/jp/privileged-access-manager/getting-started.md#system-requirements)をご参照ください。
* ゲートウェイの最大インスタンス数の設定: 以下および[スケーリングと高可用性](#scaling-and-high-availability)をご参照ください。

***

## ゲートウェイの作成 <a href="#create-a-gateway" id="create-a-gateway"></a>

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

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

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

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

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

***

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

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

<figure><img src="/files/w4ojj0JAYPQa6fxI7dmw" alt=""><figcaption></figcaption></figure>

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

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

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

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

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

**シークレット値の入力:**

* 「プレーンテキスト」タブに切り替えます。
* 既存の波括弧 `{}` を削除し、Base64の構成トークンを貼り付けます。

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

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

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FMOiV9ZPudHmFc2lbxMmO%2FSecrets.png?alt=media&#x26;token=0e20cf7c-b2e3-4f32-9f28-97ee8f97e22a" alt=""><figcaption></figcaption></figure>

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

* **シークレット名:** `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`)
* **ロールを作成**をクリックします。

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2F6WQ7kqyFJ8ExRfNHJZSI%2FECS%20Instance%20Role.png?alt=media&#x26;token=62f63132-d14e-4720-9b4d-c91181f9ead0" alt=""><figcaption></figcaption></figure>

#### タスク実行ロール

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

* **IAM** > **ロール**に移動し、**ロールを作成**をクリックします。
* **信頼できるエンティティのタイプ:** **AWSのサービス**を選択します。
* **サービスまたはユースケース:** Elastic Container Serviceを選択します。
* **ユースケース:** 以下を検索してチェックします。
  * `AmazonECSTaskExecutionRolePolicy`
* **次へ**をクリックします。
* **ロール名:** 例 `ecsgateway-execution-role`
* **ロールを作成**をクリックします。
* シークレット用のインラインポリシーを追加します。
  * 作成した `ecsgateway-execution-role` を開きます。
  * **許可を追加** > **インラインポリシーを作成**をクリックします。
  * JSONタブに切り替え、以下を貼り付けます (`YOUR_SECRET_ARN` を先にコピーしたARNに置き換えます)。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "YOUR_SECRET_ARN"
        }
    ]
}
```

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

#### タスクロール

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

* **IAM** > **ロール**に移動し、**ロールを作成**をクリックします。
* **信頼できるエンティティのタイプ:** **AWSのサービス**を選択します。
* **サービスまたはユースケース:** **Elastic Container Service** を選び、**Elastic Container Service タスク**を選択します。**次へ**をクリックします。
* **許可の追加:** **次へ**をクリックします (カスタムポリシーで追加します)。
* **ロール名:** 例 `ecsgateway-task-role`。**ロールを作成**をクリックします。
* **リソース管理用のインラインポリシーを追加**します。
  * 新しい `ecsgateway-task-role` をクリックします。
  * **許可を追加** > **インラインポリシーを作成**をクリックします。
  * JSONタブに切り替え、以下を貼り付けます。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "iam:UpdateLoginProfile"
            ],
            "Resource": "*"
        }
    ]
}
```

***

## **ECSクラスターの作成**

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

**クラスター名:** `[CLUSTER_NAME]`。

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

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

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

**インスタンスタイプ:** `t3.large`。

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

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

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

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

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FYzdkiCFCys2mfssT3cAg%2FECS%20cluster.png?alt=media&#x26;token=ed1393a5-3c44-451b-bcf1-62596f403119" alt=""><figcaption></figcaption></figure>

***

## タスク定義の作成

* **ECSコンソールを開く:** **Amazon Elastic Container Service** > **タスク定義**に移動します。
* **作成の開始:** **新しいタスク定義の作成**をクリックし、**JSONで新しいタスク定義を作成**を選択します。

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2FPoW3qxbd8y9iqqCYcN27%2Ftask%20definition.png?alt=media&#x26;token=09044ca0-c612-49b8-8a1a-bcaf1031641e" alt=""><figcaption></figcaption></figure>

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

```
{
  "family": "[TASK_FAMILY_NAME]",
  "taskRoleArn": "arn:aws:iam::[ACCOUNT_ID]:role/ecsgateway-task-role",
  "executionRoleArn": "arn:aws:iam::[ACCOUNT_ID]:role/ecsgateway-execution-role",
  "networkMode": "bridge",
  "containerDefinitions": [
    {
      "name": "keeper-gateway",
      "image": "keeper/gateway:latest",
      "cpu": 2048,
      "memory": 8192,
      "essential": true,
      "privileged": true,
      "linuxParameters": {
        "sharedMemorySize": 2048
      },
      "environment": [
        { "name": "ACCEPT_EULA", "value": "Y" }
      ],
      "secrets": [
        {
          "name": "GATEWAY_CONFIG",
          "valueFrom": "arn:aws:secretsmanager:[REGION]:[ACCOUNT_ID]:secret:[SECRET_NAME]"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/[TASK_FAMILY_NAME]",
          "awslogs-create-group": "true",
          "awslogs-region": "[REGION]",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "EC2"
  ]
}
```

#### パラメータ

`[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の `networkMode` に `awsvpc` を指定します。

***

## デプロイと確認

#### ECSサービスの作成

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

* **ECSコンソールを開く:** **クラスター**に移動し、クラスター (例: `Keeper-Cluster`)を選択します。
* **サービスの作成:** **サービス**タブで**作成**をクリックします。
* **環境の構成:**
  * **コンピューティングオプション:** **起動タイプ**を選択します。
  * **起動タイプ:** **EC2**を選択します。

<figure><img src="https://762006384-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJXOXEifAmpyvNVL1to%2Fuploads%2F0Rv8tTn5kC361c8TnF9K%2FService.png?alt=media&#x26;token=77be5528-168b-4e1d-8036-4f0c2f5be427" alt=""><figcaption></figcaption></figure>

* **デプロイの構成:**
  * **ファミリー:** 作成した `ecsgatewaytask` を選択します。
  * **リビジョン:** 最新のリビジョンを選択します。
  * **サービス名:** `keeper-gateway-service`。
  * **希望タスク数:** `1` に設定します。
* **ネットワーク:**
  * **セキュリティグループ:**
    * `Bridge` モードの場合: ネットワーク設定はEC2ホストから継承されます。このウィザードではSGの選択をスキップします。
    * `awsvpc` モードの場合: VPC、サブネット、ゲートウェイ用セキュリティグループを選択します。
* **確認と作成:** **作成**をクリックします。

***

## スケーリングと高可用性 <a href="#scaling-and-high-availability" id="scaling-and-high-availability"></a>

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

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

```
pam gateway list
```

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

```
pam gateway set-max-instances -g <GATEWAY_UID> -m <MAX_INSTANCES>
```

* `<GATEWAY_UID>` はスケーリングするゲートウェイのUIDです。
* `<MAX_INSTANCES>` は許可するゲートウェイインスタンス数の上限です。

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

```
pam gateway set-max-instances -g Dmg5bh63p3Yj7ov738BTAw -m 5
```

ゲートウェイのスケーリングと高可用性の詳細は、[スケーリングと高可用性](#scaling-and-high-availability)をご参照ください。

***

## ネットワーク構成

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

<table><thead><tr><th width="310.1015625">宛先エンドポイント</th><th>必要なポート</th><th>補足</th></tr></thead><tbody><tr><td><p><strong>Keeperクラウド</strong><br><code>keepersecurity.[x]</code></p><p>エンドポイント:</p><p>US: <code>.com</code></p><p>EU: <code>.eu</code></p><p>AU: <code>.com.au</code></p><p>JP: <code>.jp</code></p><p>CA: <code>.ca</code></p><p>US_GOV: <code>.us</code></p></td><td>TLSポート443</td><td>ネイティブプロトコル (例: SSH、RDP)で接続先のインフラにアクセスするため、Keeperクラウドと通信します</td></tr><tr><td><p><strong>Keeperルーター</strong><br><code>connect.keepersecurity.[x]</code></p><p>エンドポイント:</p><p>US: <code>.com</code></p><p>EU: <code>.eu</code></p><p>AU: <code>.com.au</code></p><p>JP: <code>.jp</code></p><p>CA: <code>.ca</code></p><p>US_GOV: <code>.us</code></p></td><td>TLSポート443</td><td>安全なリアルタイムのWebSocket接続を確立するため、Keeperルーターと通信します</td></tr><tr><td><p><strong>Keeper STUN/TURNサービス</strong></p><p><code>krelay.keepersecurity.[x]</code></p><p>エンドポイント:</p><p>US: <code>.com</code></p><p>EU: <code>.eu</code></p><p>AU: <code>.com.au</code></p><p>JP: <code>.jp</code></p><p>CA: <code>.ca</code></p><p>US_GOV: <code>.us</code></p></td><td>TCPおよびUDPのポート3478を開放<br><br>TCPおよびUDPのポート49152〜65535への外向きアクセス<br></td><td>エンドユーザーのボルトと接続先システムの間で、ゲートウェイ経由の安全で暗号化されたWebRTC接続を実現します</td></tr></tbody></table>

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/privileged-access-manager/getting-started/gateways/gateway-on-aws-ecs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
