グローバルIP を持たず、インターネットとの接続が行えない GCP VM に対して SSH 接続するための設定を記載します。
インターネットアクセスを制限するための設定
以下のような制限が存在しているとします。
これらの制限がなされていたとしても SSH 接続できることの確認になります。
Firewall
ネットワーク 10.1.1.0/24 を作成しました。

インターネットとの接続制限

ただし、Cloud IAP が利用する 35.235.240.0/20 からの流入を許可する必要があります。
VPC-SC
Cloud IAP と HTTPS トンネルを張る User の外部 IP のみが記載された Access Level を作成して VPC-SC に紐付けます。
補足: Firewall で指定した 35.235.240.0/20 を Access Level に指定する必要はありません。

検証のためすべての GCP サービスを VPC-SC で制限してみます。

外部IP を持たない VM
VM を起動する際に 外部IP を持たないように設定します。

BeyondCorp Enterprise
組織内の User アカウントについて、Cloud Console (Web 管理画面) および GCP API に対する IP 制限を行います。

SSH パケットの通信経路について
Cloud IAP と User の間に HTTPS トンネルが張られるため、GCP VM はグローバル IP を持つ必要がありません。

tunnel.cloudproxy.app ドメインについて
Cloud IAP による HTTPS トンネルで TCP forwarding を行なうためには、
Cloud IAP と HTTPS トンネルを張るクライアントから tunnel.cloudproxy.app へのアクセスが行える必要があります。
参考: What domain does IAP for TCP use?
以下の二つの方法で Cloud IAP と HTTPS トンネルを張ることができます。
"SSH from the browser" の利用
VM 一覧における「SSH」ボタンをクリックします。

ポップアップウィンドウが開かれます。

以下のロールの権限が必要です。
roles/iap.tunnelResourceAccessor
roles/iam.serviceAccountUser
roles/compute.instanceAdmin
gcloud コマンドの利用
動作検証に先立ち、Cloud Shell で接続された端末の外部IP を確認して Access Level に追記しておきます。

SSH
gcloud compute ssh instance-1 --project myproject-20210411 --zone asia-northeast1-b

その他の TCP 通信
gcloud compute start-iap-tunnel instance-1 22 --local-host-port=localhost:2222 --project myproject-20210411 --zone asia-northeast1-b

クラウドネイティブなアーキテクチャを設計するのが好きです。主にGCPを利用しています。
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。




