GCEへのSSH接続元IPを絞りつつ、Cloud IAPでSSHする


TL/DR;

Cloud IAP APIの状態確認。

  • Cloud IAP APIが有効になっている確認する。
gcloud services list --filter=NAME:iap
  • 無効になっていた場合の出力。
$ gcloud services list --filter=NAME:iap
Listed 0 items.

Cloud IAPを有効化する。

   gcloud services enable iap.googleapis.com

IAPからのSSHをVPC Firewallで許可してあげる。

gcloud compute firewall-rules create allow-iap-forwarding-ssh   --network=<VPC名>   --allow=tcp:22   --source-ranges=35.235.240.0/20
  • 別のVPC FirewallルールでインスタンスへのSSHは絞っている前提。

IAP経由での接続確認

  • GCPのコンソールでSSH-->gcloudコマンドを表示で表示されたコマンドの最後に--tunnel-through-iapをつけてあげればOK

gcloud beta compute ssh --zone "<インスタンスのゾーン>" "<インスタンス名>" --project "<プロジェクト名>" --tunnel-through-iap

--tunnel-through-iapって呪文が覚えれられない。

手元の端末のbashrcで以下のように関数定義

## for gce
function iap() {
  command gcloud compute ssh $1 --tunnel-through-iap
}
  • zoneとプロジェクトの引数は省略。
    • だって、gcloudコマンド使うときは対象のプロジェクトにアカウント切り替えるから。

実行例

$ iap hoge
No zone specified. Using zone [asia-northeast1-b] for instance: [hoge].
Last login: Sun Mar 21 10:38:38 2021 from 35.235.240.242
[XXXXXXXXX@hoge ~]$