このドキュメントでは、メタデータ サーバーを使用して OS Login のトラブルシューティングを行う方法について説明します。OS Login の設定や手順の詳細については、OS Login を設定するをご覧ください。
仮想マシン(VM)インスタンスの内部からメタデータ サーバーに対してクエリを行うことができます。詳細については、インスタンス メタデータの格納と取得をご覧ください。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、 Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
- 削除したアカウントを復元する。
- アカウントを削除する前に、アカウントの POSIX 情報を削除する。
gcloud compute os-login describe-profile
コマンドを実行して、OS Login プロファイルを表示します。gcloud compute os-login describe-profile
出力は次のようになります。
name: '00000000000000' posixAccounts: ... sshPublicKeys: ...: fingerprint: ... key: | ssh-rsa AAAAB3NzaC1yc2... name: ... ...
出力を確認して、未使用の SSH 認証鍵を特定します。
gcloud compute os-login ssh-keys remove
コマンドを使用して、未使用の鍵を出力から削除します。gcloud compute os-login ssh-keys remove --key=KEY
KEY
は、鍵のフィンガープリントまたは鍵文字列に置き換えます。- アプリケーション コードに再試行メカニズムを実装します。詳細については、次をご覧ください。
- 既存の SSH 接続を再利用します。
- コマンドをバッチで送信して、SSH 接続と OS Login メタデータ クエリを減らします。
ユーザー プロフィールにクエリを実行して、
name
フィールドの値を取得します。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
出力で、
name
をメモします。name
の値を使用して、次のlogin
コマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
- OS Login の詳細を確認する。
- Compute Engine での Linux VM への SSH 接続の仕組みを学習する。
- 手順については、次のいずれかをご覧ください。
- 組織での OS Login の管理を確認する。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
一般的なエラー メッセージ
OS Login の使用時に発生する可能性のある一般的なエラーの例を次に示します。
グループの名前が見つからない
OS Login を使用するときは、接続が確立された後に次のエラー メッセージが返されることがあります。
/usr/bin/id: cannot find name for group ID 123456789
このエラー メッセージは無視してください。このエラーはインスタンスには影響しません。
グループの取得に失敗した
VM を作成する際に、次のようなログが表示されることがあります。
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting
これらのログは、組織で OS Login の Linux グループが構成されていないことを示します。このようなメッセージは無視してください。
前提条件でのエラー
SSH を使用して VM に接続すると、次のようなエラーが表示されることがあります。
ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.
このエラーは、OS Login が組織内にすでに存在するユーザー名を生成しようとした場合に発生します。これは、ユーザー アカウントが削除され、その直後に同じメールアドレスを持つ新しいユーザーが作成された場合によく発生します。ユーザー アカウントの削除後、ユーザーの POSIX 情報が削除されるまでに最長で 48 時間かかります。
この問題を解決するには、以下のいずれかを行います。
無効な引数
SSH を使用して VM に接続するか、SCP を使用してファイルを転送すると、次のようなエラーが表示されることがあります。
ERROR: (gcloud.compute.ssh) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
このエラーを解決するには、次の操作を行います。
この問題の再発を防ぐには、SSH 認証鍵の有効期限を追加します。期限切れの鍵は、期限が切れてから 48 時間後、または新しい鍵をプロファイルに追加したときに、ログイン プロファイルから自動的に削除されます。
HTTP レスポンス コード: 429
SSH を使用して VM に接続しようとすると、次のエラーが表示されることがあります。
Failed to validate organization user USERNAME has login permission, got HTTP response code: 429
この問題は、メタデータ サーバーのレート制限(仮想マシン インスタンスあたりの秒間クエリ数が 100)が原因で発生します。この上限は調整できません。この問題を解決するには、数秒待ってから、接続を再試行します。
今後、この問題を回避するには、次のことを試してください。
OS Login のデフォルト メタデータ エントリ
Compute Engine では、OS Login の情報を提供する一連のデフォルト メタデータ エントリが定義されています。デフォルト メタデータは常にサーバーによって定義され、設定されます。デフォルトのメタデータキーは大文字と小文字が区別されます。
次の表にクエリ可能なエントリを示します。
パスの基準: http://metadata.google.internal/computeMetadata/v1/
メタデータ エントリ 説明 project/attributes/enable-oslogin
現在の Google Cloud プロジェクトで OS Login が有効になっているかどうかを確認します。 instance/attributes/enable-oslogin
現在の VM で OS Login が有効であるかどうかを確認します。 oslogin/users/
OS Login ユーザーのプロファイル情報を取得します。 username
、uid
、pagesize
、pagetoken
などのクエリ パラメータを渡すことができます。oslogin/authorize/
OS Login ユーザーのログインまたは管理レベルの権限設定を取得します。
権限を確認するには、
policy
クエリ パラメータを指定する必要があります。ポリシー パラメータの値は、login
(ログイン権限を確認)またはadminLogin
(sudo アクセスを確認)に設定する必要があります。OS Login が構成されているかどうかの確認
Google Cloud コンソールまたは Google Cloud CLI を使用してメタデータをクエリして、OS Login が有効かどうかを確認します。プロジェクトまたはインスタンス メタデータで
enable-oslogin
メタデータキーがTRUE
に設定されている場合、OS Login は有効です。インスタンス メタデータとプロジェクト メタデータの両方が設定されている場合、インスタンス メタデータで設定された値が優先されます。OS Login ユーザーの表示
複数のユーザーのプロファイル情報を表示するには、
pagesize
パラメータとpagetoken
パラメータを指定する必要があります。pagesize
とpagetoken
は必要な数値に置き換えます。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE& pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"
たとえば、
pagesize
を1
に設定し、pagetoken
を0
に設定するには、次のコマンドを実行します。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"
ほとんどのディストリビューションでは、Unix コマンド
getent passwd
を実行して組織ユーザーのパスワード エントリを取得できます。特定の OS Login ユーザーの表示
VM の特定のユーザーのプロフィール情報を表示するには、次のコマンドを実行します。
curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"
USERNAME
は、クエリを実行するユーザーのユーザー名に置き換えます。たとえば、ユーザー
user_example_com
を参照するリクエストを行うことができます。次のコマンドと出力の表示では、読みやすくするために書式が追加されています。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
出力は次のようになります。
{ "loginProfiles": [{ "name": "12345678912345", "posixAccounts": [{ "primary": true, "username": "user_example_com", "uid": "123451", "gid": "123451", "homeDirectory": "/home/user_example_com", "operatingSystemType": "LINUX" }], "sshPublicKeys": { "204c4b4fb...": { "key": "ssh-rsa AAAAB3Nz...", "fingerprint": "204c4b4fb..." } } }] }
ほとんどのディストリビューションでは、
getent passwd username
やgetent passwd uid
などの Unix コマンドを実行してプロファイル情報を取得できます。ユーザーの SSH 認証鍵を取得するには、
/usr/bin/google_authorized_keys USERNAME
を実行するという方法もあります。鍵が返されない場合、そのユーザーは VM へのログインに必要な権限を持っていない可能性があります。ログイン権限の確認
ログインの権限と管理レベルの権限を表示するには、
policy=login&email=LOGIN_NAME
クエリ パラメータを指定する必要があります。たとえば、前のセクションで表示したユーザー
user_example_com
のログイン権限をクエリで取得できます。curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"
コマンド出力では、ユーザーが VM にログインする権限を持っていることを示しています。
{"success":true}
VM にサービス アカウントがあるかどうかの確認
メタデータ サーバーに対してクエリを行い、VM に関連付けられているサービス アカウントの有無を確認できます。VM で次のコマンドを実行します。
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"
出力は次のようになります。
12345-sa@developer.gserviceaccount.com/ default/
サービス アカウントが見つからない場合、出力は空白になります。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-07-11 UTC。
-