二要素認証を用いたホストログイン管理およびユーザ操作監査が可能なプロダクト「Bastionhost」のご紹介①
本記事では、Bastionhostについて検証しましたので、ご紹介します。
はじめに
Bastionhostは、Alibaba Cloudが提供するシステム運用保守(O&M)およびセキュリティ監査プラットフォームです。
Bastionhostプロダクトには以下の機能があります。
O&M操作の記録
- Linuxコマンド監査
- Windows操作の記録
- ファイル転送監査
アクセス制御
- アカウント管理
- 権限管理
セキュリティ認証
- 2要素認証(SMS認証や動的トークン)
- AD認証の同期
- LDAP認証の同期
Bastionhostはいわゆる踏み台サーバのような役割を果たし、Bastionhostでのログイン認証、アカウント管理、そしてBastionhostを介して接続したHostでの操作を記録します。
接続プロトコルはSSH、RDP、またはSFTPをサポートします。
クライアントはPuTTY、SecureCRT、XShell、WinSCP、MSTSCなどをサポートします。
今回はシンプルな構成を例にとり、Bastionhostを使用してみたいと思います。
検証の環境構成図
今回は以下の構成をとり、Bastionhostを検証していきます。
準備
Bastionhostインスタンスにバインドする以下のリソースを用意します。
・VPC ※Bastionhostインスタンスおよび管理化のリソースローンチのため、作成
・VSwitch ※Bastionhostインスタンスおよび管理化のリソースローンチのため、作成
・ECS ※Bastionhostインスタンスへの紐づけのため、作成
・Security Group ※※Bastionhostインスタンスおよび管理下のリソースへのアタッチのため、作成
BastionhostインスタンスはSecurity GroupとWhitelistが使用できます。
今回は空ルールのSecurity Groupのみ使用します。
※空ルールのSecurity GroupでもBastionhostインスタンスに接続が可能です。
以下はECSインスタンスのSecurity Groupとして作成します。
Bastionhostインスタンス配下のHostのSecurity Groupは
Bastionhostインスタンスからのインバウンド通信のみ許可します。
追加するBastionhostインスタンスのプライベートIPアドレスとグローバルIPアドレスはBastionhostインスタンスの「Egress IP」にマウスオーバーすると表示されるので、Bastionhostインスタンス作成後に各HostのSecurity Group追加します。
今回はSecurity Groupを以下のように設定しています。
Bastionhostインスタンスの作成
Bastionhostインスタンスを購入します。
インスタンス作成可能なリージョンは2020/8/20時点では以下になります。
・香港
・シンガポール
・マレーシア
・インドネシア
・インド
東京リージョンはありませんが、日本からも上記のリージョンにローンチされたBastionhostインスタンスに接続可能です。
Bastionhostインスタンスの初期化
Runを押下し、インスタンスのローンチ先VPCとVSwitch、Security Groupを指定し、初期化します。
初期化後、Manageを押下し、Bastionhostインスタンスの設定画面に遷移します。
今回使用するBastionhostの設定箇所全容
Bastionhostインスタンスが作成されたので、設定をしていきます。
設定箇所と設定の連動は以下の図のようになっております。
順番に設定していきます。
Host(ECS)の追加パターン1
既に作成しているECSを追加します。
Hosts画面で「Import ECS Instances」を押下します。
ECSがローンチしているリージョンを選択します。
複数選択可能です。
リージョンに所属するECSがすべて表示されるので、
Bastionhostインスタンスに紐づけるECSを選択し、「Import」を押下します。
Hosts画面に追加されます。
Host(ECS)の追加パターン2
Hosts画面から「Import Other Hosts」プルダウンの「Create Host」からもHostを追加できます。
ローンチしているECSの情報を入力します。
HostがBastionhostインスタンスのVPC内に存在しない場合は、
Bastionhostインスタンスからローカル通信でHostに到達できないので、パブリックIPアドレスを指定します。
Hostが追加されました。
Host(RDS)の追加
RDS専用クラスターホストもHostとして追加が可能です。
本ブログでは割愛します。
Host Groupの追加およびHostの紐づけ
Host Groups画面で「Create Host Group」を押下します。
ホストグループ名を入力します。
Host Groupが作成されました。
次にHost GroupにHostを追加します。
「Add Member」を押下し、Hostを追加します。
Host GroupにHostが追加されました。
RAMユーザ作成
BastionhostのユーザとしてRAMユーザを使用します。
そのため、まずはRAMユーザを作成します。
今回は管理者ユーザと一般ユーザ相当のRAMユーザを作成します。
※以下では管理者ユーザのみ作成していますが、同様の手順で一般ユーザも作成します。
パスワードと2要素認証を有効化します。
MFAデバイスを有効化します。
MFAデバイスにQRコードの読み込みまたは「Retrieve manually enter information.」タブのUser NameとKeyを入力します。
MFAデバイスは今回、chrome ウェブストアのAuthenticatorを使用しました。
認証が成功したことを確認します。
Userの追加
BastionhostインスタンスのUser画面で「Import RAM User」を押下し、RAMコンソールで作成したRAMユーザをインポートします。
RAMコンソールで作成したRAMユーザが表示されますので、
作成したRAMユーザをチェックボックス押下で選択し、importを行います。
RAMユーザが追加されたことを確認します。
User Groupの追加およびUserの紐づけ
User Groupを作成します。
User Groupを作成することでHostへのユーザ割り当てがまとめてできるので、
ユーザ増減時の対応スピード向上のメリットがあります。
今回は全RAMユーザが所属するAll_Usersと管理者だけが所属するAdministratorsを作成します。
「Create User Group」を押下し、User Groupを作成します。
ユーザグループ名を入力します。
User Groupが作成されました。
作成されたUser Groupを押下し、詳細画面に遷移します。 MembersタブでAdd Memberを押下し、ユーザを追加します。
User Groupに所属させるUserを選択し、Addを押下します。
User GroupにUserが所属しました。
ログイン許可ユーザの設定
Userに対してどのHostにログイン許可を与えるかを設定します。
以下の図の赤枠の部分となります。
User Groups画面で「Authorize Host Groups」を押下します。
User GroupにHost Groupに紐づけます。
「Authorized Host Group」タブで「Authorize Host Groups」ボタンを押下します。
紐づけるHost Groupを選択し、OKを押下します。
User GroupとHost Groupが紐づけられました。
Host内OSユーザの認証
BastionhostインスタンスのUserがHostにログインする際に使用するHostのOSユーザの認証を行います。
Hosts画面で各インスタンスの詳細画面でOSユーザの認証を行います。
OSユーザの認証は1ホストずつでもまとめてでも可能です。
今回は1ホストずつログインユーザの認証を行います。
インスタンスを押下します。
「Host Account」タブの「Create Host Account」を押下します。
接続プロトコルとユーザ、パスワードを入力し、「Verify」を押下し、有効かどうかチェックします。
問題ない場合は「The verification is successful.」がポップアップします。
Host Accountsが追加されました。
補足となりますが、OSユーザの認証はパスワードだけでなく、SSH Private Keyでの認証も可能です。
UserごとのHostログイン時OSユーザの設定
BastionhostインスタンスのUserがHostにログインする際に使用するHostのOSユーザの設定を行ったため、次にHostにそのOSユーザを割り当てます。
「UsersまたはUser Groups」で目的のUser/User GroupのAction列、「Authorize HostsまたはAuthorize Host Groups」を押下します。
「Authorized Host Groups」のAuthorized Accounts列「None. Authorize accounts」を押下します。
OSユーザを入力します。
OSユーザが設定されました。
これでHostに接続可能となります。
ログイン時の見え方
接続先は以下になります。
Bastionhostコンソールか、BastionhostインスタンスのManage画面で確認可能です。
IPアドレスでも接続可能です。
Bastionhostコンソールで「Egress IP」にマウスオーバーすると「グローバルIPアドレスとプライベートIPアドレス」が表示されます。
また、今回の構成では管理者と一般ユーザでアクセス範囲を分け、アクセス制限を以下としました。
Windowsへの接続
Windowsでmstsc.exeを実行し、Bastionhostインスタンスに接続します。
※デフォルトポートは63389になります。変更可能です。
ユーザとパスワードの認証画面が表示されます。
ここではBastionhostインスタンスでUserとして登録したRAMユーザを入力します。
パスワードもRAMユーザ作成時のパスワードになります。
※キーボード操作のみ有効となります。
ユーザおよびパスワードが正しい場合、MFAの認証画面が表示されます。
ここではBastionhostインスタンスでUserとして登録したRAMユーザのMFAを使用し、MFA認証を行います。
※キーボード操作のみ有効となります。
接続先Hostを選択します。
※キーボード操作のみ有効となります。
Host(ECS)にログインしました。
Linux
PuTTYで接続します。
※デフォルトポートは60022になります。変更可能です。
ユーザ名、パスワード、MFAを入力します。
許可されたHostが表示されます。
ログインしました。
おわりに
今回はBastionhostインスタンスを介した同VPC内および別リージョンのECSに対しての接続や、
RAMユーザのMFAを利用したBastionhostインスタンスログイン時の2要素認証を行ってみました。
Bastionhostを利用することでユーザやグループごとのアクセス権限管理やキーペアやパスワードの管理、
踏み台サーバの保守、監視・記録ソフトの構築・導入などが不要となります。
ぜひBastionhostの導入をご検討頂ければ幸いです。