仮想プライベート・クラウド内のパブリック・フロントエンドとプライベート・バックエンド
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、独自の IBM Cloud® Virtual Private Cloud (VPC) を作成する手順を段階的に説明します。この VPC には複数のサブネットがあり、さらに各サブネット内には仮想サーバー・インスタンス (VSI) があります。 VPC は、共有クラウド・インフラストラクチャー上の独自のプライベート・クラウドであり、他の仮想ネットワークとは論理的に分離されています。
サブネットとは IP アドレスの範囲です。 単一のゾーンにバインドされ、複数のゾーンまたはリージョンにまたがることはできません。 VPC の目的のためのサブネットの重要な特性は、各サブネットは通常の方法で相互接続されると同時に、相互に分離できるということです。 サブネットの分離は、1 つ以上の仮想サーバー・インスタンスのインバウンドとアウトバウンドのトラフィックを制御するためのファイアウォールとして機能するセキュリティー・グループによって実現できます。
外部に公開する必要があるリソースに使用するサブネットを用意することをお勧めします。 アクセスが制限されていて、外部からの直接アクセスが禁止されているリソースは、別のサブネット内に置かれます。 そのようなサブネット上のインスタンスには、公的にアクセスできないようにするバックエンド・データベースやシークレット・ストアなどがあります。 VSI へのトラフィックを許可または拒否するためのセキュリティー・グループを定義することになります。
要約すると、VPC を使用してできることは以下のとおりです。
- ソフトウェア定義ネットワーク (SDN) を作成する
- ワークロードを分離する
- インバウンド・トラフィックとアウトバウンド・トラフィックを細かく制御する
目標
- 仮想プライベート・クラウドに使用できるインフラストラクチャー・オブジェクトを理解する。
- 仮想プライベート・クラウド、サブネット、サーバー・インスタンスの作成方法を学ぶ。
- セキュリティー・グループを適用してサーバーへのアクセスを保護する方法を知る。
{: caption="図
- 管理者 (DevOps) が、クラウド上に必要なインフラストラクチャー (VPC、サブネット、ルールを定義したセキュリティー・グループ、VSI) をセットアップします。
- インターネット・ユーザーが、フロントエンド上の Web サーバーに HTTP/HTTPS 要求を行います。
- フロントエンドは、保護されたバックエンドにプライベート・リソースを要求し、ユーザーに結果を提供します。
開始前に
仮想プライベート・クラウドとサブネットの作成
サーバーのセキュリティーを強化するには、サーバー上にデプロイされたアプリケーションに必要なポートへの接続のみを許可することをお勧めします。 このチュートリアルでは、アプリケーションは Web サーバーになるので、ポート 80 でのインバウンド接続を許可するだけで済みます。
ソフトウェアのインストールやオペレーティング・システムのアップグレードの実行などの保守タスクをこれらのサーバー上で実行するには、要塞ホストを経由することになります。 要塞ホストは、パブリック IP アドレスを使ってプロビジョンされ、SSH を介してアクセスできるインスタンスです。 一度セットアップすると、要塞ホストは、VPC にプロビジョンしたインスタンスに安全に接続するための踏み台サーバーとして機能します。
このセクションでは、VPC と要塞ホストを作成します。
このチュートリアルにはコンパニオン・シェル・スクリプトと Terraform テンプレートも含まれています。これらは、以下の UI で作成するリソースの生成に使用できます。 GitHubのリポジトリで入手できます。
- 「仮想プライベートクラウド」 ページに移動し 、「作成」 をクリックします。
- 「新規仮想プライベート・クラウド」 セクションで、以下のようにします。
- VPC の名前として vpc-pubpriv を入力します。
- 「リソース・グループ」 を選択します。
- オプションで、「タグ」 を追加してリソースを編成します。
- デフォルトのセキュリティー・グループ の 「SSH を許可」 と 「ping を許可」 のチェック・マークを外します。 後で SSH アクセスが保守セキュリティー・グループに追加されます。 要塞サーバーからの SSH アクセスを許可するには、保守セキュリティー・グループをインスタンスに追加する必要があります。 このチュートリアルでは、ping アクセスは必要ありません。
- 「サブネット」 で、ゾーン 1 のサブネットの名前を変更します。 鉛筆アイコンをクリックしてください。
- サブネットの固有名として vpc-secure-bastion-subnet と入力します。
- VPC リソース・グループと同じ リソース・グループ を選択します。
- その他の値はデフォルトのままにします。
- 保存 をクリックします。
- 「サブネット」 で、ゾーン 2 のサブネットの名前を変更します。 鉛筆アイコンをクリックしてください。
- サブネットの固有名として vpc-pubpriv-backend-subnet と入力します。
- VPC リソース・グループと同じ リソース・グループ を選択します。
- その他の値はデフォルトのままにします。
- 保存 をクリックします。
- 「サブネット」 で、ゾーン 3 のサブネットの名前を変更します。 鉛筆アイコンをクリックしてください。
- サブネットの固有名として vpc-pubpriv-frontend-subnet と入力します。
- VPC リソース・グループと同じ リソース・グループ を選択します。
- その他の値はデフォルトのままにします。
- 保存 をクリックします。
- 「仮想プライベート・クラウドの作成」 をクリックします。
サブネットが作成されたことを確認するには 、「サブネット」ページに移動し、ステータスが 「利用可能」 に変わるまで待ちます。
要塞セキュリティー・グループを作成して構成する
要塞のチュートリアルのこのセクションで説明されているステップに従って、セキュリティー・グループを作成し、要塞仮想サーバー・インスタンスに関するインバウンド・ルールを構成します。
要塞インスタンスを作成する
要塞のチュートリアルのこのセクションで説明されているステップに従って、要塞仮想サーバー・インスタンスを作成します。
保守アクセス・ルールを指定してセキュリティー・グループを構成する
要塞のチュートリアルのこのセクションで説明されているステップに従って、セキュリティー・グループ vpc-secure-maintenance-sg を作成します。 このセキュリティー・グループは、ソフトウェアのインストールやオペレーティング・システムの更新などの保守タスクを仮想サーバー・インスタンス上で実行する際に使用されます。
バックエンドのセキュリティー・グループおよび VSI の作成
このセクションでは、バックエンドのセキュリティー・グループと仮想サーバー・インスタンスを作成します。
バックエンド・セキュリティー・グループの作成
バックエンド・セキュリティー・グループは、バックエンド・サーバーに関するインバウンド接続とアウトバウンド接続を制御します。
バックエンドの新規セキュリティー・グループを作成するには、以下のようにします。
- 「ネットワーク」 下の 「セキュリティー・グループ」 を選択してから、「作成」 をクリックします。
- 名前として vpc-pubpriv-backend-sg を入力し、既に作成した VPC を選択します。
- VPC と同じリソース・グループを選択します。
- 「セキュリティー・グループの作成」 をクリックします。
このセキュリティー・グループを後で編集して、インバウンド・ルールとアウトバウンド・ルールを追加します。
バックエンド仮想サーバー・インスタンスの作成
新規に作成されたサブネットで仮想サーバー・インスタンスを作成するには、以下のようにします。
- 「サブネット」 の下にあるバックエンドサブネットをクリックします。
- 「接続されたインスタンス」 下の 「接続済みリソース (Attached resources)」 をクリックし、「作成」 をクリックします。
- インスタンスを構成するには、以下のようにします。
- 場所を選択し、後で同じ場所を再度使用するようにしてください。
- 「名前」 を vpc-pubpriv-backend-vsi に設定します。
- 先ほどと同じリソース・グループを選択します。
- 「イメージ」 で、 「イメージの変更」 をクリックします。 検索フィールドを使用して、 オペレーティング・システム として Ubuntu Linux を選択します。 イメージの任意のバージョンを選出できます。
- 「プロファイルの変更」 をクリックし、カテゴリーとして 「コンピュート」 を選択して、プロファイルとして cx2-2x4 (2 vCPUs および 4 GB RAM) を選択します。
- 「SSH 鍵」 を、先ほど作成した SSH 鍵に設定します。
- 「拡張オプション」 で、 「ユーザー・データ」 を以下のように設定します。
こうすると、単純な Web サーバーがインスタンス内にインストールされます。#!/bin/bash apt-get update apt-get install -y nginx echo "I'm the backend server" > /var/www/html/index.html service nginx start
- 「ネットワーキング」 で、作成した VPC を選択します。
- 「仮想ネットワーク・インターフェース」 が選択されており、 vpc-pubpriv-backend-subnet がサブネットとしてリストされていることを確認します。 そのサブネットの編集アイコンをクリックします。
- 最初に、 「ネットワーク接続および仮想ネットワーク・インターフェースの詳細 (Network attachment and virtual network interface details)」 で、 vpc-pubpriv-backend-subnet が選択されていることを確認します。 次へ をクリックします。
- デフォルト・セキュリティー・グループのチェック・マークを外し、vpc-pubpriv-backend-sg および vpc-secure-maintenance-sg にアクティブのチェック・マークを付けます。
- 「IP 構成」 ダイアログで、すべてをそのままにして、 「次へ」 をクリックします。
- 最後に、すべてを確認し、 「保存」 をクリックして終了します。
- 「仮想サーバー・インスタンスの作成 (Create virtual server instance)」 をクリックします。
フロントエンドのセキュリティー・グループおよび VSI の作成
バックエンドと同様に、フロントエンドの仮想サーバー・インスタンスとセキュリティー・グループを作成します。
フロントエンド・セキュリティー・グループの作成
フロントエンドの新規セキュリティー・グループを作成するには、以下のようにします。
- 「ネットワーク」下の 「セキュリティー・グループ」 をクリックしてから、「作成」 をクリックします。
- 名前として vpc-pubpriv-frontend-sg を入力し、既に作成した VPC を選択します。
- VPC と同じリソース・グループを選択します。
- 「セキュリティー・グループの作成」 をクリックします。
フロントエンド仮想サーバー・インスタンスの作成
新規に作成されたサブネットで仮想サーバー・インスタンスを作成するには、以下のようにします。
- 「サブネット」 の下にある「フロントエンドサブネット」をクリックします。
- 「接続されたインスタンス」 下の 「接続済みリソース (Attached resources)」 をクリックし、「作成」 をクリックします。
- インスタンスを構成するには、以下のようにします。
- 場所を選択し、後で同じ場所を再度使用するようにしてください。
- 「名前」 を vpc-pubpriv-frontend-vsi に設定します。
- 先ほどと同じリソース・グループを選択します。
- 「イメージ」 で、 「イメージの変更」 をクリックします。 検索フィールドを使用して、 オペレーティング・システム として Ubuntu Linux を選択します。 イメージの任意のバージョンを選出できます。
- 「プロファイルの変更」 をクリックし、カテゴリーとして 「コンピュート」 を選択して、プロファイルとして cx2-2x4 (2 vCPUs および 4 GB RAM) を選択します。
- 「SSH 鍵」 を、先ほど作成した SSH 鍵に設定します。
- 「拡張オプション」 で、 「ユーザー・データ」 を以下のように設定します。
こうすると、単純な Web サーバーがインスタンス内にインストールされます。#!/bin/bash apt-get update apt-get install -y nginx echo "I'm the frontend server" > /var/www/html/index.html service nginx start
- 「ネットワーキング」 で、作成した VPC を選択します。
- 「仮想ネットワーク・インターフェース」 が選択されており、 vpc-pubpriv-frontend-subnet がサブネットとしてリストされていることを確認します。 そのサブネットの編集アイコンをクリックします。
- 最初に、 「ネットワーク接続および仮想ネットワーク・インターフェースの詳細 (Network attachment and virtual network interface details)」 で、 vpc-pubpriv-frontend-subnet が選択されていることを確認します。 次へ をクリックします。
- デフォルトのセキュリティグループのチェックを外し、 vpc-pubpriv-frontend-sg と vpc-secure-maintenance-sg にチェックを入れます。
- 「IP 構成」 ダイアログで、すべてをそのままにして、 「次へ」 をクリックします。
- 最後に、すべてを確認し、 「保存」 をクリックして終了します。
- 「仮想サーバー・インスタンスの作成 (Create virtual server instance)」 をクリックします。
インスタンスが稼働中で 稼働中になったら、フロントエンド VSI vpc-pubpriv-frontend-vsi を選択し、 「仮想ネットワーク・インターフェースを使用したネットワーク接続 (Network attachments with Virtual network interface)」 までスクロールして、 eth0 の 3 つのドット・メニューから 「浮動 IP の編集」 を選択します。 「接続」 をクリックしてから、 「新規浮動 IP の予約」 をクリックし、名前として vpc-pubpriv-frontend-vsi-ip を使用します。 「予約」 を終了した後、新しく接続された IP を表示するためにページを最新表示しなければならない場合があります。
フロントエンドとバックエンドの間の接続のセットアップ
すべてのサーバーが実行されているので、このセクションでは、フロントエンド・サーバーとバックエンド・サーバーの間の通常の操作ができるように接続をセットアップします。
フロントエンド・セキュリティー・グループの構成
フロントエンド・インスタンスにはソフトウェアがインストールされていますが、構成が原因でまだ到達できません。
-
Web サーバーにまだアクセスできないことを確認するには、
http://<floating-ip-address-of-the-frontend-vsi>
を指す Web ブラウザー を開くか、以下を使用します。curl -v -m 30 http://<floating-ip-address-of-the-frontend-vsi>
最終的に、接続はタイムアウトになります。
-
フロントエンド・インスタンス上にインストールされている Web サーバーへのインバウンド接続を有効にするには、Web サーバーが listen しているポートを開く必要があります。
-
「ネットワーク」 セクションの 「セキュリティー・グループ」 にナビゲートして、vpc-pubpriv-frontend-sg をクリックします。
-
「ルール」 タブをクリックし、 「インバウンド・ルール」 の下で 「作成」 をクリックします。 以下の表のルールを追加します。これらは HTTP リクエストとPing(ICMP)の受信を許可します。
インバウンド・ルール プロトコル ソース・タイプ ソース 値 説明 TCP 任意 0.0.0.0/0 ポート 80-80 このルールを使用すると、任意の IP アドレスからフロントエンド Web サーバーに接続できます。 ICMP 任意 0.0.0.0/0 タイプ: 8 、コード: 空のままにする このルールを使用すると、フロントエンド・サーバーに任意のホストで ping できます。 -
次に、アウトバウンド ・ルールを追加します。 バックエンドのポートは、仮想サーバー上にインストールするソフトウェアに応じて異なります。 このチュートリアルでは、ポート 80 で listen する Web サーバーを使用します。 値については、下記の アウトバウンド・ルール の表を参照してください。
アウトバウンド・ルール プロトコル 宛先タイプ 接続先 値 説明 TCP セキュリティー・グループ vpc-pubpriv-backend-sg ポート 80-80 このルールを使用すると、フロントエンド・サーバーとバックエンド・サーバーとの間で通信できます。 -
http://<floating-ip-address-of-the-frontend-vsi>
でフロントエンド・インスタンスに再度アクセスして、Web サーバーのウェルカム・ページを表示します。
フロントエンドとバックエンドの間の接続のテスト
バックエンド・サーバーは、フロントエンド・サーバーと同じ Web サーバー・ソフトウェアを実行します。 これは、フロントエンドが呼び出す HTTP インターフェースを公開するマイクロサービスと見なすことができます。 このセクションでは、フロントエンド・サーバー・インスタンスからバックエンドへの接続を試みます。
-
仮想サーバーインスタンスのリストから、バシオンサーバーホスト (vpc-secure-bastion) のフローティングIPアドレスと、 フロントエンド(vpc-pubpriv-frontend-vsi) およびバックエンド(vpc-pubpriv-backend-vsi) サーバーインスタンスのプライベートIPアドレスを取得します。
-
ssh
を使用してフロントエンド仮想サーバーに接続します。ssh -J root@<floating-ip-address-of-the-bastion-vsi> root@<private-ip-address-of-the-frontend-vsi>
フロントエンドへの SSH は、要塞を経由し、vpc-secure-maintenance-sg がフロントエンド・インスタンスに接続されている場合のみ可能です。
-
バックエンド Web サーバーを呼び出します。
curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
30 秒後に呼び出しがタイムアウトになります。 実際に、バックエンド・サーバーのセキュリティー・グループはまだ構成されておらず、インバウンド接続は許可されていません。
バックエンド・セキュリティー・グループの構成
バックエンド・サーバーへのインバウンド接続を許可するには、関連付けられているセキュリティー・グループを構成する必要があります。
-
「ネットワーク」 セクションの 「セキュリティー・グループ」 にナビゲートして、vpc-pubpriv-backend-sg をクリックします。
-
「ルール」 タブをクリックし、 「インバウンド・ルール」 の下で 「作成」 をクリックします。 以下のルールを追加します。
インバウンド・ルール プロトコル ソース・タイプ ソース 値 説明 TCP セキュリティー・グループ vpc-pubpriv-frontend-sg ポート 80-80 このルールを使用すると、フロントエンド・サーバーからバックエンド・サーバーへのポート 80 での着信接続が可能になります。
接続の確認
- フロントエンド・サーバーからバックエンド Web サーバーを再度呼び出します。
curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
- 即時に要求が戻り、バックエンド Web サーバーから
I'm the backend server
というメッセージが出力されます。 これで、サーバー間の接続の構成が完了しました。
保守の完了
フロントエンドとバックエンドのサーバー・ソフトウェアが正しくインストールされて機能しているので、保守セキュリティー・グループからそれらのサーバーを削除できます。
- 「ネットワーク」 セクションの 「セキュリティー・グループ」 にナビゲートして、vpc-secure-maintenance-sg をクリックします。
- 「接続されたリソース」 を選択します。
- 「インターフェースの編集 (Edit interfaces)」 をクリックし、展開して vpc-pubpriv-frontend-vsi インターフェースと vpc-pubpriv-backend-vsi インターフェースのチェック・マークを外します。
- 構成を 保存 します。
http://<floating-ip-address-of-the-frontend-vsi>
でフロントエンド・インスタンスに再度アクセスして、期待どおりに動作していることを確認します。
保守グループから削除されたサーバーへは、ssh
を使用してアクセスすることができなくなります。 それらの Web サーバーへのトラフィックのみ許可されます。
このチュートリアルでは、パブリック・インターネットから可視化されているフロントエンド・サーバーと、VPC 内に限りフロントエンド・サーバーからアクセスできるバックエンド・サーバーという、アプリケーションの 2 つの層をデプロイしました。 アプリケーションに必要な特定のポートに限りトラフィックが許可されるように、セキュリティー・グループ・ルールを構成しました。
リソースを削除する
- VPCインフラストラクチャコンソールで 、「ネットワーク」 の下の 「フローティングIP」 をクリックし、次にVSIのIPアドレスをクリックし、アクションメニューで 「リリース」 を選択します。 IP アドレスを解放することを確認します。
- 次に、「仮想サーバー・インスタンス」 に切り替え、インスタンスを 停止 してから 削除 します (それぞれ対応するアクション・メニューをクリックしてください)。
- VSI が表示されなくなったら、「サブネット」 に切り替えます。 サブネットにパブリック・ゲートウェイが接続されている場合は、サブネット名をクリックします。 「サブネットの詳細」でパブリック・ゲートウェイを切り離します。 パブリック・ゲートウェイのないサブネットは、概要ページで削除できます。 サブネットを削除します。
- サブネットが削除されたら、「VPC」 タブに切り替えて、VPC を削除します。
コンソールの使用時、リソース削除後の更新された状況情報を確認するためには、ブラウザーを最新表示しなければならない場合があります。