
Compute Engine にブラウザコンソールから SSH しよう
こんにちは、すらぼです。
検証用に Compute Engine をよく使うのですが、SSH アクセスするために必要な設定を毎回忘れてしまうので、忘れないようにブログにまとめようと思います。
なお、状況によってアクセスの方法はいくつかありますが、今回は「パブリックIPなし + OS Login が有効」なインスタンスでの設定を紹介します。
今回のゴール
外部IPを持たない VM に対して、ブラウザのコンソールから SSH で接続できるようにします。
そのためには、以下の設定を行う必要があります。
- ファイアウォールルール(IAP 用)を作成する
- ネットワークタグを通じて、インスタンスにファイアウォールを関連づける
- OS Login を有効化する
- ユーザーに IAM ロールを付与する
順番にやっていきましょう。
実際にやってみる
ファイアウォールルール(IAP 用)を作成する
まず、ファイアウォールルールを作成していきます。
詳しい仕組みは本記事では割愛しますが、ブラウザ経由で SSH を行うためのネットワーク経路を確保するようなイメージです。
詳しい解説が知りたい方は、以下の村田さんの解説ブログをご参照ください。
ファイアウォールのページから、「ファイアウォール ルールを作成」をクリックします。

今回作成するファイアウォールルールは以下のようなパラメータで作成していきます。
| 項目 | パラメータ |
|---|---|
| トラフィックの方向 | Ingress |
| 一致したときのアクション | 許可 |
| ターゲット | 指定されたタグ: iap-ssh |
| 送信元フィルタ | IPv4 範囲 35.235.240.0/20 |
| プロトコルとポート | TCP 22 |
以下のような表示になっていればOKです。

ネットワークタグを通じて、インスタンスにファイアウォールを関連づける
次に、作成したファイアウォールルールをインスタンスに関連付けます。
今回作成したファイアウォールのターゲットは "指定されたタグ" に設定しています。
そのため、VM インスタンスに対してネットワークタグを付与することで、ファイアウォールルールを適用することができます。
VM の編集画面から、以下のように iap-ssh ネットワークタグを設定します。

これだけだと設定できているか不安なので、別の経路から確認しておきましょう。
インスタンスのネットワークインターフェース nic0 をクリックして、このインスタンスのネットワークの詳細画面を開きます。

少しスクロールして「VPC ファイアウォールルール」の欄を見ると、関連づけられたルールが確認できます。
以下の画面のように、作成したルールが表示されていることが確認できれば、正しくファイアウォールルールが紐づけられています。

OS Login の有効化
次に、インスタンスの OS Login を有効化します。
OS Login を有効化することによって、SSH 自体の権限や、SSH 後に sudo が可能なユーザーなどを Google Cloud の IAM 権限によってコントロールできるようになる利点があります。
Compute Engine の OS Login は具体的な設定値があるわけではなく、メタデータによって有効/無効の設定を行います。
インスタンス編集画面の「カスタム メタデータ」から、enable-oslogin TRUE を設定して、保存します。

IAM ロールの付与
最後に、SSH アクセスを行うユーザーに IAM ロールを付与します。
以下の3つの権限を必要なスコープに応じて付与してください。
| ロール | 用途 | 付与できる範囲 | 備考 |
|---|---|---|---|
| roles/compute.osLogin(sudo が必要なら osAdminLogin) | OS Login でログインする | プロジェクト/インスタンス | インスタンス単位で付与する場合は、compute.projects.get を含むロールをプロジェクトレベルで別途付与する |
| roles/iap.tunnelResourceAccessor | IAP 経由でトンネルを張る | プロジェクト/インスタンス | IAM Conditions で宛先ポートを 22 に絞れる |
| roles/iam.serviceAccountUser | VM のサービスアカウントを使う | プロジェクト/サービスアカウント | プロジェクトに付与するとすべてのサービスアカウントを使えるため、絞るなら VM のサービスアカウントに付与する |
今回は、以下の権限をプロジェクトスコープで付与しました。

動作確認
ここまでの作業が完了すると、ブラウザコンソールから OS Login を通じて SSH ができるようになります。
インスタンス詳細画面の「SSH」ボタンをクリックしてみます。

すると、以下のように SSH アクセスすることができました。

また、OS Login が有効になっているかも念の為確認しておきましょう。
id コマンドを叩いて、結果を確認してみます。
$ id
以下のように、IAMユーザーと同じレスポンスが返ってくると、実際に OS Login できていることがわかります。
// IAMユーザーのメールアドレス(user.name@example.com)と同じユーザー名が返ってくれば OS Login が有効
~$ id
uid=2108855724(user_name_example_com)
さいごに
以上、ブラウザコンソール経由で SSH アクセスを行う方法を整理してみました。いくつかのステップがありますが、一通り設定してしまえばインスタンスごとに都度設定するような項目は少ないので、2回目以降は数分程度でセットアップまで完了できると思います。
また、今回有効化した OS Login は基本は無効化されている機能です。ただ、有効化することで IAM の権限を引き継げるので、Linux ユーザー単位ではなく IAMユーザー単位での権限コントロールができる点も地味に嬉しいポイントです。
検証環境だけでなく、VPC内での操作など色々なケースで便利な SSH アクセス機能、皆さんも積極的に活用していきましょう!
この記事がどなたかの助けになれば幸いです。以上、すらぼでした!
参考資料








