AWS Elastic Containerサービス

AWS ECS (Fargate)サービスでKeeper Automatorを使う

概要

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

要件:

  • 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つのサブネットがあります。

(3) CloudWatchロググループの作成

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

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

(4) タスク実行IAMロールの作成

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

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

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

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

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

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

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

本事例ではarn:aws:iam::373699066757:role/ECSTaskWritetoLogsとなります。

(5) ECSのセキュリティグループを作成

[EC2] > [セキュリティ グループ]に移動し、[セキュリティグループの作成]をクリックします。

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

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

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

Keeperテナント地域IP1IP2

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

以下のURLから見つけられるご自身のIPを忘れずに追加してください。

https://checkip.amazonaws.com

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

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

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

(7) Elastic Container Serviceクラスターの作成

Amazon Elastic Container Serviceへ進みます。

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

  • デフォルトの名前空間はautomatorで問題ありません

  • [インフラストラクチャ]は AWS Fargate(サーバーレス)に設定します

  • [作成]をクリックします

(8) ECSタスク定義の作成

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

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

  • 24行目の XXX (REPLACE THIS) XXX を上記の手順1で作成した秘密キーに変更します。

  • 37行~39行を手順3のロググループの名前場所に置き換えます。

  • 44行目のXXXをAWSロールに固有のロールIDに変更します(手順4の373699066757)。

{
    "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"
    }
}

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

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

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

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

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

  • AWSコンソールから[Certificate Manager]を開きます。

  • [リクエスト]をクリックします。

  • パブリック証明書をリクエストし、[次へ]をクリックします。

  • automator.lurey.comなど、Automatorサービスのドメイン名を入力します。

  • 任意の検証方式とキーアルゴリズムを選択します。

  • [リクエスト]をクリックします。

  • 証明書の一覧から証明書リクエストをクリックします。

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

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

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

(10) ターゲットグループの作成

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

  • ターゲットの種類として[IPアドレス]を選択します。

  • ターゲットグループ名にautomatortargetgroupまたは任意の名前を入力します。

  • ポート8089のHTTPプロトコルを選択します。

  • ECSクラスターを含むVPC を選択します。

  • HTTP1を選択します。

  • [ヘルス チェック] で、ヘルスチェックプロトコルとして[HTTP]を選択します。

  • ヘルスチェックのパスとして/healthと入力します。

  • [ヘルスチェックの詳細設定]を展開します。

  • [オーバーライド]を選択し、ポート8089を入力します。

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

  • まだターゲットを選択せずに[ターゲットグループの作成]をクリックします。

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

[EC2] > [ロードバランサー] > [ロードバランサーの作成]に移動します。

[Application Load Balancer] > [作成]を選択します。

  • automarnalbなどの任意の名前を割り当てます。

  • スキームはInternet-facingとなります。

  • IPアドレスの種類: IPv4

  • [ネットワークマッピング]の箇所で、ECSサービスをホストするVPCとサブネットを選択します。

  • セキュリティグループで、手順4で作成したMyAutomatorServiceを選択します。

  • [リスナーとルーティング]の箇所でHTTPSポート443を選択し、ターゲットグループで前の手順で作成したターゲットグループ(automatortargetgroup)を選択します。

  • [セキュアリスナー設定]で、手順9でAWS Certificate ManagerにアップロードしたACMからのSSL証明書を選択します。

  • [ロードバランサーの作成]をクリックします。

(12) ECSサービスの作成

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

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

  • automatorの既存のクラスターを選択します。

  • サービス名にautomatorserviceまたは任意の名前を割り当てます。

  • 必要なタスクの数については、とりあえず1に設定します。設定が完了後に実行したいタスクの数を増やせます。

  • [ネットワーク]でVPCとサブネットを選択し、既存のセキュリティグループを手順4で作成した ECSセキュリティグループに置き換えます。この場合はMyAutomatorServiceとなります。

  • パブリックIPONにします。

  • [ロードバランシング]で、ロード バランサーの種類として[Application Load Balancer]を選択します。

  • 既存のロードバランサーを使用し、手順11で作成したautomatralbを選択します。

  • 既存のリスナーを使用し、443:HTTPSリスナーを選択します。

  • 既存のターゲットグループを使用し、手順10のターゲットグループを選択します。

  • ヘルスチェックのパスを/healthに設定します。

  • ヘルスチェックプロトコルをHTTPに設定します。

  • [作成]をクリックします。

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

(13) DNSの更新

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

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

  • Aレコードを作成します。

  • エイリアスとして設定します。

  • トラフィックを[アプリケーションおよびクラシックロードバランサーへのエイリアス]にルーティングします。

  • AWS地域を選択します。

  • automaticalbアプリケーションロードバランサーを選択します

  • [シンプルルーティング]を選択します。

  • [保存]を選択します。

次の手順では、タスクを1件だけ実行した状態でKeeper Commanderを使用してAutomatorを設定します。

(14) Keeper Commanderのインストール

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

ご利用のワークステーション、サーバー、コンピューターのどれかにKeeper Commander CLIをインストールします。初期設定にのみ使用します。バイナリインストーラーを含むインストール手順についてはこちらをご覧ください。

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

$ keeper shell

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

(15) Commanderでの初期設定

Keeper Commanderにログインし、automator createで始まる一連のコマンドを使用してAutomatorを有効にします。

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

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

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

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

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

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

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

automator setup "My Automator"

新しい設定で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 Automatorが1件のタスクを実行した状態でデプロイされましたので、エンドユーザー体験のテストが可能となります。ユーザーがSSO IDプロバイダで認証した後は、承認を求めるプロンプトは必要なくなります。

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

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

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

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

  • ECSサービス画面からautomatorserviceをクリックします。

  • [サービスを更新]をクリックします。

  • [新規デプロイメントを強制]するのチェックボックスを選択します。

  • 最新のタスクリビジョンが選択されていることを確かにします。

  • [必要なタスク]を実行したいコンテナの数に設定します。

  • [更新]をクリックします。

  • 数分後、新しいコンテナがデプロイされます。すべてのコンテナがアクティブになるまで待ちます。

  • Keeper Commanderを起動します(あるいはまだ開いたままである可能性があります)。

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

以下は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"

ログとモニター

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

最終更新