IBM Cloud 的には特別目新しいサービスではないのですが、リモートワーク時代に向いているサービスだと思ったので、改めてその視点で紹介させていただきます。

新型コロナウィルス流行の影響もあり以前よりもリモートワークが広まっています。中にはリモートワークの需要はあるんだけど、リモートから社内システムを利用するための環境構築ができなかったり、料金的な問題があったりして実現できずにいる人や組織もあると思っています。一般的には VPN(Virtual Private Network) と呼ばれる仕組みを導入して、社内システムを安全な形で外部に公開して利用する、という方法が多く用いられていると思っていますが、この「安全な形で外部に公開」するのは単純ではなく、リモートワークする人も専用のソフトウェアを導入&設定する必要があったり、想定する利用量の規模に合わせて専用のサーバーを1台以上追加する必要があり、その見積もりも簡単ではありません。本格的に利用しようとすると、この追加コストだけでもかなりの額になってしまい、結局二の足を踏まざるを得なくなっているケースもあると思います。

そんな要望に対して IBM Cloud からは SecureGateway と呼ばれるサービスが提供されています。通信用のサーバーは1台必要ですが、VPN とは異なる形で社内システムを外部公開することができ、リモートワークする人から見ても(専用ソフトウェアの導入&設定無しで)ほぼそのまま使うことができます。とりあえず実験的に社内の1つのシステムを公開するだけであれば(1ヶ月 500MB という通信量の制約はありますが)無料で試してみることができます。リモートワークの需要は今後も増えることが予想されるので、特に中小企業向けの小規模利用であれば安価に構築できる環境として紹介します:
2021101600


※SecureGateway は「非推奨」サービスという扱いになっていますが、この社会事情も含めて考慮され、現時点では少なくとも 2022 年6月まではサービス継続することがアナウンスされています。


【SecureGateway の仕組み】
まず、このブログエントリで説明する内容の中で想定しているユースケースを紹介します。企業内や自宅内などにネットワークが構築されていて、そのネットワークに接続している状態からであれば利用できるシステム(=これを「機密システム」と呼ぶことにします)があると想定します。機密システムには機密情報の含まれるデータベースや、それらを業務で扱うウェブアプリケーションなどがあります。 問題になるのはこのシステムが(もともとプライベートネットワークアドレスで構築された環境内に存在しているなどの理由で)社内ネットワーク向けに構築されていて、一般的なインターネットからは利用できない状態にあり、そのためそのままリモートワークへ移行できない、というケースです:
2021101501


このような環境でインターネットからのアクセスをさせようとすると、一般的には VPN(Virtual Private Network) という仕組みを構築します。専用の VPN サーバーを内部ネットワーク内に構築し、VPN サーバーへだけはファイアウォールやパケットフィルタリングを通す設定にしたうえで、インターネットから利用する各 PC に VPN クライアントをインストールして、目的の VPN サーバーに接続するための設定をします。これによって各 PC は VPN サーバーを経由してインターネットからでも「仮想的にプライベートネットワーク(Virtual Private Network)内にいるかのような状態」を作り出すことができ、社内の機密システムにアクセスすることができるようになります:
2021101502


ただこの方法には課題もいくつかあります。主なものとしては以下に挙げるものです:
・新たにサーバーを用意した上で、VPN サーバー機能を構築する必要がある
・VPN サーバーだけはインターネットからアクセスできる状態にする必要があるため、事前にファイアウォールやパケットフィルタリングで許可する必要がある
・インターネットから利用する全ユーザー(正確には全 PC)に VPN クライアントをインストールして、VPN サーバーに接続するための設定を行う、という手間がかかる
・VPN クライアントを導入する PC の台数や利用頻度にもよるが、VPN サーバーや社内ネットワーク、社内とインターネットを繋ぐネットワークは全ての VPN クライアントからの接続を処理することができるだけのスペックが必要になる。この見積も難しく、環境を構築した後に問題が発生すると改めて再設計が求められる可能性もある


簡単に言ってしまうと、仕組みの肝となる VPN サーバーを自分で用意する必要があるため、「充分な性能を用意しておく」という見積段階から用意する側の責任範囲となってしまうことにあります(とはいえ VPN の仕組み上、VPN サーバーは接続先である社内に用意する必要があります)。また各 PC 1台ごとに接続のための設定を行うのも面倒です。


一方、今回紹介する IBM Cloud の SecureGateway (以降 "SG" と表記します)は似た概念ですが、この「VPN の面倒な部分」を大幅に簡易化したものです。スペック見積もりから面倒なサーバー部分は IBM Cloud がサービスインスタンスとして用意するので、クライアント増加による負荷対策を考慮する必要はありません(値段は変わりますけどw)。社内に専用のマシン(SG クライアント)を用意する必要がある点は VPN と同じですが、こちらは docker イメージが提供されていて、社内に docker 環境があれば "docker run" だけで簡単に構築できます。

そして個人的に最大のアドバンテージだと思う2つの点があります。1つは利用量の制約(1か月に 500MB 以内の通信)がありますが、機密システムが1つだけであれば無料で環境構築できること、もう1つは、接続 PC 個別に(VPN クライアントに相当するような)専用の設定を行う必要がなく、IBM Cloud 経由でそのまま社内の機密システムにアクセスできるようになる、という2点です:
2021101503


以下ではこの環境を構築する例として「社内ネットワークに接続したラズベリーパイに社外から SSH で接続する」ための設定手順を紹介します。「ラズベリーパイに SSH 接続」する部分はあくまで例※であり、「社内のある機密システムを利用」すると読み替えていただくとより実像がイメージしやすいかもしれません。

※1つの例であることはその通りですが、一般的な Windows でも Linux でもなければ、HTTP サーバーでもない、という意味では比較的特殊なシステムと考えることができ、それでも接続できることを示した例といえます。
2021101504





【SecureGateway の準備】
実際にこの例で SecureGateway を使って機密システムにアクセスできるようにするまでの手順を紹介します。設定手順は大きく3段階ですが、いずれも専門の知識を必要とするものではなく、docker 環境さえあれば②も簡単に実現できます(docker を使わない場合は SG クライアントに相当するアプリケーションをダウンロード&インストールする必要があります):

①IBM Cloud 内に SG サービスインスタンスの作成
②社内ネットワークに SG クライアントの用意
③どの機密システムを利用するか、の設定

2021101505


では3つの段階を順に説明します。まずは①の「SG サービスインスタンスの作成」です:
2021101506




SecureGateway は IBM Cloud から提供されているサービスですが、無料の(アカウント作成時にクレジットカードを登録しない)ライトアカウントでは利用できません。SG 自体は無料でも利用できますが、ライトアカウントでは使えない、という点に注意してください。必要に応じてクレジットカードを登録するなどして、通常アカウントの権限で以下を作業する必要があります。

改めて通常アカウントで IBM Cloud にログインし、「リソースの作成」から "Secure Gateway" を検索して選択します:
2021101507


2021101508


利用プランが選択できますが、"Essential" プランを選択すると料金はかかりません(ただし接続先は1つのみ、一ヶ月間の通信データ量は 500MB 以下という制約があります)。最後に「作成」でサービスインスタンスを作ります。
2021101501


以下のような画面になれば SG のインスタンスが作成されたことになります。簡単でしたね:
2021101502


続いて②の SG クライアントを作成します。こちらは社内ネットワーク内に準備する必要があります:
2021101501


まずは①で作成した SG インスタンスの画面で「ゲートウェイの追加」をクリックします:
2021101502


ゲートウェイの名前を適当に入力して(下図では「自宅ネットワーク」)、「ゲートウェイの追加」ボタンをクリックします:
2021101503


以下のような画面になればゲートウェイが準備できました。ただ、この時点ではまだ①の SG インスタンス側に接続の準備ができただけで、社内ネットワークとは接続できていません(画面右上に赤いアイコンが表示されているのが未接続を意味しています)。社内ネットワーク側の準備をするために「クライアントの接続」をクリックします:
2021101504


以下のような画面が表示され、社内ネットワーク側で行う必要のある SG クライアントの準備手順が表示されます。SecureGateway では SG クライアントを以下の3種類から選ぶことができ、それぞれの手順が表示されています:
 - 専用アプリケーション(社内ネットワークに接続された PC にダウンロードしてインストール)
 - docker コンテナ(社内ネットワークに接続された docker エンジンで実行)
 - 専用ハードウェア(社内ネットワークに追加設置)
2021101505


本ブログエントリでは最も手軽と思われる docker コンテナを使った方法を紹介します。docker アイコンを選択すると、社内の docker エンジンで実行するためのコマンド(1行!)が表示されるので、この内容をコピーします:
2021101506


コピーした内容を社内の機密システムと同じネットワーク上で稼働する docker エンジン環境で実行します。

なお、先ほどの画面で表示されていた内容は
 $ docker run -it ibmcom/secure-gateway-client XXXXX

という内容でしたが、私が確認した環境では、
 $ docker run --net=host -it ibmcom/secure-gateway-client XXXXX

と、"--net=host" というオプションを付けないと正しく実行できませんでした。念のため記載しておきます:
2021101507


docker コンテナが正しく実行されると、画面に "Your Client ID is XXXXXX" と表示されます。この段階で SG クライアントも起動し、SG インスタンスとの接続も完了しています:
2021101508


念のため IBM Cloud 内の SecureGateway ダッシュボード画面を確認すると、クライアントが追加され、正常を示す緑色のアイコンが表示されているはずです:
2021101509


これで①と②が用意できました。続けて③の、具体的な機密システムまでの接続作業を行います。①、②ほど簡単ではありませんが、作業は個別のシステム内容に合わせて順に実行していくだけなのでそれほど難しいことはないと思っています:
2021101501


SG ダッシュボード画面で、まだクライアントを選択していない場合はこのタイミングで選択しておきます:
2021101502


SG クライアントが選択された状態になりました。ここで「宛先(0)」と表示されていることを確認します(登録されている機密システムが0個、という意味です)。ここに新しい機密システムを追加するため、宛先(0) のタブを選択後にプラスのアイコンをクリックします:
2021101503


「宛先の追加」ダイアログが表示され、この画面の質問に答えていく形で宛先を追加できます。まずは「ガイド付きセットアップ」が選択されていることを確認し、リソースの場所として(今回は社内ネットワーク内のラズベリーパイに接続することが目的なので)「オンプレミス」を選択し、「次へ」をクリックします:
2021101504


次に具体的な接続先の IP アドレスとポート番号を指定します。今回の例ではラズベリーパイへ SSH 接続することが目的なので、該当ラズベリーパイの IP アドレスと、SSH のポート番号を指定します。SSH ポート番号は通常 22 ですが、意図的に変更している場合は変更後のポート番号を指定します。

※ここでプライベート IP アドレスである 192.168.xx.xx というアドレスを指定している点に注目してください。プライベートネットワーク内の、プライベート IP アドレスを指定しているので、通常の方法ではインターネットからアクセスすることはできないシステムを指定しています。 また対象システムもウェブアプリケーションだったり、データベースだったり、ホストコンピュータだったり、いろんなパターンがあると思いますが、いずれの場合も IP アドレスおよびポート番号(対象によっては認証の仕組みも)を正しく指定できることが必要です。

その後「次へ」をクリックします:
2021101505


機密システムへ接続する際に用いるプロトコルを指定します。今回は SSH への接続なので「TCP」を選択します(機密システムがウェブアプリケーションであれば HTTP を選択するなど、実際の接続先に合わせて選んでください)。その後「次へ」をクリックします:
2021101506


次の画面で接続に利用する認証方式を選択します。今回の例では不要なので「None」を選択しましたが、ここも実際の接続先に合わせて選択します。「次へ」をクリック:
2021101507


設定後、この仕組みを利用可能な PC に IP アドレス指定をかけることが可能です。制約をかける場合はこの画面で対象 PC の IP アドレスを指定して追加します。特に不要であればそのままでも構いません。「次へ」をクリックします:
2021101508

※例えば機密のデータベースシステムを公開して、特定のパブリックなウェブアプリケーションから利用するような場合であれば、データベースそのものは誰でも使えるような形にはせず、対象のウェブアプリケーションサーバーからしか接続できないようにしたい、といった場合にそのウェブアプリケーションサーバーの IP アドレスを指定する、といった形で制約をかけます。


最後にこの宛先に名前を付けて保存します。下図の例では「ラズパイSSH」という名前を指定しています。そして「宛先の追加」をクリックします:
2021101501


1つ前の画面に戻り、指定した名前の宛先が追加されたことが確認できます。ただこの時点ではまだ宛先の右上に赤い印が表示されていて、接続許可が足りないことがわかります:
2021101502


というわけで、同機密システムへの接続許可を SG クライアントに指定します。docker 画面を再び表示して、以下のように(2回にわけて)入力します:
> A 192.168.0.101:22 1

> S

A(allow) コマンドに続けて 宛先のIPアドレス:宛先のポート番号 1 を指定します(最後の1はワーカーIDと呼ばれるもので、ここは1を指定します)。そして S(show) コマンドで設定内容を確認します:
2021101503


↑このように「宛先の追加」ダイアログで指定したものと同じ内容が docker コンテナの SG クライアントでも指定できていれば成功です。

この時点で先ほどまでダッシュボード画面に表示されていた赤いアイコンは消え、宛先である機密システムへの接続が確立できているはずです:
2021101504


ここまでが SecureGateway によるプライベートネットワークへの接続に必要な設定手順です。繰り返しますが、実際の接続先である機密システムや、この後接続時に使う PC への設定は一切不要です。また SG インスタンスや SG クライアントも非常に簡単に設定できている点がメリットだと考えています。


では実際にインターネットからプライベートネットワーク内の機密システム(=ラズベリーパイの SSH )に接続できるか動作確認してみましょう:
2021101505


まずはダッシュボード画面で接続時に必要な情報を確認します。宛先として作成したアイコンの右下の歯車をクリックします:
2021101506


以下のようなダイアログが表示されます。この「クラウド・ホスト:ポート」と表示されている部分にインターネットからアクセスすると、SG クライアントを通じて内部ネットワークから「リソース・ホスト:ポート」へ接続できるようになっています(この画面を確認したら右上の×をクリックして消します):
2021101507


改めてインターネットにアクセスできるPCから「クラウド・ホスト:ポート」で表示されている宛先に接続します。今回は接続先が SSH サーバーなので SSH クライアントを使って、ホスト名とポート番号を SG インスタンスのダッシュボードで表示されたものを指定して接続を試みます:
2021101508


今回は SSH への接続なので、この後で認証を求められます。内部ネットワークから利用する時と同じユーザー名とパスワード(場合によっては秘密鍵など)を入力します:
2021101501


正しい認証情報が入力できればログインが完了します。このアプリケーションの場合は接続先のホスト名がタイトルウィンドウに表示されますが、内部ネットワークの IP アドレスではなく、SG ダッシュボードで表示されたホスト名が表示されている点に注目してください。VPN を使わずに内部ネットワークとインターネットがトンネリングされ、専用のホスト名とポート番号だけで内部ネットワーク内の機密システムにアクセスすることができました:
2021101502


内部ネットワークからでないとアクセスできなかったシステムに無事にアクセスできました。SecureGateway は Essential プラン(無料)の場合は宛先を1つしか設定できませんが、別の有償プランにすることで1つの SG インスタンスで複数の宛先を指定することもできるようになるので、③の手続きを必要な宛先のぶんだけ繰り返すことで必要な社内ネットワークシステムへのアクセスが可能になります。

中小規模のリモートワーク環境を整える上で、手続きやコストで有力な選択肢になると思っているので、ぜひ試してみてください。