Compute Engine の SSH 接続方法についてのまとめ

記事タイトルとURLをコピーする

G-gen の杉村です。Compute Engine で起動した Linux VM に SSH ログインするにはいくつかの方法があり、それぞれネットワーク的な考慮点が異なるため、整理しました。

Compute Engine VM への SSH 接続について

Compute Engine で Linux インスタンスを起動した際、SSH ログインするにはいくつかの方法があります。

No タイトル インターフェイス
1 コンソールの SSH ボタン Web ブラウザ
2 gcloud コマンド PC のターミナル
3 SSH ターミナルソフト SSH ターミナルソフト
4 Cloud IAP 上記のいずれか

それぞれの方法において、ログインのために必要な IAM や VPC ファイアウォールの設定が異なります。当記事では「ネットワーク」「認証・認可」の観点で整理しました。

コンソールの SSH ボタン

概要

Google Cloud コンソールの VM 一覧から SSH ボタンを押下してログインします。

最もシンプルで簡単に Linux VM へログインする方法です。

SSH ボタン

インターフェイス

Web ブラウザの新規ウインドウが開き、SSH ターミナルとして利用できます。

ショートカットキーの利用やファイルのアップロード / ダウンロード、フォントの変更なども利用でき、多くのケースで不便を感じません。

Web ブラウザの SSH インターフェイス

なおこの方法では Cloud IAP が利用できる条件を満たしていると、自動的に Cloud IAP 経由でのアクセスになります。

要件

ネットワーク

VM から見た接続元 IP は Google のパブリック IP アドレスになります。そのため VPC のファイアウォールにて 22/TCP を、以下のいずれかの接続元から許可する必要があります。

  • 0.0.0.0/0 (ログインしている Google アカウントが Cloud IAP 権限を持っていない場合)
  • 35.235.240.0/20 (ログインしている Google アカウントが Cloud IAP 権限を持っている場合)

基本的には 0.0.0.0/0 から該当インスタンスへの 22/TCP を VPC ファイアウォールルールで許可する必要があります。Google のパブリック IP は不定のためです。ただし Google の接続元 IP アドレスは JSON で 公開 されており、これを自動的・定期的に取得してファイアウォール反映する仕組みを構築すれば、IP の追加・変動に対応することはできます。

また 35.235.240.0/20 からの接続がファイアウォールで許可されており、かつログインしている Google アカウントが IAP で保護された トンネル ユーザー (roles/iap.tunnelResourceAccessor) などの Cloud IAP 権限を持っている場合、自動的に Cloud IAP 経由での接続となります。その場合、VM から見た接続元 IP は 35.235.240.0/20 の範囲内の IP アドレスになります。

認証・認可

Google Cloud コンソールへのログインに利用している Google アカウントが該当インスタンスに対して適切な IAM 権限を持っていれば、SSH 鍵を管理することなく、Google アカウントの認証でログイン可能です。

公開鍵・秘密鍵のキーペアが自動的に作成された後、公開鍵が VM に登録され、OS ユーザーも自動的に作成されます。

作成されるユーザー名は Google アカウント名の @ マークの前になります (OS ログイン機能 を使う場合は少し異なります) 。

必要な IAM 権限は以下のとおりです。

  • compute.instances.use 権限等 ( Compute インスタンス管理者 (v1) (roles/compute.instanceAdmin.v1) ロール推奨)
  • VM にサービスアカウントがアタッチされている場合はサービスアカウントまたはプロジェクトに対する iam.serviceAccounts.actAs 権限 ( サービス アカウント ユーザー ロール等)
  • OS ログイン機能 を利用する場合は OS ログインに必要な IAM ロール ( roles/compute.osAdminLogin または roles/compute.osLogin )

このように多少複雑です。プロジェクトのオーナー権限があれば問題なくログインできますが、例えば Compute 管理者 ロールのみを持っている人がこの方法でログインしようとした際、 予期しないエラーにより、VM インスタンスに接続できません。数分待ってからもう一度お試しください。 等と表示されることがあります。これは IAM 権限が足りないためであり サービス アカウント ユーザー ロール等を付与すると解決することがあります。

エラー時に表示される「トラブルシューティング」ボタンを押下すると、足りない IAM 権限などが示されます。

接続できませんでした

gcloud コマンド

概要

PC 等で実行する gcloud コマンド (別名 Google Cloud CLI) を使って Compute Engine にログインすることができます。

コマンドラインは gcloud compute ssh ${INSTANCE_NAME} --zone=${ZONE} です。

インターフェイス

gcloud コマンド がインストール済みであれば、Mac や Windows の通常のターミナルで操作できます。

使い慣れた自分の PC のターミナルから SSH 接続することができます。

要件

ネットワーク

VM から見た接続元は操作している PC 環境のパブリック IP アドレスとなります。そのため VPC ファイアウォールで PC が稼働している環境のパブリック IP アドレスからの 22/TCP を許可します。

認証・認可

公開鍵・秘密鍵を用意しなくても Google アカウントによる IAM 認証で SSH ログインすることができます。

必要な IAM 権限は前述の「コンソールの SSH ボタン」と同様です。

VM に作成されるユーザー名は実行環境のローカルユーザー名となります。ただし OS ログイン機能 を使う場合は異なり <アカウント名>_<ドメイン名> になります。

例: tom@example.comtom_example_com

SSH ターミナルソフトウェア

概要

Tera Term や PuTTY といった、使い慣れた定番 SSH ターミナルソフトウェアから VM へアクセスすることができます。

インターフェイス

Tera Term、PuTTY、Linux の SSH コマンド等です。

要件

ネットワーク

VM から見た接続元は操作している PC 環境のパブリック IP アドレスとなります。この接続元から VPC ファイアウォールで 22/TCP を許可します。

認証・認可

IAM ではなく SSH キーペアによる公開鍵認証となります。

VM に公開鍵を追加する方法は以下の公式ドキュメントを参照してください。以下の方法に沿って、インスタンスメタデータに SSH 公開鍵を追加することで、手元の秘密鍵でログインすることができます。

一度ログインできるようになった後は通常の Linux サーバーのように home ディレクトリの authorized_keys に公開鍵を直接追加することもできます。

Cloud IAP

概要

Cloud IAP は Cloud Identity-Aware Proxy の略です。Google Cloud が提供するフルマネージドのプロキシサービスであり、SSH ログインに活用できます。

VM へのログインにおいては「フルマネージドの踏み台サーバがポートフォワードをしてくれる」というイメージです。

詳細は以下の記事でも解説しています。

blog.g-gen.co.jp

インターフェイス

当記事で紹介した「コンソールの SSH ボタン」「gcloud コマンド」「SSH ターミナルソフトウェア」 のどれかと組み合わせて利用するため、いずれかのインターフェイスを選ぶことができます。

要件

ネットワーク

VM から見た接続元 IP が Cloud IAP のパブリック IP アドレス ( 35.235.240.0/20 ) になります。VPC のファイアウォールにて 35.235.240.0/20 からの 22/TCP を許可します。

認証・認可

Google アカウントがプロジェクトレベルで IAP で保護されたトンネル ユーザー (roles/iap.tunnelResourceAccessor) ロールを付与されている必要があります。

ただし、これはあくまで Cloud IAP を使ってトンネルを張るための権限です。ログインに使う方法 (「コンソールの SSH ボタン」「gcloud コマンド」「SSH ターミナルソフトウェア」 ) ごとの認証・認可の条件も併せて満たす必要があります。

Cloud IAP については以下の記事で詳細に解説していますのでご参照ください。

blog.g-gen.co.jp

杉村 勇馬 (記事一覧)

執行役員 CTO / クラウドソリューション部 部長

元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。