プロキシやファイアーウォールに囲まれて、まるで刑務所の中で働かされてるような職場、あると思います。
世の中には、セキュリティという名目上、「amazon.com」というドメインだけで「オンラインショッピング」と判断されて、AWS のマネジメントコンソールすら閲覧させてくれない会社もあるようです。
また、「slack.com」というドメインを誤判定(と思いたい)して、「出会い系サービス」として規制される、怒りを通り越して呆れてしまう環境もあるようです。
そんな不自由な環境で働かされている技術者はしだいにこう思い始めます。
ひとつだけ解ってたこと この支配からの卒業
そんな技術者達に送る、縛られた環境を抜け出すための、合鍵を用意しました。(知っている人にとっては、何の面白みもない、クソ記事です)
なお、本記事は、このような方法を推奨するものではありません。
すべての道は AWS に通ずる
冒頭で、AWS のマネジメントコンソールすら閲覧できない会社があるという話を述べた割に、今回は AWS を使います。そのため、それすら(自分自身にやる気があるのに)見れない職場は、姑息な手を使う前に、リアルに卒業した方が良いでしょう。
AWS と言えば、インターネット通販大手の Amazon が提供するクラウドサービスです。技術者にとっては、Amazon は家電量販店と同じ扱いか、クラウド事業者のイメージが強い事でしょう。
今回は、そんな AWS を使った、職場で尾崎豊になるための方法です。ただし、前提条件があります。
- AWS のマネジメントコンソールで EC2、VPC が操作できる環境にあること
- 特定の IP アドレスに対して、技術検証目的であれば、自分の端末(社内)からインターネット(社外)上のサーバに対して SSH 接続可能なこと
そもそも、AWS CLI などが使用できる環境であれば、今回のような話は生まれないでしょうから、そのような恵まれた環境にある方は対象外です。
踏み台サーバ
職場の PC(もちろん、Windows 7)からは、AWS 上の Windows インスタンスに対して、ポートが開放されていない都合上、リモートデスクトップで接続することすらできません。
とは言え、リモートデスクトップで接続できない Windows など、夏の来ない TUBE のようなものです。そこで、どうするかというと、いわゆる「踏み台サーバ」というものを用意します。
本来の用途としては、AWS 上のプライベートサブネット(VPC 外からは接続できない論理的な名称のネットワーク)上のリソースに対して、外部から安全に接続するために保守等の目的で使用します(と認識してます)。
たとえば、ロードバランサー(ELB)の向こうにいる、Web サーバに対して、仮想端末にログインして作業したい場合があります。通常、Web サーバに対するアクセスは、その外側にいる ELB からの、さらには Web サーバの特定のポート(例:TCP80 番)に対する通信のみを許可するのが普通です。
では、どうやって(外部からアクセスできない)Web サーバに対して直接アクセスするか、そこで「踏み台サーバ」の登場になります。AMI は何でもよいのですが、Amazon Linux がおススメです。インスタンスタイプは無料試用枠の対象である「t2.micro」で十分です。
その踏み台をパブリックサブネット(インターネットゲートウェイと接続された外部からアクセスできる、論理的な名称のネットワーク)に公開します。そのままでは、インターネットという虚構の狭間で野晒し状態になってしまいますから、特定の IP アドレス(例:職場のグローバル IP アドレス)からの通信のみを受け付けるように、セキュリティグループを調整します。
そして、そのセキュリティグループに対して、TCP22 番(SSH のデフォルトポート)のアクセスを受け付けるようにします。あとは、社内の端末から、Windows の神ソフト、「Tera Term」から SSH で接続できれば準備完了です。(作成したキーペアである秘密鍵の漏洩だけは、くれぐれもご注意を。漏洩すると、卒業ではなく退学することになり兼ねません。まさに合鍵です)
SSH ポートフォワーディング
その「踏み台サーバ」がどのような役割を果たすか。Amazon Linux というよりも、「SSH」という技術にポートフォワーディングというものがあります。
ここに解説がすべて書かれていましたので、詳細は割愛しますが、いわゆるトンネリングです。(上記の URL が、ジオシティーズ上にあるので、2019 年 3 月末で閲覧できなくなるのが非常に残念なのは置いておいて)
先ほどのプライベートサブネット内の Windows インスタンスに、この SSH ポートフォワーディングを使用して接続します。
- 職場の作業端末から Amazon Linux に対して SSH ポートフォワーディング
- リモートデスクトップ接続で、接続先を localhost と手順 1 で指定したポート番号に接続する
たった、これだけです。作業端末 ⇔SSH サーバ ⇔Windows サーバと接続され、あたかも作業端末上から直接 Windows サーバと接続しているように操作できます。
踏み台サーバを使用して任意の IP アドレス、ポートにアクセスする
さて、勘の鋭い方なら(というよりもポートフォワーディングという用語をみた時点で)、踏み台サーバがインターネット上に公開されいてたら、特定のポートに対するアクセスを、任意の IP アドレスの任意のポート番号に対して転送できるのでは、ご名答です。
上記は自宅の Mac に対して VNC で接続する方法ですが、職場の端末に VNC Viewer などの VNC Client をインストールすれば、SSH ポートフォワーディングにより、通常接続することのできない自宅の Mac にも接続できます。(もちろん、自宅のルーターの設定は必要です)
つまり、やりたい放題です。
が、SSH ポートフォワーディングの性質上、作業端末 ⇔SSH サーバ間の通信は暗号化されますが、その先は暗号化されませんので、ご利用は計画的に。
合鍵である秘密鍵が漏洩しない限り、踏み台サーバが乗っ取られる可能性は低いでしょうが、万が一を考えて、踏み台サーバから接続できるサーバについても本来は制御するべきです。また、踏み台サーバの監査証跡ログはしっかり取っておくことをオススメします。