Google Compute EngineのOS Login機能でSSHユーザを楽に管理しよう

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

こんにちは。G-genの杉村です。

Google Cloud (GCP) のサービス Google Compute Engine (GCE) の OS Login 機能 って、聞いたことがあるでしょうか。
多くのインスタンス (VM) が起動すると、必ず課題になるのがログインユーザーの管理です。

OS Login 機能を使うと、無料で、OSへのログインユーザーを管理できます。
手順と合わせて見ていきましょう。

f:id:ggen-sugimura:20211006104254p:plain
Google Compute Engine

OS Login 機能って何ができるの?

概要

OS Login は Google Compute Engine の、無料で使えるオプション機能です。
VM へ SSH ログインするユーザを Google アカウントと連動して管理可能 になります。
※ただし SSH ログインを管理する機能のため、対象は Linux インスタンスです。

OS Login 機能を有効化 (プロジェクトごともしくはインスタンスごと) すると、 SSH ユーザーを Google アカウント/グループと紐づけることができるようになります。
Google アカウント/グループに付与する IAM ロールによって、 VMへのログイン可否 と、 特権 (sudo可否) の有無 を設定できるのです。

f:id:ggen-sugimura:20211006115703p:plain
OS Login機能の概念

細かい仕様

  • 公開鍵 / 秘密鍵は自動生成されインスタンスの中に連携される
  • 自動で OS ユーザーが <アカウント名>_<ドメイン名> といった名前で作成される
    • 例: sugimura@g-gen.co.jp → sugimura_g_gen_co_jp
  • 2 段階認証が設定可能

メリット

つまりこの機能により「公開鍵をインスタンスの authorized_keys に追加する」あるいは「インスタンスメタデータに公開鍵を設定する」などの管理が 不要になります

また VM にログインできる利用者の管理を Google アカウント/グループに統合できるため、 管理運用の工数が減ります

さらに 2 段階認証も簡単に設定できるので、セキュリティレベルも向上が見込めるでしょう。

設定手順

基本的には以下のドキュメントを参考にしますが、少し噛み砕いて解説します。

cloud.google.com

Step 1. OS Login 有効化 (メタデータの設定)

まず、 OS Login 機能を プロジェクト単位で 有効化するのか インスタンス単位で 有効化するのかを考えます。

最初の手順は OS Login を有効化するキー・バリューをメタデータに設定することですが、 GCE には プロジェクト単位のメタデータとインスタンス単位のメタデータあるのです。

プロジェクト全体で有効化するには、プロジェクト全体のメタデータに enable-oslogin = TRUE を設定します。

f:id:ggen-sugimura:20211006111027p:plain
プロジェクトレベルのGCEメタデータ

一方でインスタンス単位で有効化するには、個々のインスタンスの 編集 画面から、メタデータに enable-oslogin = TRUE を設定します。

f:id:ggen-sugimura:20211006111045p:plain
インスタンスレベルのGCEメタデータ

なお、 2 段階認証を有効化したい場合はこの時点でメタデータに enable-oslogin-2fa = TRUE も併せて設定しておいてください。
OS Login 機能の2段階認証は、 Google アカウントに設定された二段階認証の要素を利用します。
ここでメタデータを設定しおけば、ログイン時に二段階認証の要素を問われる (Google Authenticator の OTP 入力を促されたりスマホアプリの承認ボタンを押すことを促されたりする) ようになります。

Step 2. IAM ロールの付与

OS にログインさせたい Google アカウント/グループに IAM ロールを付与します。
なお Google の推奨は "アカウントに直接 IAM ロールを付与しない。グループに付与する" ですので、これに従ったほうが良いでしょう。

以下の いずれか を付与します。

  • sudo 権限 なし
    • roles/compute.osLogin (和名: Compute OS ログイン )
  • sudo 権限 あり
    • roles/compute.osAdminLogin (和名: Compute OS 管理者ログイン )

IAM ロールは 組織レベル プロジェクトレベル 個別インスタンスレベル のいずれかで付与することで、その Google アカウント/グループがどのインスタンスにログインできるかを制限できます。

  • 組織レベルで付与すれば組織配下の全てのインスタンスに
  • プロジェクトレベルで付与すればプロジェクト内の全てのインスタンスに
  • 個々のインスタンスレベルで付与すればそのインスタンスだけに

ログインできるようになります。
この意味がピンと来ていない方は、以下のブログ投稿をご覧いただければと思います。

blog.g-gen.co.jp

これで基本的な設定は終わりです!

ログイン手順

あとは、いつもどおりの方法でログインするだけです。

コンソールから SSH ボタンを押下したり、 gcloud コマンドを使うことでログインが可能になります。

f:id:ggen-sugimura:20211005170204p:plain
コンソールからのSSHログイン

gcloud コマンドであれば以下のように実行するだけで、 OS Login 機能経由で Google アカウントの認証によりログインしてくれます。

gcloud compute ssh --project=${PROJECT_ID} --zone=${ZONE} ${VM_NAME}

メタデータに enable-oslogin-2fa = TRUE が設定されていれば、この次に二段階認証の実施が求められるようになります。

杉村 勇馬 (記事一覧)

クラウドソリューション部 部長

クラウド管理運用やネットワークに知見あり。AWSの全12資格をコンプリートしたので、次はGoogle Cloudの認定資格を狙っている。現在、Google Cloud認定資格は3冠。

2021年12月現在、ハマっているものはマーベル (遅い)