要塞ホストを使用してリモート・インスタンスにセキュアにアクセスする
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、Virtual Private Cloud (VPC)内のリモートインスタンスに安全にアクセスするためのバスターホストの展開について説明します。 要塞ホストは、パブリック IP アドレスを使ってプロビジョンされ、SSH を介してアクセスできるインスタンスです。 一度セットアップされると、バスターホストはジャンプサーバー として機能し、パブリックIPアドレスなしでプロビジョニングされたインスタンスへのセキュアな接続を可能にします。
VPC内のサーバーへのアクセスを制限するために、バスターホストを作成して使用します。 個々のサーバーに対する管理用タスクを、SSH を使用して、要塞を介して実行します。 サーバーへのアクセスおよびサーバーからの通常のインターネット・アクセス (例えば、ソフトウェアのインストールのためなど) は、それらのサーバーに特別な保守セキュリティー・グループが関連付けられている場合にのみ許可されます。
目標
- 要塞ホストと、ルールを指定したセキュリティー・グループをセットアップする方法を学ぶ。
- 要塞ホストを介してサーバーをセキュアに管理する。
{: caption="図
- クラウド上に必要なインフラストラクチャ(サブネット、ルール付きセキュリティグループ、仮想サーバーインスタンス)をセットアップした後、管理者 DevOps はプライベートSSHキーを使用して、バスターホストに(SSH)接続します。
- 管理者が保守セキュリティー・グループに適切なアウトバウンド・ルールを割り当てます。
- 管理者が要塞ホストを介してインスタンスのプライベート IP アドレスにセキュアに接続 (SSH) し、必要なソフトウェア (Web サーバーなど) をインストールまたは更新します。
- インターネット・ユーザーが Web サーバーに HTTP/HTTPS 要求を送信します。
開始前に
要塞ホストを作成する
このセクションでは、独立した 1 つのサブネット内に要塞ホストとセキュリティー・グループを作成して構成します。
サブネットの作成
-
左側のペインの 「ネットワーク」 にある 「サブネット」 をクリックし、「作成」 をクリックします。
- 「ロケーション」 で、地域、地域、およびゾーンを選択します。
- 名前に vpc-secure-bastion-subnet と入力してから、作成した仮想プライベート・クラウドを選択します。
- VPCと同じリソースグループを選択します。
- アドレスのプレフィックスはそのままにして、 総 IP アドレス数を 256 に設定します。
-
「パブリック・ゲートウェイ」 を 「接続済み」 に切り替えます。
パブリック・ゲートウェイをサブネットに接続して、すべての接続リソースがパブリック・インターネットと通信できるようにします。
-
「サブネットの作成」 をクリックしてサブネットをプロビジョンします。
要塞セキュリティー・グループを作成して構成する
セキュリティグループを作成し、バスターVSI(仮想サーバーインスタンス)への受信ルールを設定しましょう。
-
「ネットワーク」 下の 「セキュリティー・グループ」 を選択してから、「作成」 をクリックします。
-
名前に vpc-secure-bastion-sg と入力してから、先ほど作成した VPC を選択します。
-
VPCと同じリソースグループを選択します。
-
ここで、インバウンド・セクションの 「追加」 をクリックして、以下のインバウンド・ルールを作成します。 SSH アクセスと ping (ICMP) を許可するルールです。 値は下記の表に示しています。
要塞: インバウンド・ルール プロトコル ポート/値 ソース・タイプ TCP ポート範囲: 22-22 任意 ICMP タイプ: 8 、コード: 空のままにする 任意 さらにセキュリティーを強化するために、インバウンド・トラフィックを会社のネットワークまたは一般的なホーム・ネットワークに制限することができます。
curl ipecho.net/plain ; echo
を実行してネットワークの外部 IP アドレスを取得し、代わりにそれを使用することができます。 -
「セキュリティー・グループの作成」 をクリックして作成します。
要塞インスタンスを作成する
サブネットとセキュリティー・グループの準備が完了したら、次は、要塞仮想サーバー・インスタンスを作成します。
- 左側のペインの 「サブネット」 で vpc-secure-bastion-subnet を選択します。
- 「Attached resources(添付リソース)」 をクリックし 、「Attached instances(添付インスタンス)」 の下にある 「Create(作成)」 をクリックして、サブネットと同じリソースグループの下に 「vpc-secure-bastion-vsi」 という新しい仮想サーバーをプロビジョニングします。
- 場所を選択し、後で同じ場所を再度使用するようにしてください。
- 「イメージ」 で、 「イメージの変更」 をクリックします。 検索フィールドを使用して、 オペレーティング・システム として Ubuntu Linux を選択します。 イメージの任意のバージョンを選出できます。
- 「プロファイルの変更」 をクリックし、カテゴリーとして 「コンピュート」 を選択して、プロファイルとして cx2-2x4 (2 vCPUs および 4 GB RAM) を選択します。
- 新しい SSH鍵を作成するには、 [新しい鍵] をクリックします
- 鍵の名前として vpc-ssh-key と入力します。
- VSIと同じリソースグループを選択します。
- 「リージョン (Region)」 はそのままにします。
- 既存のローカル SSH 鍵の内容をコピーして、「公開鍵」 に貼り付けます。
- 「SSH 鍵の追加」 をクリックします。
- スクロールして 「ネットワーキング」 下の VPC を選択します。
- 「仮想ネットワーク・インターフェース」 が選択されており、 vpc-secure-bastion-subnet がサブネットとしてリストされていることを確認します。 そのサブネットの編集アイコンをクリックします。
- 最初に、 「ネットワーク接続および仮想ネットワーク・インターフェースの詳細 (Network attachment and virtual network interface details)」 で、 vpc-secure-bastion-subnet が選択されていることを確認します。 次へ をクリックします。
- 「セキュリティー・グループ」 セクションの 「ネットワーク」 で、デフォルトのセキュリティー・グループのチェック・マークを外し、 vpc-secure-bastion-sg にマークを付けます。 次へ をクリックします。
- 「IP 構成」 ダイアログで、すべてをそのままにして、 「次へ」 をクリックします。
- 最後に、すべてを確認し、 「保存」 をクリックして終了します。
- 仮想サーバーの作成をクリックします。
- インスタンスが起動して 実行中 になったら、 vpc-secure-bastion-vsi をクリックし、 「ネットワーク・インターフェース」 の下の 「編集」 アイコンをクリックし、 「浮動 IP アドレス」 の下で 「新規浮動 IP の予約」 を選択して、浮動 IP を 予約 します。 「保存」 をクリックして終了します。
要塞をテストする
要塞の浮動 IP アドレスがアクティブになったら、ssh を使用して接続してみてください。
ssh -i ~/.ssh/<PRIVATE_KEY> root@<BASTION_FLOATING_IP_ADDRESS>
保守アクセス・ルールを指定してセキュリティー・グループを構成する
要塞に正常にアクセスできたら、ソフトウェアのインストールや更新などの保守タスクのためにセキュリティー・グループの作成に進みます。
-
「ネットワーク」 下の 「セキュリティー・グループ」 を選択してから、「作成」 をクリックします。
-
名前に vpc-secure-maintenance-sg と入力してから、先ほど作成した VPC を選択します。
-
VPCと同じリソースグループを選択します。
-
次は、下記の表に示している インバウンド ・ルールを追加します。 これにより、要塞ホストからの SSH アクセスを許可します。
保守: インバウンド・ルール プロトコル ポート/値 ソース・タイプ ソース TCP ポート 22 から 22 セキュリティー・グループ vpc-secure-bastion-sg -
次に、以下の表に示している アウトバウンド ・ルールを追加します。 これにより、要塞ホストからの SSH アクセスを許可します。
保守: アウトバウンド・ルール プロトコル ポート/値 宛先タイプ TCP ポート 80-80 任意 TCP ポート 443-443 任意 TCP ポート 53-53 任意 UDP ポート 53-53 任意 DNS サーバーの要求はポート 53 に送られます。 DNS は、ゾーン転送に TCP を使用し、正引き (プライマリー) と逆引きの両方の名前照会に UDP を使用します。 HTTP 要求はポート 80 と 443 に送られます。
-
「セキュリティー・グループの作成」 をクリックして作成します。
-
「セキュリティー・グループ」 に移動し、vpc-secure-bastion-sg を選択します。
-
最後に、セキュリティー・グループを編集して、次の アウトバウンド ・ルールを追加します。
要塞: アウトバウンド・ルール プロトコル 宛先タイプ 宛先 ポート/値 TCP セキュリティー・グループ vpc-secure-maintenance-sg ポート 22-22
要塞ホストを使用して VPC 内の他のインスタンスにアクセスする
このセクションでは、サブネットと仮想サーバー・インスタンスおよびセキュリティー・グループを作成します。
接続先の VPC に仮想サーバー・インスタンスが既にある場合は、次の 3 つのセクションをスキップして、保守セキュリティー・グループへの仮想サーバー・インスタンスの追加から開始できます。
サブネットの作成
サブネットを新規作成するには、次のようにします。
- 左側のペインの 「ネットワーク」 にある 「サブネット」 をクリックし、「作成」 をクリックします。
- 名前に vpc-secure-private-subnet と入力してから、作成した VPC を選択します。
- VPCと同じリソースグループを選択します。
- ロケーション を選択します。
- アドレスのプレフィックスはそのままにして、 総 IP アドレス数を 256 に設定します。
- 「パブリック・ゲートウェイ」 を 「接続済み」 に切り替えます。
- 「サブネットの作成」 をクリックしてサブネットをプロビジョンします。
セキュリティー・グループの作成
セキュリティー・グループを新規作成するには、次のようにします。
- 「ネットワーク」下の 「セキュリティー・グループ」 をクリックしてから、「作成」 をクリックします。
- 名前に vpc-secure-private-sg としてから、前に作成した VPC を選択します。
- 「セキュリティー・グループの作成」 をクリックします。
仮想サーバー・インスタンスを作成する
新規に作成されたサブネットで仮想サーバー・インスタンスを作成するには、以下のようにします。
- 「サブネット」 では、以前に作成したサブネット vpc-secure-private-subnet をクリックします。
- 「接続されたインスタンス」 下の 「接続済みリソース (Attached resources)」 をクリックし、「作成」 をクリックします。
- インスタンスを構成するには、以下のようにします。
- 固有の名前 vpc-secure-private-vsi と、先ほどと同じリソース・グループを入力します。
- 要塞仮想サーバーで既に使用しているのと同じ 「ロケーション」 を選択します。
- 「パブリック」 タイプの仮想サーバーを選択します。
- 「イメージ」 で、 「イメージの変更」 をクリックします。 検索フィールドを使用して、 オペレーティング・システム として Ubuntu Linux を選択します。 イメージの任意のバージョンを選出できます。
- 「プロファイルの変更」 をクリックし、カテゴリーとして 「コンピュート」 を選択して、プロファイルとして cx2-2x4 (2 vCPUs および 4 GB RAM) を選択します。
- 「SSH 鍵」 で、要塞用に前に作成した SSH 鍵を選択します。
- さらに、作成した VPC を選択します。 上記と同様に、 「ネットワーク接続と仮想ネットワーク・インターフェースの詳細 (Network attachment and virtual network interface details)」 の下にある vpc-secure-private-subnet の編集アイコンをクリックします。
- 次に、 vpc-secure-private-subnet が選択されていることを確認します。 **「次へ」**をクリックします。
- 「ネットワーク」 の 「セキュリティー・グループ」 セクションで、デフォルトのセキュリティー・グループのチェック・マークを外し、 vpc-secure-private-sg にマークを付けます。 次へ をクリックします。
- 「IP 構成」 ダイアログで、すべてをそのままにして、 「次へ」 をクリックします。
- 最後に、すべてを確認し、 「保存」 をクリックして終了します。
- 仮想サーバーの作成をクリックします。
保守セキュリティー・グループへの仮想サーバー・インスタンスの追加
サーバー上で管理作業を行うには、特定の仮想サーバーを保守セキュリティー・グループに関連付ける必要があります。 以下では、保守を有効にしてプライベート・サーバーにログインし、ソフトウェア・パッケージ情報を更新してから、セキュリティー・グループの関連付けを解除します。
サーバーの保守セキュリティー・グループを有効にしましょう。
- 「セキュリティー・グループ」 に移動し、vpc-secure-maintenance-sg セキュリティー・グループを選択します。
- 「接続されたリソース」 タブをクリックし、フィルターで 「仮想サーバー・インターフェース」 を選択します。
- 「仮想サーバー・インターフェースの編集」 をクリックして、VSI のリストを表示します。 リストを展開し、 vpc-secure-private-vsi の 「インターフェース」 列の横にある選択を確認します。
- 「保存」 をクリックして、変更を適用します。
インスタンスに接続する
プライベート IP を使用してインスタンスに SSH 接続するには、要塞ホストを 踏み台ホスト として使用します。
-
左側のメニューの「コンピュート」セクションで 「仮想サーバー・インスタンス」 を選択します。 vpc-secure-private-vsi の Reserved IP (プライベート IP) アドレスをメモします。
-
-J
を使用して ssh コマンドを実行し、先に使用したバスターミナルフローティング IP アドレスと、今調べたサーバーのプライベート IP アドレスでサーバーにログインします。ssh -J root@<BASTION_FLOATING_IP_ADDRESS> root@<PRIVATE_IP_ADDRESS>
-J
フラグは、OpenSSH バージョン 7.3 以上でサポートされています。古いバージョンでは、-J
は使用できません。 この場合、最も安全で簡単な方法は、ssh の stdio 転送 (-W
) モードを使用して、要塞ホストを介して接続を「バウンス」することです。例:ssh -o ProxyCommand="ssh -W %h:%p root@<BASTION_FLOATING_IP_ADDRESS" root@<PRIVATE_IP_ADDRESS>
ソフトウェアをインストールして保守タスクを実行する
接続したら、仮想サーバーにソフトウェアをインストールしたり、保守タスクを実行したりできます。
- まずは、ソフトウェア・パッケージ情報を更新します。
apt-get update
- 目的のソフトウェア (Nginx、MySQL、IBM Db2 など) をインストールします。
完了したら、exit
コマンドを使用してサーバーから切断します。
インターネット・ユーザーからの HTTP/HTTPS 要求を許可するには、VSI に 浮動 IP を割り当て、プライベート VSI のセキュリティー・グループ内のインバウンド・ルールを介して必要なポート (HTTP 用は 80 および HTTPS 用は 443) を開きます。
保守セキュリティー・グループを無効にする
ソフトウェアのインストールまたは保守が完了したら、仮想サーバーを保守セキュリティー・グループから外して分離します。
- 「セキュリティー・グループ」 に移動し、vpc-secure-maintenance-sg セキュリティー・グループを選択します。
- 「接続されたリソース」 をクリックしてから、 「仮想サーバー・インターフェースの編集」 をクリックします。
- 仮想サーバーインスタンスを拡張し 、vpc-secure-private-vsi の インターフェース列の選択を解除します。
- 「保存」 をクリックして、変更を適用します。
ジャンプ・ホスト・オプションを指定して、上記から ssh
コマンドを繰り返すことができます。 今は失敗するはずだ。
リソースを削除する
- 「仮想サーバー・インスタンス」 に切り替え、インスタンスを 停止 してから 削除 します (それぞれ対応するアクション・メニューをクリックしてください)。
- VSI が表示されなくなったら、「サブネット」 に切り替えてサブネットを削除します。
- サブネットが削除されたら、「VPC」 タブに切り替えて、VPC を削除します。
コンソールの使用時、リソース削除後の更新された状況情報を確認するためには、ブラウザーを最新表示しなければならない場合があります。