GCPにセキュアな踏み台サーバーを作成する
TL;DR GCPのIdentity-Aware Proxy(IAP)を利用すると、手軽かつセキュアに自宅などから踏み台サーバーへのアクセスを実現できます。加えてオンプレミスとGCPで拠点間VPNが構築できると、社外からGCPを経由してオンプレミスへセキュアにアクセス可能です。
昨今の状況を含め突発的な出来事により、社内にある環境に社外からアクセスする事が必要になるケースは無いでしょうか?
今まではダイヤルアップ型のVPNを構築する、踏み台サーバー(要塞ホスト)を構築するといったやり方で解決が図られて来ましたがどちらのやり方もエンドポイント(VPN Gateway、踏み台サーバー)へのセキュリティ対策を綿密に行う必要があるため実装には多くのコストがかかります。
今回はGCPを使ってセキュアかつ簡単に社内へアクセスできる環境を構築する方法をご紹介します。本記事ではGCPとオンプレミス間で拠点間VPNが構築済みである事を前提に説明を行います。GCPとオンプレミスの拠点間VPNの概要や実現方法はこちらをご覧ください。
概要: グローバルIPを持たないインスタンスをGCP上に構築し、自宅などからセキュアにアクセスできるようIAPの設定を行います。インスタンスへのログイン、GCP利用時に用いるアカウントは新規作成もしくは既存の環境から同期します。インスタンスがグローバルIPを持たないため、インターネット経由で攻撃を受けるリスクが大きく低減されるため、対策する領域を軽減できます。
前提条件
- GCPアカウントがある
- ドメインを取得している (Cloud Identityで使用) ※1
- オンプレミスとGCPで拠点間VPNもしくは専用線接続が構築されている ※2
※1 組織に属するGCPアカウントを利用する場合、ドメインの取得は不要です
※2 踏み台サーバ経由でオンプレミスへアクセスしない場合は不要です
必要となるGCPのコンポーネントは以下の通りです。
- Identity-Aware Proxy (IAP)
- Google Compute Engine
- Cloud VPN ※3
- Cloud Identity ※4
※3 オンプレミスへの接続が不要な場合、Cloud VPNは必要ありません
※4 検証の場合、Gmailアカウントでも実現可能です。すでにG Suiteを利用中の場合、Cloud Indentityは不要です。
構築の流れは以下のとおりです。今回はSSHの踏み台サーバーを構築するやり方をご紹介しますが、同様にRDPの踏み台サーバーを構築することも可能です。
- 踏み台サーバーを構築する
- Cloud Identityでアカウントの作成/同期を行う
- IAPを設定する
- 踏み台サーバーへのログイン設定を行う
1. 踏み台サーバーを構築する
GCPのGoogle Compute Engine(GCE)を使ってグローバルアドレスを持たないインスタンスを作成します。今回ご紹介する多くの手順はGoogle Cloud SDKを用いてコマンドラインから行いますが、画面上から設定することも可能です。設定がまだの方はCloud Shellを用いるか、Google Cloud SDKの設定を行います。
それでは以下コマンドでグローバルIPを持たないインスタンスを作成します。画面上からインスタンス作成を行う場合はこちらをご参照ください。紹介しているコマンドは下記条件でインスタンスを作成するというものになります。コマンド実行前にFIXMEをGCPのプロジェクトIDに置き換えて実行します。
インスタンス名: iap-ssh-host
OS: Linux (Debian)
ブートディスクのサイズ: 10GB
マシンタイプ: n1-standard-1
使用するリージョン: 東京(asia-northeast1)
使用するゾーン: a(asia-northeast1-a)
$ gcloud compute --project=FIXME instances create iap-ssh-host --zone=asia-northeast1-a --subnet=default --no-address
2. Cloud Identityでアカウントの作成/同期を行う
Cloud Identityとはアカウント管理を行うためのGCPサービスです。このサービスを利用してアカウントの管理を行います。今回の方法ではCloud Identityのみでアカウント管理を行いますが、こちらの手順のようにサードパーティーのID管理ソリューションと連携することも可能です。
GCP コンソールから、[ツールとサービス] メニューから [IAM と管理] > [ID と組織] にアクセスし、[お申し込み] をクリックします。お申し込みをクリックすると、会社名、連絡先、ドメイン情報などの入力を求められるため入力します。申込みの詳細はこちらをご覧ください。
作成が完了すると、管理用サイト(https://admin.google.com)でアカウント管理ができるようになります。アクセス後はこちらの手順に従い、ユーザーやグループの作成などの設定を行います。
3. IAPを設定する
IAPとはIDとコンテキストを使用して、アプリケーションや VM へのアクセスを保護するためのGCPサービスです。今回はこのサービスを利用してGCP上の踏み台サーバーへのセキュアなアクセスを実現します。その他にクラウド、オンプレミス問わずアプリケーションへの保護も実現可能です。ご興味ある方はこちら(BeyondCorp リモート アクセスを利用してチームが安全に働ける環境を確保する)とこちら(オンプレミス アプリの IAP の概要)をご参照ください。また下記手順の詳細はこちらから確認可能です。
それではIAP経由で行うアクセスの権限設定を行います。[セキュリティ] メニューから [Identity-Aware Proxy] にアクセスし設定を行います。IAPの画面でアクセスを許可したいリソース(すべて、ゾーン、またはインスタンス)を選択し、画面右のメンバーを追加をクリックします。権限を設定する画面が出てくるため、Cloud Identityで作成/同期したユーザーもしくはグループに対してIAP-secured Tunnel User権限を付与します。
踏み台サーバへ対してSSH/RDP以外の通信を許可したい場合は、こちらの手順を参考にファイアウォールの設定を変更してください。
より詳細な制御(アクセス可能な時間帯など)を行いたい場合はこちらの手順を参考に設定を行ってください。
4. 踏み台サーバーへのログイン設定を行う
ここまでの設定で踏み台サーバーへIAP経由で通信できるようになりました。ただし今のままではCloud Identityで作成/同期したユーザーに踏み台サーバへのログイン権限がありません。そのためこちらの手順に従い、ログイン許可の設定を行います。
設定が完了すると、Cloud Identityで作成/同期したユーザーで対象のインスタンスにIAP経由で SSHログインできるようになります。SSHはGCPコンソールのSSHボタンもしくは、コマンドラインから行えます。
$ gcloud compute ssh INSTANCE_NAME
まとめ
GCP上に手軽かつセキュアに自宅などからアクセスできる踏み台サーバーを構築する方法をご紹介しました。加えてオンプレミスとGCPで拠点間VPNが構築できると、社外からGCPを経由してオンプレミスへセキュアにアクセス可能です。
GCPプロジェクトのOwner権限を持っているとグローバルIPを持たないインスタンスを作成するだけで暗黙的にIAPを利用してインスタンスへ接続ができるようになります。今回ご紹介した内容ではログイン先のインスタンスを明示的にする方法となりますので、権限を最小限に絞りつつ利便性を損なうことがありません。
自宅などから仕事をする機会が増えておりますので、こういった準備をしてセキュアにリモートワークできる環境をめざしましょう。