# AWS Elastic Containerサービス

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F2S2SKPsFNCCYquvSEGTs%2FKeeper%20Automator.jpg?alt=media&#x26;token=f3a8419c-a119-44cd-abe7-518349eb5ee7" alt=""><figcaption></figcaption></figure>

## 概要

この例では、必要最小限の依存関係で最も簡単な方法でAmazon ECSでKeeperオートメーターサービスを起動する方法について解説します。

要件

* AWSを介したマネージドSSL証明書

### 1. Automator Configキーの作成

オペレーティングシステムに応じて以下のいずれかの方法を使用してURL エンコード形式で256ビットAESキーを生成します。

#### Mac/Linux

```
openssl rand -base64 32
```

#### Windows

```
[Byte[]]$key = New-Object Byte[] 32; [System.Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($key); [System.Convert]::ToBase64String($key)
```

タスク定義に設定された環境変数としてこの値を保存します。

### 2. VPCの作成

VPCが存在しない場合は、複数のサブネット、ルートテーブル、インターネットゲートウェイを持つ基本的なVPCをセットアップする必要があります。こちらの例では、以下のリソースマップに見られるようにインターネットゲートウェイを備えたVPC内に3つのサブネットがあります。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FgSsfKBZLgsSpbyVFecQt%2FScreenshot%202023-04-16%20at%2011.48.19%20AM.png?alt=media&#x26;token=c3e04637-9276-43fc-98cc-87b3580ed86a" alt=""><figcaption><p>VPCのセットアップ</p></figcaption></figure>

### 3. CloudWatchロググループの作成

ログをキャプチャしたい場合 (推奨)、\[CloudWatch] > \[ロググループの作成]に移動します。

ロググループにautomator-logsという名前を付けます。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F1Scoqlf3I7jzZQwiD9IV%2FScreenshot%202023-04-16%20at%2012.11.45%20PM.png?alt=media&#x26;token=0858bcd8-c505-4835-80f0-6ae8784ab70b" alt=""><figcaption><p>CloudWatchロググループの作成</p></figcaption></figure>

### 4. タスク実行IAMロールの作成

\[IAM] > \[ロールの作成]へ行きます。

\[AWSサービス]を選択します。

次に、Elastic Container Serviceを検索して選択します。

\[Elastic Container Serviceタスク]を選択し、\[次へ]をクリックします。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FffOaVU8Glyp0iucnrJ48%2FScreenshot%202023-04-16%20at%2010.34.41%20AM.png?alt=media&#x26;token=3027a429-bb4d-4490-9a57-8e7905ba16f0" alt=""><figcaption></figcaption></figure>

\[AmazonECSTaskExecution]ポリシーをロールに追加し、\[次へ]をクリックします。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FpFtfP4uSsgu4B1bsJqLa%2FScreenshot%202023-04-16%20at%2010.35.02%20AM.png?alt=media&#x26;token=b0c82d42-f172-4d2a-b6d0-2728130103da" alt=""><figcaption></figcaption></figure>

**ECSTaskWritetoLogs**という名前を割り当てて、ロールを作成します。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FMThvWhkTVOe18PB6fzT6%2FScreenshot%202023-04-16%20at%2010.35.29%20AM.png?alt=media&#x26;token=5b42c016-50c2-4268-a0ae-74552e15f5af" alt=""><figcaption></figcaption></figure>

次の手順で使用するため、このロールのARNをメモしておきます。

本事例で&#x306F;**`arn:aws:iam::373699066757:role/ECSTaskWritetoLogs`**&#x3068;なります。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F6R1BZKhiPy8aQq73jZvy%2FScreenshot%202023-04-16%20at%2012.25.39%20PM.png?alt=media&#x26;token=8d70841b-4b68-44c7-8c71-d97423050a73" alt=""><figcaption><p>ARNをメモします</p></figcaption></figure>

### 5. ECSのセキュリティグループを作成 <a href="#create-ecs-security-group" id="create-ecs-security-group"></a>

**\[EC2] > \[セキュリティ グループ]**&#x306B;移動し、**\[セキュリティグループの作成]**&#x3092;クリックします。

Keeperテナントがホストされている地域に応じて、Keeperクラウドからのhttpsポート443を許可する受信ルールを作成する必要があります。各テナントの場所のIPのリストについては以下をご覧ください。以下の例では米国データセンターとなります。

* また、テストとトラブルシューティングのためにワークステーションの外部IPアドレスを追加することを推奨します。

**MyAutomatorService**などの名前を割り当て、\[作成]をクリックします。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F7GHCjypfwelEfkH3E9HJ%2FScreenshot%202023-04-15%20at%208.45.19%20AM.png?alt=media&#x26;token=d9614861-d1a0-40a2-a9c0-5e517f77dfc1" alt=""><figcaption><p>ECSセキュリティグループの作成</p></figcaption></figure>

| Keeperテナント地域 | IP1              | IP2               |
| ------------ | ---------------- | ----------------- |
| US           | 54.208.20.102/32 | 34.203.159.189/32 |
| US GovCloud  | 18.252.135.74/32 | 18.253.212.59/32  |
| EU           | 52.210.163.45/32 | 54.246.185.95/32  |
| AU           | 3.106.40.41/32   | 54.206.208.132/32 |
| CA           | 35.182.216.11/32 | 15.223.136.134/32 |
| JP           | 54.150.11.204/32 | 52.68.53.105/32   |

{% hint style="info" %}
以下のURLから見つけられるご自身のIPを忘れずに追加してください。

<https://checkip.amazonaws.com>
{% endhint %}

### 6. セキュリティグループをインバウンドルールのリストに追加

セキュリティグループを保存した後、受信ルールを再度編集します。 今回は以下の内容を追加します。

* ソースがセキュリティ グループに設定された状態のHTTPポート8089 を追加します。これにより、ALBからネットワーク内のコンテナへのトラフィックとヘルスチェック処理が可能となります。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FrW7G8hfpXMM1mSClNrzo%2FScreenshot%202023-11-02%20at%202.32.20%E2%80%AFPM.jpg?alt=media&#x26;token=84c04405-fcf7-489e-a6ba-4bc710803a57" alt=""><figcaption><p>カスタムTCPポート8089</p></figcaption></figure>

### 7. Elastic Container Serviceクラスターの作成

Amazon Elastic Container Serviceへ進みます。

\[クラスターの作成]を選択し、クラスター名とVPCを割り当てます。 こちらの例では、デフォルトの\[AWS Fargate (サーバーレス)]インフラストラクチャを使用しています。

* デフォルトの名前空間はautomatorで問題ありません
* \[インフラストラクチャ]は AWS Fargate (サーバーレス) に設定します
* \[作成]をクリックします

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F2y7Dy0ip8CHcZ3nl7A0o%2Fcreatecluster%20(1).JPG?alt=media&#x26;token=b1c16a23-8c21-4701-9c55-530f45921076" alt=""><figcaption><p>AWS FargateでECSクラスターを作成</p></figcaption></figure>

### 8. ECSタスク定義の作成

任意のテキストエディタで、以下のJSONタスク定義ファイルをコピーして保存します。

**重要** JSONファイルに以下の変更を加えます。

* 24行目の **XXX (REPLACE THIS) XXX** を上記の手順1で作成した秘密キーに変更します。
* **37行～39行**を手順3のロググループの**名前**と**場所**に置き換えます。
* 44行目の**XXX**をAWSロールに固有のロールIDに変更します（手順4の373699066757）。

{% code lineNumbers="true" %}

```json
{
    "family": "automator",
    "containerDefinitions": [
        {
            "name": "automator",
            "image": "keeper/automator:latest",
            "cpu": 1024,
            "portMappings": [
                {
                    "containerPort": 8089,
                    "hostPort": 8089,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": true,
            "environment": [
                {
                    "name": "SSL_MODE",
                    "value": "none"
                },
                {
                    "name": "AUTOMATOR_CONFIG_KEY",
                    "value": "XXX (REPLACE THIS) XXX"
                },
                {
                    "name": "AUTOMATOR_PORT",
                    "value": "8089"
                }
            ],
            "mountPoints": [],
            "volumesFrom": [],
            "readonlyRootFilesystem": false,
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "automator-logs",
                    "awslogs-region": "eu-west-1",
                    "awslogs-stream-prefix": "container-2"
                }
            }
        }
    ],
    "executionRoleArn": "arn:aws:iam::XXX:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "1024",
    "memory": "3072",
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    }
}
```

{% endcode %}

次に、**\[Elastic Container Service] > \[タスク定義] > \[JSONからタスクを作成]**&#x306B;移動します。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F8Rb0hWkpQzsW4xfu52ro%2FScreenshot%202023-04-16%20at%2012.33.12%20PM.png?alt=media&#x26;token=ba9e19d8-96e1-45bc-b9cb-bf2ad21779a0" alt=""><figcaption><p>JSONでタスク定義を作成</p></figcaption></figure>

既存のJSONを削除し、変更したJSONファイルをボックスにコピーして貼り付け、**\[作成]** をクリックします。

このタスク定義は、インスタンスのCPU/メモリ要件に応じて変更できます。

### 9. SSL証明書をAWS Certificate Managerにアップロード

AWSのアプリケーションロードバランサーがオートメーターのクエストに対応するには、SSL証明書が AWS Certificate Managerによって管理されている必要があります。AWSが管理する証明書をインポートするか作成します。

* AWSコンソールから\[Certificate Manager]を開きます。
* **\[リクエスト]**&#x3092;クリックします。
* パブリック証明書をリクエストし、**\[次へ]**&#x3092;クリックします。
* automator.lurey.comなど、オートメーターサービスのドメイン名を入力します。
* 任意の検証方式とキーアルゴリズムを選択します。
* **\[リクエスト]**&#x3092;クリックします。
* 証明書の一覧から証明書リクエストをクリックします。

Route53を使用してドメインを管理している場合は証明書をクリックし、**\[Route53でレコードを作成]**&#x3092;選択するとドメインが即座に検証され証明書が作成されます。別のDNSプロバイダーを使用する場合は、画面に見られるようにCNAMEレコードを作成する必要があります。

CNAMEレコードを作成すると、ドメインは数分以内に有効となります。

この証明書は、手順11でアプリケーションロードバランサーを作成する際に参照されます。

### 10. ターゲットグループの作成

\[EC2] > \[ターゲットグループ]に移動し、\[ターゲットグループの作成] をクリックします。

* ターゲットの種類として\[IPアドレス]を選択します。
* ターゲットグループ名に**automatortargetgroup**または任意の名前を入力します。
* ポート**8089**のHTTPプロトコルを選択します。
* ECSクラスターを含むVPCを選択します。
* HTTP1を選択します。
* \[ヘルス チェック] で、ヘルスチェックプロトコルとし&#x3066;**\[HTTP]**&#x3092;選択します。
* ヘルスチェックのパスとし&#x3066;**`/health`**&#x3068;入力します。
* **\[ヘルスチェックの詳細設定]**&#x3092;展開します。
* **\[オーバーライド]**&#x3092;選択し、ポート**8089**を入力します。
* **\[次へ]**&#x3092;クリックします。
* まだターゲットを選択せず&#x306B;**\[ターゲットグループの作成]**&#x3092;クリックします。

### 11. アプリケーションロードバランサー (ALB) の作成

**\[EC2] > \[ロードバランサー] > \[ロードバランサーの作成]**&#x306B;移動します。

**\[Application Load Balancer] > \[作成]**&#x3092;選択します。

* **automarnalb**などの任意の名前を割り当てます。
* スキームはInternet-facingとなります。
* IPアドレスの種類: IPv4
* \[ネットワークマッピング]の箇所で、ECSサービスをホストするVPCとサブネットを選択します。
* セキュリティグループで、手順4で作成した**MyAutomatorService**を選択します。
* \[リスナーとルーティング]の箇所でHTTPSポート443を選択し、ターゲットグループで前の手順で作成したターゲットグループ (**automatortargetgroup**) を選択します。
* \[セキュアリスナー設定]で、手順9でAWS Certificate ManagerにアップロードしたACMからのSSL証明書を選択します。
* **\[ロードバランサーの作成]**&#x3092;クリックします。

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

\[Elastic Container Service] > \[タスク定義] > 手順8で作成したタスクを選択します。

このタスク定義から、\[デプロイ] > \[サービスの作成]をクリックします。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FGYgmz98Mt7fsALICeSN7%2FScreenshot%202023-04-16%20at%2012.35.25%20PM.png?alt=media&#x26;token=5633db7a-4592-4e89-84c5-ed6986fd0398" alt=""><figcaption><p>サービスの作成</p></figcaption></figure>

* **automator**の既存のクラスターを選択します。
* サービス名に**automatorservice**または任意の名前を割り当てます。
* 必要なタスクの数については、とりあえず1に設定します。設定が完了後に実行したいタスクの数を増やせます。
* \[ネットワーク]でVPCとサブネットを選択し、既存のセキュリティグループを手順4で作成した ECSセキュリティグループに置き換えます。この場合は**MyAutomatorService**となります。
* **パブリックIP**を**ON**にします。
* \[ロードバランシング]で、ロード バランサーの種類とし&#x3066;**\[Application Load Balancer]**&#x3092;選択します。
* **既存の**ロードバランサーを使用し、手順11で作成した**automatralb**を選択します。
* **既存の**リスナーを使用し、443:HTTPSリスナーを選択します。
* **既存の**ターゲットグループを使用し、手順10のターゲットグループを選択します。
* ヘルスチェックのパス&#x3092;**/health**に設定します。
* ヘルスチェックプロトコルを**HTTP**に設定します。
* **\[作成]**&#x3092;クリックします。

数分後にサービスが起動します。

### 13. DNSの更新

DNS名がRoute53によってホストおよび管理されていると仮定します。

**Route53** > レコードの**作成**または編集に移動します。

* Aレコードを作成します。
* **エイリアス**として設定します。
* トラフィック&#x3092;**\[アプリケーションおよびクラシックロードバランサーへのエイリアス]**&#x306B;ルーティングします。
* AWS地域を選択します。
* **automaticalb**アプリケーションロードバランサーを選択します
* **\[シンプルルーティング]**&#x3092;選択します。
* **\[保存]**&#x3092;選択します。

次の手順では、タスクを1件だけ実行した状態でKeeperコマンダーを使用してオートメーターを設定します。

### **14. Keeperコマンダーのインストール**

この時点ではサービスは実行されていますが、まだKeeperと通信できない状態です。

ご利用のワークステーション、サーバー、コンピューターのどれかにKeeperコマンダーCLIをインストールします。初期設定にのみ使用します。バイナリインストーラーを含むインストール手順については[こちら](https://docs.keeper.io/keeperpam/commander-cli/commander-installation-setup)をご覧ください。

コマンダーをインストールした後、`keeper shell`と入力してセッションを開いてから`login`コマンドを使用してログインします。オートメーターをセットアップするには、Keeper管理者またはSSOノードを管理する権限を持つ管理者としてログインする必要があります。

```
$ keeper shell

My Vault> login admin@company.com
.
.
My Vault>
```

### **15. コマンダーでの初期設定**

[Keeperコマンダー](https://docs.keeper.io/keeperpam/commander-cli/overview)にログインし、`automator create`で始まる一連のコマンドを使用してオートメーターを有効にします。

```
My Vault> automator create --name="My Automator" --node="Azure Cloud"
```

ノード名 (この場合はAzure Cloud) は、以下のように管理コンソールUIから取得します。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FNdYz9XWKABSVqtIAV5Ff%2FScreen%20Shot%202021-09-10%20at%203.59.58%20PM.png?alt=media&#x26;token=3c897624-3ae2-465e-9749-c4357015dacc" alt=""><figcaption><p>オートメーターの作成</p></figcaption></figure>

コマンドの出力には、IDプロバイダからのメタデータを含むオートメーター設定が表示されます。

```
                    Automator ID: 1477468749950
                            Name: My Automator
                             URL: 
                         Enabled: No
                     Initialized: No
                          Skills: Device Approval
```

以下のようにautomator editコマンドを実行します。これによりURLとスキルが設定されます (`team`、 `team_for_user`、`device`）。

{% code overflow="wrap" %}

```
automator edit --url https://<application URL> --skill=team --skill=team_for_user --skill=device "My Automator"
```

{% endcode %}

次にキーを交換します。オートメーター公開キーで暗号化されたエンタープライズ秘密キーがオートメーターに提供されます。

```
automator setup "My Automator"
```

新しい設定でオートメーターを初期化します。

```
automator init "My Automator"
```

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

```
automator enable "My Automator"
```

この時点で設定は完了となります。

自動ヘルスチェックには以下のURLをご使用になれます。

**https\://\<server>/health**

以下は`curl`コマンドを使用した例です。

```
$ curl https://automator.lurey.com/health
OK
```

本セットアップ例では、ロードバランサーはHTTP ポート8089経由でターゲットインスタンスにヘルスチェックを転送します。

### 16. ユーザー体験のテスト

Keeperオートメーターが1件のタスクを実行した状態でデプロイされましたので、エンドユーザー体験のテストが可能となります。ユーザーがSSO IDプロバイダで認証した後は、承認を求めるプロンプトは必要なくなります。

最も簡単なテスト方法は、ブラウザでシークレットモードのウィンドウを開いてKeeperウェブボルトへアクセスし、SSOクラウドでログインすることとなります。デバイスの承認を求めるプロンプトは表示されなくなります。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FnAGBNvh99hgIOnNOuJdv%2FScreen%20Shot%202021-09-10%20at%205.17.42%20PM.png?alt=media&#x26;token=e8222ad6-49b4-4b22-9e5b-bde5fd35beb0" alt=""><figcaption><p>ボルトへのログイン</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FbqTOKRYMbSo5HTGpHTQX%2FScreen%20Shot%202021-09-10%20at%205.18.15%20PM.png?alt=media&#x26;token=73817b67-9c8b-4e42-b585-3e73d0a6b437" alt=""><figcaption><p>SSOログイン</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2F2ePvTbVgjp70enV5sTmc%2FScreen%20Shot%202021-09-10%20at%205.30.15%20PM.png?alt=media&#x26;token=ed4aff69-cdc9-494c-bcc3-29523f8cc65a" alt=""><figcaption><p>自動承認</p></figcaption></figure>

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FhKfNZnzP0MelaFgtnj7s%2FScreen%20Shot%202021-09-10%20at%205.32.12%20PM.png?alt=media&#x26;token=7fb689ee-343e-4117-825b-beaeff2e9409" alt=""><figcaption><p>ボルトの復号化</p></figcaption></figure>

承認が機能しましたので、実行するタスクの数を増やせます。

### 17. タスク定義の更新 (任意)

Keeperオートメーターサービスは、処理するリクエストの数が少ないため単一のコンテナ上で問題なく快適に実行できます。ただし、複数のコンテナを実行したい場合は以下の手順に従ってください。

* ECSサービス画面から**automatorservice**をクリックします。
* **\[サービスを更新]**&#x3092;クリックします。
* **\[新規デプロイメントを強制]**&#x3059;るのチェックボックスを選択します。
* 最新のタスクリビジョンが選択されていることを確かにします。
* **\[必要なタスク]**&#x3092;実行したいコンテナの数に設定します。
* **\[更新]**&#x3092;クリックします。
* 数分後、新しいコンテナがデプロイされます。すべてのコンテナがアクティブになるまで待ちます。
* Keeperコマンダーを起動します (あるいはまだ開いたままである可能性があります）。

各コンテナーに対して、オートメーターセットアップ、初期化、有効化を実行する必要があります。

以下は3つのコンテナが実行されている場合となります。

```
automator setup "My Automator"
automator setup "My Automator"
automator setup "My Automator"

automator init "My Automator"
automator init "My Automator"
automator init "My Automator"

automator enable "My Automator"
automator enable "My Automator"
automator enable "My Automator"
```

### ログとモニター

オートメーターログは、ECSサービスの\[ログ]タブまたはCloudWatchで検索およびモニターできます。

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FYRH2Gt1hYu8RWUXveut1%2FScreenshot%202023-07-12%20at%2012.42.07%20PM.jpg?alt=media&#x26;token=d3f9d5e2-fc29-4085-9222-411d710e4c5b" alt=""><figcaption><p>ログとモニター</p></figcaption></figure>
