AWS ECS (Fargate)サービスでKeeperオートメーターを使う
この例では、必要最小限の依存関係で最も簡単な方法でAmazon ECSでKeeperオートメーターサービスを起動する方法について解説します。
要件
AWSを介したマネージドSSL証明書
オペレーティングシステムに応じて以下のいずれかの方法を使用してURL エンコード形式で256ビットAESキーを生成します。
タスク定義に設定された環境変数としてこの値を保存します。
VPCが存在しない場合は、複数のサブネット、ルートテーブル、インターネットゲートウェイを持つ基本的なVPCをセットアップする必要があります。こちらの例では、以下のリソースマップに見られるようにインターネットゲートウェイを備えたVPC内に3つのサブネットがあります。
ログをキャプチャしたい場合 (推奨)、[CloudWatch] > [ロググループの作成]に移動します。
ロググループにautomator-logsという名前を付けます。
[IAM] > [ロールの作成]へ行きます。
[AWSサービス]を選択します。
次に、Elastic Container Serviceを検索して選択します。
[Elastic Container Serviceタスク]を選択し、[次へ]をクリックします。
[AmazonECSTaskExecution]ポリシーをロールに追加し、[次へ]をクリックします。
ECSTaskWritetoLogsという名前を割り当てて、ロールを作成します。
次の手順で使用するため、このロールのARNをメモしておきます。
本事例ではarn:aws:iam::373699066757:role/ECSTaskWritetoLogs
となります。
[EC2] > [セキュリティ グループ]に移動し、[セキュリティグループの作成]をクリックします。
Keeperテナントがホストされている地域に応じて、Keeperクラウドからのhttpsポート443を許可する受信ルールを作成する必要があります。各テナントの場所のIPのリストについては以下をご覧ください。以下の例では米国データセンターとなります。
また、テストとトラブルシューティングのためにワークステーションの外部IPアドレスを追加することを推奨します。
MyAutomatorServiceなどの名前を割り当て、[作成]をクリックします。
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を忘れずに追加してください。
セキュリティグループを保存した後、受信ルールを再度編集します。 今回は以下の内容を追加します。
ソースがセキュリティ グループに設定された状態のHTTPポート8089 を追加します。これにより、ALBからネットワーク内のコンテナへのトラフィックとヘルスチェック処理が可能となります。
Amazon Elastic Container Serviceへ進みます。
[クラスターの作成]を選択し、クラスター名とVPCを割り当てます。 こちらの例では、デフォルトの[AWS Fargate (サーバーレス)]インフラストラクチャを使用しています。
デフォルトの名前空間はautomatorで問題ありません
[インフラストラクチャ]は AWS Fargate (サーバーレス) に設定します
[作成]をクリックします
任意のテキストエディタで、以下のJSONタスク定義ファイルをコピーして保存します。
重要 JSONファイルに以下の変更を加えます。
24行目の XXX (REPLACE THIS) XXX を上記の手順1で作成した秘密キーに変更します。
37行~39行を手順3のロググループの名前と場所に置き換えます。
44行目のXXXをAWSロールに固有のロールIDに変更します(手順4の373699066757)。
次に、[Elastic Container Service] > [タスク定義] > [JSONからタスクを作成]に移動します。
既存のJSONを削除し、変更したJSONファイルをボックスにコピーして貼り付け、[作成] をクリックします。
このタスク定義は、インスタンスのCPU/メモリ要件に応じて変更できます。
AWSのアプリケーションロードバランサーがオートメーターのクエストに対応するには、SSL証明書が AWS Certificate Managerによって管理されている必要があります。AWSが管理する証明書をインポートするか作成します。
AWSコンソールから[Certificate Manager]を開きます。
[リクエスト]をクリックします。
パブリック証明書をリクエストし、[次へ]をクリックします。
automator.lurey.comなど、オートメーターサービスのドメイン名を入力します。
任意の検証方式とキーアルゴリズムを選択します。
[リクエスト]をクリックします。
証明書の一覧から証明書リクエストをクリックします。
Route53を使用してドメインを管理している場合は証明書をクリックし、[Route53でレコードを作成]を選択するとドメインが即座に検証され証明書が作成されます。別のDNSプロバイダーを使用する場合は、画面に見られるようにCNAMEレコードを作成する必要があります。
CNAMEレコードを作成すると、ドメインは数分以内に有効となります。
この証明書は、手順11でアプリケーションロードバランサーを作成する際に参照されます。
[EC2] > [ターゲットグループ]に移動し、[ターゲットグループの作成] をクリックします。
ターゲットの種類として[IPアドレス]を選択します。
ターゲットグループ名にautomatortargetgroupまたは任意の名前を入力します。
ポート8089のHTTPプロトコルを選択します。
ECSクラスターを含むVPCを選択します。
HTTP1を選択します。
[ヘルス チェック] で、ヘルスチェックプロトコルとして[HTTP]を選択します。
ヘルスチェックのパスとして/health
と入力します。
[ヘルスチェックの詳細設定]を展開します。
[オーバーライド]を選択し、ポート8089を入力します。
[次へ]をクリックします。
まだターゲットを選択せずに[ターゲットグループの作成]をクリックします。
[EC2] > [ロードバランサー] > [ロードバランサーの作成]に移動します。
[Application Load Balancer] > [作成]を選択します。
automarnalbなどの任意の名前を割り当てます。
スキームはInternet-facingとなります。
IPアドレスの種類: IPv4
[ネットワークマッピング]の箇所で、ECSサービスをホストするVPCとサブネットを選択します。
セキュリティグループで、手順4で作成したMyAutomatorServiceを選択します。
[リスナーとルーティング]の箇所でHTTPSポート443を選択し、ターゲットグループで前の手順で作成したターゲットグループ (automatortargetgroup) を選択します。
[セキュアリスナー設定]で、手順9でAWS Certificate ManagerにアップロードしたACMからのSSL証明書を選択します。
[ロードバランサーの作成]をクリックします。
[Elastic Container Service] > [タスク定義] > 手順8で作成したタスクを選択します。
このタスク定義から、[デプロイ] > [サービスの作成]をクリックします。
automatorの既存のクラスターを選択します。
サービス名にautomatorserviceまたは任意の名前を割り当てます。
必要なタスクの数については、とりあえず1に設定します。設定が完了後に実行したいタスクの数を増やせます。
[ネットワーク]でVPCとサブネットを選択し、既存のセキュリティグループを手順4で作成した ECSセキュリティグループに置き換えます。この場合はMyAutomatorServiceとなります。
パブリックIPをONにします。
[ロードバランシング]で、ロード バランサーの種類として[Application Load Balancer]を選択します。
既存のロードバランサーを使用し、手順11で作成したautomatralbを選択します。
既存のリスナーを使用し、443:HTTPSリスナーを選択します。
既存のターゲットグループを使用し、手順10のターゲットグループを選択します。
ヘルスチェックのパスを/healthに設定します。
ヘルスチェックプロトコルをHTTPに設定します。
[作成]をクリックします。
数分後にサービスが起動します。
DNS名がRoute53によってホストおよび管理されていると仮定します。
Route53 > レコードの作成または編集に移動します。
Aレコードを作成します。
エイリアスとして設定します。
トラフィックを[アプリケーションおよびクラシックロードバランサーへのエイリアス]にルーティングします。
AWS地域を選択します。
automaticalbアプリケーションロードバランサーを選択します
[シンプルルーティング]を選択します。
[保存]を選択します。
次の手順では、タスクを1件だけ実行した状態でKeeperコマンダーを使用してオートメーターを設定します。
この時点ではサービスは実行されていますが、まだKeeperと通信できない状態です。
ご利用のワークステーション、サーバー、コンピューターのどれかにKeeperコマンダーCLIをインストールします。初期設定にのみ使用します。バイナリインストーラーを含むインストール手順についてはこちらをご覧ください。
コマンダーをインストールした後、keeper shell
と入力してセッションを開いてからlogin
コマンドを使用してログインします。オートメーターをセットアップするには、Keeper管理者またはSSOノードを管理する権限を持つ管理者としてログインする必要があります。
Keeperコマンダーにログインし、automator create
で始まる一連のコマンドを使用してオートメーターを有効にします。
ノード名 (この場合はAzure Cloud) は、以下のように管理コンソールUIから取得します。
コマンドの出力には、IDプロバイダからのメタデータを含むオートメーター設定が表示されます。
以下のようにautomator editコマンドを実行します。これによりURLとスキルが設定されます (team
、 team_for_user
、device
)。
次にキーを交換します。オートメーター公開キーで暗号化されたエンタープライズ秘密キーがオートメーターに提供されます。
新しい設定でオートメーターを初期化します。
サービスを有効にします。
この時点で設定は完了となります。
自動ヘルスチェックには以下のURLをご使用になれます。
https://<server>/health
以下はcurl
コマンドを使用した例です。
本セットアップ例では、ロードバランサーはHTTP ポート8089経由でターゲットインスタンスにヘルスチェックを転送します。
Keeperオートメーターが1件のタスクを実行した状態でデプロイされましたので、エンドユーザー体験のテストが可能となります。ユーザーがSSO IDプロバイダで認証した後は、承認を求めるプロンプトは必要なくなります。
最も簡単なテスト方法は、ブラウザでシークレットモードのウィンドウを開いてKeeperウェブボルトへアクセスし、SSOクラウドでログインすることとなります。デバイスの承認を求めるプロンプトは表示されなくなります。
承認が機能しましたので、実行するタスクの数を増やせます。
Keeperオートメーターサービスは、処理するリクエストの数が少ないため単一のコンテナ上で問題なく快適に実行できます。ただし、複数のコンテナを実行したい場合は以下の手順に従ってください。
ECSサービス画面からautomatorserviceをクリックします。
[サービスを更新]をクリックします。
[新規デプロイメントを強制]するのチェックボックスを選択します。
最新のタスクリビジョンが選択されていることを確かにします。
[必要なタスク]を実行したいコンテナの数に設定します。
[更新]をクリックします。
数分後、新しいコンテナがデプロイされます。すべてのコンテナがアクティブになるまで待ちます。
Keeperコマンダーを起動します (あるいはまだ開いたままである可能性があります)。
各コンテナーに対して、オートメーターセットアップ、初期化、有効化を実行する必要があります。
以下は3つのコンテナが実行されている場合となります。
オートメーターログは、ECSサービスの[ログ]タブまたはCloudWatchで検索およびモニターできます。