Vertex AI Workbench のユーザー管理のノートブックとインスタンスでroot アクセスを有効・無効で作成した時の差を調べてみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データ事業部の根本です。以前、新しい Vertex AI Workbench のユーザー管理のノートブックとインスタンスで root アクセスを無効にするポリシーの記事を書いたときに、rootアクセスを有効・無効にした場合具体的にどういった箇所の設定が変わっているのかが気になっていました。なので今回はその違い実際に調べてみました。
目標
Vertex AI Workbench のユーザー管理のノートブックとインスタンスでrootアクセスを有効・無効にした場合どの設定が変わっているのか確かめることが今回の目標です。
以前rootアクセスを有効にした時は、sudoコマンドをパスワードなしで実行できました(以前のブログで確認済みです。 よって、rootアクセスを有効/無効にした場合sudoersファイルやグループ関連で何か違いがあるのではないかと思っていました。
まずはrootアクセスを有効にしたパターンを調査する
まず、rootアクセスを有効にしてインスタンスを作成してみました。作成後、Vertex AI WorkbenchのコンソールからJupyter Labへアクセスしてterminalにてidコマンドを実行して現在の所属グループなどを確認します。以下が実行コマンドと出力です。
(base) jupyter@instance-20240708-141438:~$id
uid=1000(jupyter) gid=1001(jupyter) groups=1001(jupyter),4(adm),27(sudo),997(docker),1000(google-sudoers)
出力を整理すると以下となります。
ユーザー情報
| パラメータ | 値 |
|---|---|
| ユーザーID (UID) | 1000 (jupyter) |
| グループID (GID) | 1001 (jupyter) |
グループ情報
| グループID | グループ名 | 説明 |
|---|---|---|
| 1001 | jupyter | プライマリグループ |
| 4 | adm | システムの管理タスクを実行するための特権を持つ |
| 27 | sudo | sudo コマンドを使用して root 権限でコマンドを実行できる |
| 997 | docker | Docker コマンドを実行するための特権を持つ |
| 1000 | google-sudoers | Google Cloud Platform(GCP)環境で特定の管理タスクを実行するための特権を持つ |
上記より現在使用しているユーザjupyterが、sudoとgoogle-sudoersグループに所属していることが確認できました。
それでは続けてsudoersファイルも確認してみます。
以下が実行コマンドと出力(抜粋)です。
(base) jupyter@instance-20240708-141438:~$ sudo cat /etc/sudoers
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d
@includedirでインクルードしている内容は以下でした
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
上記より、google-sudoersグループに属しているユーザはすべてのホストで、すべてのユーザーとして、すべてのコマンドをパスワードなしで実行できることになります。
また、NOPASSWD:ALLの設定があるのでrootアクセスをした場合にはsudoコマンドをパスワードなしで使用することができるわけです。
rootアクセスを無効にしたパターンを調査する
rootアクセスを無効にした状態でインスタンスを作成しました。先ほどと同様にコマンドでユーザ情報を確認します。
(base) jupyter@instance-20240708-145641:~$ id
uid=1000(jupyter) gid=1001(jupyter) groups=1001(jupyter),4(adm),997(docker)
出力を整理すると以下となります。
ユーザー情報
| パラメータ | 値 |
|---|---|
| ユーザーID (UID) | 1000 (jupyter) |
| グループID (GID) | 1001 (jupyter) |
グループ情報
| グループID | グループ名 | 説明 |
|---|---|---|
| 1001 | jupyter | プライマリグループ |
| 4 | adm | システムの管理タスクを実行するための特権を持つ |
| 997 | docker | Docker コマンドを実行するための特権を持つ |
ユーザ情報は特に変更がないですが、グループ情報にsudoやgoogle-sudoersが見当たりません。
sudoersファイルも確認してみます。
rootアクセスを無効化してインスタンス作成しているため、jupyterユーザにはsudoコマンドを実行することができません。よって今回はCloud Shellからcompute sshコマンドでインスタンスにアクセスしてsudoersファイルを確認しました。compute sshコマンドでインスタンスに接続するとデフォルトではLinux Userのパスワードは設定されていないのでsudo passwdでrootユーザのパスワードを設定することができます。そうすることでsudoコマンドも使えるようになるので確認できるという寸法です。
$ gcloud compute ssh インスタンス名 --zone=asia-northeast1-a
でインスタンスにsshをします。
$ sudo passwd
にてrootユーザのパスワードを設定します。
そしてsudoersを確認します。
$ sudo cat /etc/sudoers
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d
同じですね・・・
つまり、rootアクセスの有効無効ではjupyterユーザの所属グループに違いがある(sudo・google-sudoersに所属している)ということに起因するようです!
まとめ
以下がrootアクセスを有効・無効にした時のグループをまとめた表です。
| rootアクセス有効・無効 | グループID | グループ名 | 説明 |
|---|---|---|---|
| 有効 | 27 | sudo | sudo コマンドを使用して root 権限でコマンドを実行できる |
| 有効 | 1000 | google-sudoers | Google Cloud Platform(GCP)環境で特定の管理タスク |
| 有効・無効 | 1001 | jupyter | プライマリグループ |
| 有効・無効 | 4 | adm | システムの管理タスクを実行するための特権を持つ |
| 有効・無効 | 997 | docker | Docker コマンドを実行するための特権を持つ |
私の持てる知識で確認したところ、rootアクセスを有効化するとインスタンス作成時にsudo・google-sudoersグループにjupyterユーザを追加してくれるということが結論でした。
他にも差分があるかもなのですが調査しきれませんでした・・・
もしこの記事が、Vertex AIのrootアクセスの有効・無効の違いが気になっているかたのお役に立っていたらとても嬉しいです。それではまた。






