こんにちは、京セラコミュニケーションシステム 石関 (@kccs_daisuke-ishizeki)です。
先日とある案件を担当している方から、
「外部IPアドレスを持たない Compute Engine 上でアプリケーションを開発しようとしている。お客さん自身は内部 IP アドレスで直接アクセスできる模様。うちの環境からも VM に HTTP アクセスしたい。どうしたら良い?」
と質問いただきました。
状況整理
話を少し聞いてみると以下の状況でした。
- お客さんの Google Cloud プロジェクト
- Compute Engine 上でアプリケーションを開発・稼働させようとしている
- Compute Engine は直接外部IPアドレスを持たない(持たせない)
- ネットワーク的には繋がっていない
- お手軽に、コストをかけずに
アプリケーション ロードバランサを経由してアクセスするのが良いんじゃないかなと思いますが、それもすぐは厳しいということでした。
Identity-Aware Proxy(IAP) で TCP 転送
そんなわけで本題です。
弊社櫻木の記事で主にメンテナンスでの利用目的で Identity-Aware Proxy(以下 IAP)が紹介されておりますが、IAP TCP 転送は任意のポートが指定可能ですので HTTP アクセスにも利用できます。
トンネルを張る手間はありますが今回の状況では有用な手段かなと思います。
準備と HTTP アクセス
前提:外部 IP アドレスが割り当てられていない VM が作成済みで Apache が起動済み
1. ファイアウォールルールの作成
VM の存在する VPC のファイアウォール上りルールで 35.235.240.0/20 からの 80/TCP (HTTP) 接続を許可します
2. ロール付与
HTTP アクセスする(IAP を利用させる)Google アカウント / グループ に以下のロールを付与します
- IAP で保護されたトンネル ユーザー(roles/iap.tunnelResourceAccessor)
3. gcloud コマンドで IAP TCP 転送
以下のコマンドで localhost - VM 間に IAP を経由したトンネルを張ります
gcloud compute start-iap-tunnel ${INSTANCE_NAME} 80 \
--local-host-port=localhost:8080 \
--zone=${ZONE}
トンネルが張れたら以下の応答が返ってきます
Testing if tunnel connection works.
Listening on port [8080].
4. ブラウザで localhost:8080
にアクセス
特に異常がなければ Apache のデフォルトページが表示されるはずです
まとめ
IAP TCP 転送を使用したトンネルを張ることでプライベート IP アドレスのみの VM に対して簡単にアクセスが可能です。
この記事が少しでも役に立てたら嬉しいです。
参考にした記事、ドキュメント