はじめに

タイトルは少し大げさですが、 Google Cloud を触り始めてから、Windows サーバーへの IAP を利用した RDP をはじめて行ったので、その内容を整理して、内容を紹介します。

IAP とは

こちらでの表現を引用しますと、

IAP によって保護されているアプリケーションまたはリソースには、適切な Identity Access Management(IAM)役割を持つプリンシパル(ユーザーとも呼びます)がプロキシ経由でのみアクセスできます。IAP によってアプリケーションまたはリソースへのアクセスをユーザーに許可すると、使用中のプロダクトによって実装されたきめ細かいアクセス制御が適用され、VPN を使用する必要がなくなります。ユーザーが IAP で保護されたリソースにアクセスしようとすると、IAP が認証と認可のチェックを行います。

とのことです。

対象リンクにこんな図も掲載されていました。
IAP図

個人的な解釈としては、GCE に対して SSH や RDP 等の通信を行いたい場合、HTTPS で Google Cloud の IAP という仕組みで受け付けて、IAM の権限を利用して、認証認可を行い、その後、その IAP の仕組みから SSH や RDP 等の通信を対象 GCE へ行うイメージとなります。
Google Cloud の IAM 権限で認証行ってくれる点も良いですが、パブリックな通信は IAP で受け付けてくれるので、 IAP から GCE に対しての通信ではパブリック IP の付与は不要となり、プライベート IP の通信のみで SSH や RDP 接続をすることが可能な点がとてもよき点だと思っています。

RDP 通信を行う

条件

RDP 通信を行いたい場合、こちらの内容が参考になります。
IAP を行う前提として、以下が整っている必要があります。

  • 対象 VM へのファイアウォールルールで 35.235.240.0/20 からの上りトラフィックに対して、接続ポートを許可する
  • こちらを参照し IAM 権限を付与する

手順

以下のコマンドを実行して、IAP TCP 転送を利用して、RDP 通信に必要なポートを LISTEN します。

gcloud compute start-iap-tunnel "インスタンス名" RDPポート3389 \
--local-host-port=localhost:13389(任意のポート) \
--zone=asia-northeast1-a(GCEがいるゾーン)

古風な私は Mac のローカルで以下のような形でポートが LISTEN していることを確認します。

$ netstat -an|grep 3389
tcp4       0      0  127.0.0.1.13389        *.*                    LISTEN

LISTENしている 127.0.0.1:13389 に対して RDP すると以下のように無事画面表示されました。
※RDPの画面の下に LISTEN 中の Terminal 画面もちら見せしています。
IAPでRDP成功

まとめ

昨今はパブリック IP がなくても、AWS であれば Session Manager を利用して SSH ができたりしますが、Google Cloud では IAP を利用することで、GCE に対する SSH はもちろん RDP 及びその他ポートへの TCP 転送も可能なので、様々な用途で認証も含めて機能提供が行うことが可能です。改めて IAP の素晴らしさを感じた良い機会でした。

おまけ

ちなみに NW の構成上、GCE が存在する VPCのルート上、 0.0.0.0/0 でデフォルトインターネットゲートウェイへのルートがない状態でも IAP ができるか確認したところ、想定どおり成功し、完全にプライベートな環境でも、IAP で通信ができることがわかり、学びが多い経験でした。