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

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

こんにちは。G-genの杉村です。多くのインスタンス (VM) が起動すると、必ず課題になるのがログインユーザーの管理です。Google Cloud (旧称 GCP) のサービス Google Compute Engine (GCE) には OS Login 機能 があり、ユーザー管理の効率を向上することができます。

Compute Engine

OS Login について

OS Login とは

OS Login は Compute Engine の一機能であり、無料で使えます。

当機能で VM へ SSH ログインするユーザを Google アカウントと連動して管理可能 になります。※SSH ログインを管理する機能のため対象は Linux インスタンスであり、Windows Server には使えません。

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

OS Login機能の概念

細かい仕様

  • 有効化 / 無効化は Compute Engine のメタデータ (インスタンス単位 / プロジェクト単位) で指定する
  • 公開鍵 / 秘密鍵は自動生成されインスタンスの中に連携される
  • 自動で OS ユーザーが <アカウント名>_<ドメイン名> といった名前で作成される
    • 例: sugimura@g-gen.co.jp → sugimura_g_gen_co_jp
  • 2 段階認証が設定可能

メリット

VM にログインできる利用者の管理を Google アカウント/グループに統合できるため OS ユーザー統制の改善管理・運用の工数削減 が期待できます。

簡単に 2 段階認証も設定できるので、セキュリティレベル向上も見込めます。

反対に OS Login 機能を利用しない方法を メタデータマネージド SSH 接続 といいますが、こちらの場合、例えば gcloud compute ssh でログインが行われると、操作した PC 環境のローカルユーザの名称の OS ユーザーが VM 上に作成されます。VM ごとに管理方法が統一されていないユーザーが乱立してしまうことになります。

設定手順

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

cloud.google.com

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

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

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

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

プロジェクトレベルのGCEメタデータ

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

インスタンスレベルの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 コマンドを使うことでログインが可能になります。

コンソールからのSSHログイン

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

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

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

杉村 勇馬 (記事一覧)

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

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