GCEインスタンスを使ってなんらかのサービスを展開している場合、インスタンスへのログイン時にgcloud コマンド、もしくはコンソールから接続すると思います。
この方法では問題ないのですが、例えば、特定のインスタンスに対して特定ユーザーのみにSSH接続制限をかけたい場合、ユーザーの鍵をインスタンスメタデータに登録し個別に管理する必要があり、この方法では鍵が流出するリスクがあります。
このリスクを解消してくれるのが今回ご紹介する「OS ログイン」です。
OS ログインはインスタンスメタデータに基づくSSHキーによる接続を無効にし、Google アカウントのカスタムSSHキーを使ってインスタンスへログインする方法です。
OS ログインを利用することにより、鍵の流出リスクがなくなる以外にも下記4つの利点があります。
- IAMによる管理になりコンソールから簡単に制限可能
- 鍵を個別に管理しないため、鍵の紛失によりインスタンスに接続できなくなるリスクが低い
- プロジェクト、またはインスタンスレベルで細かいアクセス制御ができる
- IAMによってログイン時に管理者としてログインするかを選択できる
本記事では、OS ログインとはどういった機能なのかの詳細説明と、設定方法についてご紹介します。
OSログインとその他ログイン方法の違い
SSHキーをメタデータに設定する方法、Compute API を利用して接続する方法、OSログインを利用した際のそれぞれの違いをまとめてみました。比較表からわかる通り、OSログインの場合Googleアカウントベースでの制限が可能になります。
各ログイン方法の比較
ログイン方法 | 鍵の所在 | 制限範囲 | 制限方法 |
---|---|---|---|
SSHキーの場合 | 個別管理 | プロジェクト インスタンス |
メタデータに鍵を登録するか否か |
Compute APIの場合 (gcloud,console) |
SSH接続時にGoogleが自動生成 | プロジェクト | IAM |
OSログインの場合(※1) | G Suite Cloud Identity Service Account gmail |
プロジェクト インスタンス |
IAM(※2) 以下の役割が対象です。
|
表1. 各ログイン方法の比較
※1 以下のGCEに対するOSログインは非対象です。
- Container-Optimized OS
- Core OS
- SLES
- Windows Server
- SQL Server
※2 gmailや組織外のアカウントの場合、役割「Compute OS Login External User」が別途必要になります。
GCPの組織リソースに関する説明は公式ドキュメントを参照ください。
OSログインを実際に設定してみた
それでは実際にOSログインの設定をおこなってみましょう。設定手順はとても簡単です。
1.プロジェクト or インスタンスメタデータの設定
プロジェクト内で制限したい場合はプロジェクトメタデータ、個別でインスタンスを制限したい場合はインスタンスメタデータに設定をおこないます。用途に応じて、2つの設定を使い分けましょう。
1-1.プロジェクトメタデータの設定をおこなう
まずはプロジェクトメタデータの設定手順について説明します。
GCP Console へアクセスし、左側メニューから[Compute Engine]-[メタデータ]を選択します。
メタデータ画面に遷移後「項目を追加」ボタンを押下し、Keyに「enable-oslogin」、 Valueに「TRUE」を設定し「保存」ボタンを押下します。
以上で設定は完了です。設定は非常に簡単ですね。
1-2.インスタンスメタデータへの設定方法
次にインスタンスメタデータの設定方法について説明します。まずは左側のメニューから[Compute Engine]-[VMインスタンス]を選択してください。
任意のVMインスタンスの編集画面に遷移、もしくは作成画面に遷移し、
「メタデータ」に対してKeyに「enable-oslogin」、Valueに「TRUE」を設定します。
これでメタデータの設定は完了です。前述した通り、インスタンスメタデータとプロジェクトメタデータは用途に応じて使い分けてください。
2.IAM の役割を付与
OSログインの設定完了後、SSH接続するアカウントをIAMによって設定します。GCPコンソールの左メニューから[ IAM と管理] -[IAM] を選択します。
IAM画面に遷移後、新規アカウントの追加、もしくは既存アカウントの権限変更で前述した役割(表1の「OSログインの場合」-「制限方法」に記載)を付与します。
※サービスアカウント ユーザーを設定したい場合は、以下画像の通り[Service Accounts]-[サービスアカウント ユーザー]を選択して役割を設定します。
以上でIAMの設定も完了です。これでOSログインが可能になりました。
OSログイン設定後の挙動を確認してみた
実際にどういった挙動をするか確認しましょう。例えば、以下のような「役割」に「参照者」を保持するユーザがあるとします。
参照者だけなので、SSH接続はできないはずです。
任意のVMインスタンスに対してenable-oslogin を有効にし、実際にテストをおこなってみましょう。VMインスタンス一覧から先ほどenable-osloginを有効にしたVMインスタンスに対して「SSH」をクリックして接続してみます。
以下の通り、SSH接続に失敗しました。
権限エラーが出ていることが確認できます。それでは次にIAMで役割を付与します。
以下の画像を参考にOSログインの役割を追加します。
同様のインスタンスに対してSSH接続をすると…
無事ログインできました!!
このようにメタデータで機能を有効にすることでインスタンスやプロジェクト単位でSSH接続に制限がかけられます。設定は前述した通り非常に簡単です。
メタデータでは、他にもスタートアップスクリプトを設定できたりライブマイグレーションのメンテナンスイベントを通知設定が可能です。
今回はenable-oslogin でIAMによる制限方法をご紹介しましたが、他の設定も試してみてはいかがでしょうか。