KSMを使用したAWS Elastic Container サービス (高度な設定)
ECS (Fargate)サービスを使用してKeeperオートメーターを実行し、機密情報のストレージとして Keeperシークレットマネージャーを実行
概要
本ガイドでは、Fargateを使用してAmazon ECSでKeeperオートメーターサービスを起動する方法について解説しながら、公開されたDockerコンテナのシークレット設定を取得するためにKeeperシークレットマネージャーを使用する方法を解説します。
Keeperのセットアップ
本デプロイでは、Keeperシークレットマネージャーを使用する必要があるため、オートメーターサービスを公開するためにKeeperボルトおよびSSL証明書を設定するために必要な手順を確認します。
1. SSL証明書
こちらのページの説明に従ってSSL証明書を作成します。
この手順が完了すると、ssl-certificate.pfx
とssl-certificate-password.txt
の2つのファイルが作成されます。
2. 共有フォルダの作成
ボルト内に共有フォルダを作成します。このフォルダーは、シークレットマネージャーアプリケーション以外の誰にも共有されません。
3. 添付ファイルの追加
共有フォルダにレコードを作成し、レコードUIDをメモします。SSL証明書とSSL証明書パスワードファイルを共有フォルダのレコードにアップロードします。
4. オートメータープロパティファイルの追加
以下の内容のkeeper.propertiesという新しいファイルをアップロードします。
disable_sni_check=true
は、マネージドロードバランサーでオートメーターサービスを実行する場合に必要になります。
共有フォルダとレコードは以下のようになります。
5. KSMアプリケーションの作成
コンテナー内にKeeperシークレットマネージャー (KSM) アプリケーションを作成します。シークレットマネージャーをご使用でない場合は、こちらのガイドをご参照ください。アプリケーションの名前はオートメーターですが問題ありません。
6. KSMアプリケーションを共有フォルダに添付
共有フォルダを編集し、オートメーターアプリケーションをこのフォルダに追加します。
7. KSMデバイス設定の作成
シークレットマネージャーアプリケーションを開き、[デバイス]タブをクリックして、[デバイスの追加]をクリックします。Base64設定を選択します。この設定をダウンロードして保存し、ECSタスク定義で使用できるようにします。
AWSのセットアップ
1. VPCの作成
VPCが存在しない場合は、複数のサブネット、ルートテーブル、インターネットゲートウェイを持つ基本的なVPCをセットアップする必要があります。こちらの例では、以下のリソースマップに見られるように、インターネットゲートウェイを備えたVPC内に3つのサブネットが含まれています。
2. CloudWatchロググループの作成
[CloudWatch] > [ロググループの作成]に移動します。
ロググループをautomator-logsと名付けます。
3. タスク実行IAMロールの作成
[IAM] > [ロールの作成]へ行きます。
[AWSサービス]を選択します。
次に、Elastic Container Serviceを検索して選択します。
[Elastic Container Serviceタスク]を選択し、[次へ]をクリックします。
[AmazonECSTaskExecution]ポリシーをロールに追加し、[次へ]をクリックします。
ECSTaskWritetoLogsという名前を割り当てて、ロールを作成します。
このロールのARNをメモして次の手順で使用できるようにします。
本事例ではarn:aws:iam::373699066757:role/ECSTaskWritetoLogs
となります。
4. ECSのセキュリティグループを作成
[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
セキュリティグループを保存した後、受信ルールを再度編集します。今回はHTTPSポート443を追加し、ドロップダウンでセキュリティグループを選択します。これにより、ロードバランサーは状況を監視してトラフィックを分散できるようになります。
5. EFS用セキュリティグループの作成
クラスターからEFSへのNFSアクセスを制御する別のセキュリティグループを作成します。
[EC2] > [セキュリティ グループ]に移動し、[セキュリティグループの作成]をクリックします。
MyAutomatorEFSのように名前を設定します。
NFSのタイプを選択してカスタムを選択してから、ECSクラスターの前の手順で作成したセキュリティ グループを選択します。
[セキュリティグループの作成]をクリックします。
次の手順のためにセキュリティグループIDをメモしておきます。この場合はsgr-089fea5e4738f3898
となります。
6. 2つのElastic File Systemボリュームを作成
現在、オートメーターサービスは2つの異なるフォルダにアクセスする必要があります。本セットアップ例では、SSL証明書とSSLパスフレーズファイルを保存するために1つのボリュームを作成しています。2つ目のボリュームには、オートメーターサービスのプロパティファイルが保存されます。これら3つのファイルはKeeperのレコードに含まれています。
[AWS] > [Elastic File System]に移動し、[ファイルシステムの作成]をクリックします。
automator_configと名付けて、[作成]をクリックします。
再び[Elastic File System]に移動し、[Create file system]をクリックします。automator_settingsと名付けて[作成]をクリックします。
表示されるファイルシステムID (fs-xxxなど) は、ECSタスク定義で使用されます。
1 分後、2 つのファイルシステムが使用可能になります。それぞれをクリックしてから[ネットワーク]タブを選択し、[管理]をクリックします。
各サブネットのセキュリティグループを上記の手順で作成したもの (MyAutomatorEFSなど) に変更し、[保存]をクリックします。作成された両方のファイルシステムに同じネットワーク変更を加えます。
7. Elastic Container Serviceクラスターの作成
Amazon Elastic Container Serviceへ進みます。
[クラスターの作成]を選択し、クラスター名とVPCを割り当てます。 こちらの例では、デフォルトの[AWS Fargate (サーバーレス)]インフラストラクチャを使用しています。
デフォルトの名前空間はautomatorで問題ありません
[インフラストラクチャ]は AWS Fargate (サーバーレス) に設定します
[作成]をクリックします
8. ECSタスク定義の作成
任意のテキストエディタで、以下のJSONタスク定義ファイルをコピーして保存します。
JSONファイルに以下の変更を加えます。
本ガイドの冒頭で作成したKeeperシークレットマネージャーのXXXCONFIGXXX値をBase64設定に変更します。
3箇所あるXXXXXを、KSMがアクセスしているボルトの共有フォルダ内のSSL証明書、SSL証明書パスワード、設定ファイルが含間れるレコードUIDに変更します。
2つのファイルシステム ID (fs-XXX) を、上記の手順からのものに変更します。
ロールIDのXXXをAWSロールに固有のものに変更します。
2箇所のeu-west-1値を、ECSサービスの地域に変更します。
次に、[Elastic Container Service] > [タスク定義] > [JSONからタスクを作成]に移動します。
既存のJSONを削除し、変更したJSONファイルをボックスにコピーして貼り付けてから[作成]をクリックします。
このタスク定義は、インスタンスのCPU/メモリ要件に応じて変更できます。
9. SSL証明書をAWS Certificate Managerにアップロード
AWSのアプリケーションロードバランサーがオートメーターのリクエストに対応するには、SSL証明書が AWS Certificate Managerによって管理されている必要があります。
AWS Certificate Managerへ移動し、[インポート]をクリックします。
ご利用のワークステーション上でSSL証明書 (.pfx) ファイルを、 PEMエンコードされた証明書本体、PEMエンコードされた秘密キー、PEMエンコードされた証明書チェーンに変換する必要があります。
.pfxファイルはすでに存在するので以下のopensslコマンドを使用します。ssl-certificate.pfxファイルと証明書パスワードをワークステーションへダウンロードし、以下のコマンドを入力します。
PEMエンコードされた証明書本体の生成
PEMエンコードされた秘密キーの生成
PEMエンコードされた証明書チェーンの生成
3つのファイルの内容を画面へコピーします。
10. ターゲットグループの作成
[EC2] > [ターゲットグループ]に移動し、[ターゲットグループの作成] をクリックします。
ターゲットの種類として[IPアドレス]を選択します。
ターゲットグループ名にautomatortargetgroupまたは任意の名前を入力します。
ポート443のHTTPプロトコルを選択します。
ECSクラスターを含むVPC を選択します。
HTTP1を選択します。
[ヘルス チェック] で、ヘルスチェックプロトコルとして[HTTPS]を選択します。
ヘルスチェックのパスとして
/health
と入力します。[次へ]をクリックします。
まだターゲットを選択せずに[ターゲットグループの作成]をクリックします。
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となります。
パブリックIPはONにします。
[ロードバランシング]で、ロード バランサーの種類として[Application Load Balancer]を選択します。
既存のロードバランサーを使用し、手順11で作成したautomatralbを選択します。
既存のリスナーを使用し、443:HTTPSリスナーを選択します。
既存のターゲットグループを使用し、手順10のターゲットグループを選択します。
[作成]をクリックします。
数分後にサービスが起動します。
13. DNSの更新
DNS名がRoute53によってホストおよび管理されていると仮定します。
Route53 > レコードの作成または編集に移動します。
Aレコードを作成します。
エイリアスとして設定します。
トラフィックを[アプリケーションおよびクラシックロードバランサーへのエイリアス]にルーティングします。
AWS地域を選択します。
automaticalbアプリケーションロードバランサーを選択します。
[シンプルルーティング]を選択します。
[保存]を選択します。
次の手順では、タスクを1件だけ実行した状態でKeeperコマンダーを使用してオートメーターを設定します。
14. Keeperコマンダーのインストール
この時点ではサービスは実行されていますが、まだKeeperと通信できない状態です。
ご利用のワークステーション、サーバー、コンピューターのどれかにKeeperコマンダーCLIをインストールします。初期設定にのみ使用します。バイナリインストーラーを含むインストール手順についてはこちらをご覧ください。
コマンダーをインストールした後、keeper shell
と入力してセッションを開いてからlogin
コマンドを使用してログインします。オートメーターをセットアップするには、Keeper管理者またはSSOノードを管理する権限を持つ管理者としてログインする必要があります。
15. コマンダーでの初期設定
Keeperコマンダーにログインし、automator create
で始まる一連のコマンドを使用してオートメーターを有効にします。
ノード名 (この場合はAzure Cloud) は、以下のように管理コンソールUIから取得します。
コマンドの出力には、IDプロバイダからのメタデータを含むオートメーター設定が表示されます。
以下のようにautomator editコマンドを実行します。これによりURLとスキルが設定されます (team
、 team_for_user
、device
)。
次にキーを交換します。オートメーター公開キーで暗号化されたエンタープライズ秘密キーがオートメーターに提供されます。
新しい設定でオートメーターを初期化します。
サービスを有効にします。
この時点で設定は完了となります。
自動ヘルスチェックには以下のURLをご使用になれます。
https://<server>/health
以下はcurl
コマンドを使用した例です。
本セットアップ例では、ロードバランサーがターゲットインスタンスにヘルスチェックを転送します。
16. ユーザー体験のテスト
Keeperオートメーターが1件のタスクを実行した状態でデプロイされましたので、エンドユーザーの体験をテストできます。ユーザーがSSO IDプロバイダで認証した後は、承認を求めるプロンプトは必要なくなります。
最も簡単なテスト方法は、ブラウザでシークレットモードのウィンドウを開いてKeeperウェブボルトへアクセスし、SSOクラウドでログインすることとなります。デバイスの承認を求めるプロンプトは表示されなくなります。
承認が機能しましたので、実行するタスクの数を増やせます。
17. タスク定義の更新
ECS画面からオートメーターサービスを開き、[サービスの更新]をクリックします。次に、実行するタスクの数を設定します。
ログとモニター
オートメーターログは、ECSサービスの[ログ]タブまたはCloudWatchで検索およびモニターできます。
最終更新