本日も乙

ただの自己満足な備忘録。

OS LoginでGCEインスタンスへのSSH接続を管理する

皆さんはサーバにログインするユーザをどのように管理してますか?サーバ毎にユーザを作る、LDAP、Active Directoryが挙げられます。

私たちはパブリッククラウドを使っているので、サーバにログインするユーザとは別のユーザも必要になります。アカウントの種類が増えると管理コストも増えてきます。新入社員、異動、退職の度にアカウントを発行したり権限を変更したり削除したりと大変です。消し忘れもあるといけないので定期的に棚卸も必要です。

話が逸れましたが管理するアカウントが少ないことにこしたことはないでしょう。中でサーバログイン系やクラウド系は権限設定がともなうのでできれば無くしてしまいたい。

GCPのOS Loginという仕組みを使うことで、ログインアカウントとクラウドのアカウントを統合することができます。

OS Loginでログインするメリット

OS Loginを使うことで、SSH接続および管理者権限の有無を Cloud IAM で制御できます。

  • どのユーザがインスタンスに接続するか
  • ユーザがどのインスタンスにSSHログインできるか
  • ユーザへの管理者権限の有無

これらを必要に応じて細かに設定することができるようになります。

Windows Serverは未サポート

使えたら便利なのですが、現時点ではLinuxのみです。

OSログインを有効にする

メタデータ(Key enable-oslogin 、Value TRUE)を設定することで有効化されます。有効化には二通りあります。

プロジェクト内のすべてのインスタンスに適用する

Compute Engine → メタデータ に飛び、そこでメタデータを設定すると、プロジェクト全体に対して適用されます。

os-login1.png

インスタンスレベルで適用する

インスタンスの編集画面から「カスタム メタデータ」で設定すると、そのインスタンスに対して適用されます。

os-login2.png

ユーザアカウントにログインの権限を付与する

以下の権限(AとB)をユーザに付与します。

  • A: サービスアカウントユーザ (iam.serviceAccountUser)。「Service Accounts」から選択します
  • B: 以下のいずれか
    • Compute OS ログイン
      • 管理者権限(sudo)は実行できない。一般ユーザのみ
    • Compute OS 管理者ログイン
      • 管理者権限(sudo)を実行できる

os-login3.png

ログイン

gcloudコマンドでいつもと同じようにログインします。

$ gcloud compute ssh test-instance001 --project sample-project
WARNING: Using OS Login user [ohsawa_example_com] instead of default user [ohsawa]

groups: cannot find name for group ID 123456789
ohsawa_example_com@test-instance001:~$ id
uid=234567890(ohsawa_example_com) gid=123456789 groups=

OS Loginを使わない場合はG Suiteのアカウント(私の場合 ohsawa ユーザ)でログインしていましたが、OS Login だと ohsawa_[組織] にユーザ名が変更になりました。

groups: cannot find name for group ID 123456789 というエラーが出ていますが、ドキュメントには無視しろと書いています。

OS ログインを使用するときは、接続が確立された後に次のエラー メッセージが返されることがあります。

/usr/bin/id: cannot find name for group ID 123456789 このエラー メッセージは無視してください。 https://cloud.google.com/compute/docs/instances/managing-instance-access#login_messages

「Compute OS ログイン」権限が付与されているユーザは sudo しようとするとパスワードを求められ、 sudo を実行できません。 「Compute OS 管理者ログイン」権限が付与されている場合は、パスワード無しで sudo を実行できます。

$ sudo su -
[sudo] password for ohsawa_example_com:
Sorry, try again.
[sudo] password for ohsawa_example_com:
Sorry, try again.
[sudo] password for ohsawa_example_com:
Sorry, try again.
sudo: 3 incorrect password attempts

SSH公開鍵をユーザアカウントに関連付ける

gcloud ssh コマンドによって生成されたSSH鍵以外に、自分で生成したSSH公開鍵を登録することができます。 --ttl 0 は公開鍵の有効期限がないことを示すオプション。

$ gcloud compute os-login ssh-keys add \
    --key-file [公開鍵のファイルパス] \
    --ttl 0

参考