グローバルIP を持たず、インターネットとの接続が行えない GCP VM に対して SSH 接続するための設定を記載します。
以下のような制限が存在しているとします。
これらの制限がなされていたとしても SSH 接続できることの確認になります。
ネットワーク 10.1.1.0/24
を作成しました。
ただし、Cloud IAP が利用する 35.235.240.0/20
からの流入を許可する必要があります。
Cloud IAP と HTTPS トンネルを張る User の外部 IP のみが記載された Access Level を作成して VPC-SC に紐付けます。
補足: Firewall で指定した 35.235.240.0/20
を Access Level に指定する必要はありません。
検証のためすべての GCP サービスを VPC-SC で制限してみます。
VM を起動する際に 外部IP を持たないように設定します。
組織内の User アカウントについて、Cloud Console (Web 管理画面) および GCP API に対する IP 制限を行います。
関連: Terraform の GCP 環境向けの基本的な使い方
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 トンネルを張ることができます。
VM 一覧における「SSH」ボタンをクリックします。
ポップアップウィンドウが開かれます。
以下のロールの権限が必要です。
roles/iap.tunnelResourceAccessor
roles/iam.serviceAccountUser
roles/compute.instanceAdmin
動作検証に先立ち、Cloud Shell で接続された端末の外部IP を確認して Access Level に追記しておきます。
gcloud compute ssh instance-1 --project myproject-20210411 --zone asia-northeast1-b
gcloud compute start-iap-tunnel instance-1 22 --local-host-port=localhost:2222 --project myproject-20210411 --zone asia-northeast1-b