2020/07/08

ファイアウォールで閉じたGCEインスタンスへ、ブラウザでアクセスする方法

どんなに些細なこと、当たり前のことであっても、しばらく自分で試行錯誤したことを備忘録としてウェブ上に残しておくことは、次にまた同じことをしたいと思ったときにググれば出てくるので便利です。

昨日も、そういえば昔こういうことやったよね・・・と思ってググったら、かなり前に自分で書いた記事を見つけました。→「googleクラウドにたてたWeb Serverをセキュアに使う

今から思えばちょっと冗長なので、簡素化して再度備忘録です。


やりたいこと:

ファイアウォールで閉じたGCEインスタンスへ、ブラウザでアクセスしたい。



つまり、グローバルにはhttpやhttpsのポートを開けることなく、プライベートにウェブアクセスしたいということです。

方法は、google cloud console の cloud shell が備えているポート転送に乗っかるだけです。GCPには cloud shell という便利なコンソールがあって、gcloud のコマンドでプロジェクトを切り替えることでファイアウォールの中に入れる仕組みを持っています。このコンソールがウェブのポートを転送する機能も持っていて、cloud shell をみているブラウザからcloud shell 仮想マシンにアクセスすることができます。


ブラウザで cloud shell を立ち上げると、「ポート8080でプレビュー」というメニューが出てきます。これが、cloud shell 仮想マシンの8080ポートに、このブラウザからアクセスするメニューです。

これは、cloud shell のサーバーで開発をする目的で作ってあるんじゃないかと思いますが(例えばこの「ウェブでプレビュー」機能を説明する記事など)、cloud shell 仮想マシンはあまり重い仕事ができず、例えば大量のデータを扱ったり、重い計算をしたり、重厚なウェブアプリを動かしたりすることができません。だから、別のGCEインスタンスに転送したくなります。

そこで、この cloud shell 仮想マシンの8080ポートを、各プロジェクトのファイアウォールの中で動いているGCEインスタンスの8080ポートに転送します。

いわば、cloud shell を使ってVPNを張っているようなものですね。

方法は、cloud shell にて

gcloud compute ssh (instanceName) --project (projentName) \\
  --zone (zoneName) --ssh-flag="-L" \\
  --ssh-flag="8080:localhost:8080"

でOK。やっていることは、cloud shell 仮想マシンからGCEインスタンスへ sshでトンネルを掘っているだけです。これを実行すると、「ポート8080でプレビュー」でGCEのインスタンス(instanceName)の8080ポートに繋がります。



最後に、なんでわざわざこんなことをするのか。

それは、セキュリティを可能な限り誰かに任せたいからです。SEならばhttpやhttpsポートをグローバルに見せて、かつセキュリティを保つ方法を知っていて、経験値もあると思いますが、私は分析屋で、開発については素人なので、セキュリティはできれば信頼できる誰かに任せたい。その意味で、googleさんのセキュリティに乗っかるのは世界最高峰の知識と経験に乗っかっているようなものなので、自分がやるより安心です。

2020/07/07

[備忘録] google cloud shell でプロンプトの表示内容を変える

google cloud shell にて、bashプロンプトの表示内容を変える方法の備忘録。

bashでプロンプトの内容を変更するには、環境変数 PS1 を設定すればいいのだが、.bashrc や .profile を変更しても反映されない。

これは、.bashrc をよく見ると、bashrcでのPS1の設定後、一番下で /google/devshell/bashrc.google を読んでいて、その中でPS1の内容を上書きしているから。

ということは、さらにその下で PS1 を再上書きしてやればよい。

なお、/google/devshell/bashrc.google は読まないとエラーになるとのことなので、これは削除したらダメらしいです。

デフォルトのシェルプロンプトは \w でフルパスを表示するので、階層が深くなると一行に収らなくなってしまうこともあって、非常に使いにくい。一方で、cloudshell では current project が何なのかは表示していてほしかったり、他の部分はあまり気にならないので、そのまま使いたい。そこで私は、bashrc.google の当該部分をまるっとコピーしてきて、wをWに変更して使っています。