このドキュメントでは、ゲスト環境の重要なコンポーネントであるゲスト エージェントのコア機能の概要について説明します。ゲスト環境には、Compute Engine でインスタンスを実行するために必要なスクリプト、デーモン、バイナリが含まれています。詳細については、ゲスト環境をご覧ください。
ゲスト エージェントの仕組み
バージョン 20250901.00
以降、ゲスト エージェントはプラグイン ベースのアーキテクチャを使用します。この設計により、エージェントの機能を個別のコンポーネントに分離することで、信頼性と柔軟性が向上します。
ゲスト エージェントのアーキテクチャは、いくつかの主要コンポーネントで構成されています。
- ゲスト エージェント マネージャー: すべてのプラグインを起動、停止、モニタリングするインスタンスの中央プロセス。
- コアプラグイン: このプラグインは、インスタンスが Google Cloudで実行するために必要な必須サービスを処理します。この機能は無効にできません。
- オプションのプラグイン: インスタンスを Cloud Monitoring などの他の Google Cloud サービスと統合するプラグインです。これらのプラグインのうち、インスタンスで実行するものを制御できます。
- エージェント コントロール プレーン: Google のバックエンド インフラストラクチャで実行され、オプションのプラグインのライフサイクル(インストールや更新など)を管理するマネージド Google Cloud サービスです。
ゲスト エージェントのアーキテクチャの詳細については、ゲスト エージェントについてをご覧ください。
コア機能
コアプラグインは、インスタンスが Compute Engine で機能するために必要な基本的なサービスを担当します。次のセクションでは、コアプラグインが提供する関数について詳しく説明します。これらの機能の多くは、ゲスト エージェントの構成ファイルを使用してカスタマイズできます。
インスタンスの初期設定と最適化
ゲスト エージェントは、Compute Engine での実行に向けてインスタンスを準備するために、いくつかの設定タスクを実行します。次の表に示すように、一部のタスクは初回起動時のみ実行され、その他のタスクは起動するたびに実行されます。
タスク | 頻度 |
---|---|
SSH ホストキーを生成する | 初回起動時 |
Cloud Storage を使用するための boto 構成を作成する |
初回起動時 |
ローカル SSD 用に最適化する | 起動するたびに |
すべての virtionet デバイスでマルチキューを有効にする |
起動するたびに |
これらの設定タスクは、ゲスト エージェント構成ファイルの InstanceSetup
オプションを構成することで制御できます。たとえば、optimize_local_ssd = false
を設定すると、ローカル SSD の最適化を無効にできます。
システム テレメトリーの収集
ゲスト エージェントは、起動時に基本的なシステム テレメトリー情報を記録し、その後は 24 時間ごとに記録します。記録される情報には次のものが含まれます。
- ゲスト エージェントのバージョンとアーキテクチャ
- オペレーティング システムの名前とバージョン
- オペレーティング システム カーネルのリリースとバージョン
メタデータキー disable-guest-telemetry
を true
に設定すると、テレメトリー収集を無効にできます。メタデータを設定するには、カスタム メタデータの設定と削除をご覧ください。
クロック同期(Linux のみ)
正確な時刻を維持するため、ゲスト エージェントは clock_skew_daemon
コンポーネントを使用して、インスタンスのクロックを定期的に修正し、実行されている物理サーバーと一致させます。このプロセスにより、クロック スキューと呼ばれる問題が回避され、インスタンス ログに system time has changed
メッセージが生成されます。このメッセージは、時刻が正常に同期されたことを確認します。
通常、エージェントは停止イベントまたは開始イベントの後、または移行後にクロックを同期します。
ゲスト エージェント構成ファイルで clock_skew_daemon = false
を設定すると、clock_skew_daemon
コンポーネントを無効にできます。
メタデータ スクリプトの実行
起動スクリプトとシャットダウン スクリプトを使用すると、インスタンスが起動または停止するたびに自動タスクを実行できます。
ゲスト エージェントは、これらのスクリプトの実行を次のようにサポートします。
- シェルでスクリプトを実行します。
- 複数のスクリプトを指定した場合(
startup-script
とstartup-script-url
の両方を使用する場合など)、エージェントは両方を実行します。 - 同じイベントに複数のスクリプトが指定されている場合、エージェントはまず URL のスクリプトを実行します。
- スクリプトが終了すると、エージェントは終了ステータスをログに記録します。
メタデータ スクリプトの実行を構成するには、ゲスト エージェント構成ファイルで MetadataScripts
オプションを変更します。
ユーザー アカウントと SSH 認証鍵の管理
ゲスト エージェントは accounts_daemon
を使用して、インスタンスへのアクセスを制御するローカル ユーザー アカウントと SSH 認証鍵を管理します。具体的な動作は、Linux オペレーティング システムと Windows オペレーティング システムで異なります。
ゲスト エージェントの構成ファイルで Accounts
オプションを構成すると、アカウント管理オプションを変更できます。
Linux
OS Login は、個別の SSH 認証鍵を作成、管理することなく、IAM を使用してインスタンスへの SSH アクセスを管理する場合に使用します。OS Login の詳細については、OS Login をご覧ください。Linux インスタンスで OS Login が有効になっていない場合、エージェントはメタデータ設定を使用してローカル ユーザー アカウントとその SSH 認証鍵を作成して管理します。
インスタンスまたはプロジェクトのメタデータから SSH 認証鍵を追加または削除すると、ゲスト エージェントはローカル ユーザー アカウントを作成または削除します。ゲスト エージェントは、これらのローカル ユーザー アカウントを管理するために次の操作も行います。
- 管理する各ユーザー アカウントの
authorized_keys
ファイルを次のように保持します。- SSH 認証鍵をメタデータに追加すると、エージェントはユーザー アカウントの
authorized_keys
ファイルを作成します。 - メタデータからユーザーのすべての SSH 認証鍵を削除すると、エージェントはそのユーザー アカウントの
authorized_keys
ファイルを削除します。
- SSH 認証鍵をメタデータに追加すると、エージェントはユーザー アカウントの
google-sudoers
Linux グループを使用して管理者権限を管理します。このグループのメンバーには、インスタンスに対する sudo 権限が付与されます。- プロビジョニングするすべてのユーザー アカウントを
google-sudoers
グループに追加します。 - ゲスト エージェント構成ファイルの
groups
オプションで指定した追加の Linux グループにユーザー アカウントを追加します。
Windows
Windows インスタンスでは、インスタンスまたはプロジェクト レベルのメタデータ SSH 認証鍵で指定された SSH ユーザー アカウントに対して、エージェントがローカル ユーザー アカウントを自動的に作成します。ゲスト エージェントは、ユーザー アカウントの作成とパスワードの設定またはリセットも処理します。これらのローカル ユーザー アカウントは、SSH を使用して Windows インスタンスに接続するために必要です。
意図しない AD ユーザーのプロビジョニングを防ぐには、AD コントローラ インスタンスでアカウント マネージャーを無効にします。Compute Engine で AD を設定する方法については、ドメイン コントローラをデプロイするをご覧ください。
OS Login の構成(Linux のみ)
OS Login は、個別の SSH 認証鍵を作成、管理することなく、IAM を使用してインスタンスへの SSH アクセスを管理する場合に使用します。OS Login の詳細については、OS Login のドキュメントをご覧ください。
OS Login を有効にすると、ゲスト エージェントが OS Login を使用するようにインスタンスを構成します。
ゲスト エージェントは、次のタスクを完了して OS Login を構成します。
SSHD
構成ファイルに Google 構成ブロックを追加し、SSHD
を再起動します。nsswitch.conf
ファイルに OS Login エントリを追加します。SSHD
のPAM
構成ファイルに OS Login エントリを追加します。
OS Login を無効にすると、構成の変更が削除されます。SSHD
構成ファイルの Accounts
セクションのオプションは、OS Login ユーザーには適用されません。
ネットワーク管理
ゲスト エージェントは、起動時にインスタンスのネットワーク インターフェースを自動的に構成します。メタデータ サーバーからネットワーク構成を読み取り、インスタンスがネットワークに正しく接続され、他の Google Cloudサービスにアクセスできることを確認します。
ゲスト エージェントの構成ファイルで NetworkInterfaces
オプションを構成することで、エージェントのネットワーク管理動作を制御できます。たとえば、manage_primary_nic = true
オプションを設定して、エージェントがセカンダリ NIC に加えてプライマリ ネットワーク インターフェース カード(NIC)を管理するようにできます。
起動するたびに、ゲスト エージェントは次の主要なタスクを実行します。
- ネットワーク インターフェースを有効にする: エージェントは、OS でアクティブなネットワーク マネージャーを検出し、それを使用してすべてのセカンダリ ネットワーク NIC を有効にします。
- IP ルートを構成する: エージェントは、IP 転送やエイリアス IP 範囲などの機能に必要な IP(IPv4 のみ)ルートを次のように設定します。
- プライマリ イーサネット インターフェースのルートを設定します。
- デフォルトで、ルーティング プロトコル ID
66
を使用して Google ルートを構成します。この ID は、構成されたゲスト エージェントの IP アドレスの Namespace です。この ID は、ゲスト エージェントの構成ファイルでethernet_proto_id
オプションを使用して変更できます。
- メタデータ サーバーへのルートを作成する: エージェントは、プライマリ NIC が常にメタデータ サーバーと通信してインスタンス情報を取得できるようにします。
- VLAN 構成: インスタンスが Virtual Local Area Network(VLAN)に接続するように構成されている場合、ゲスト エージェントが自動的に設定を処理します。メタデータ サーバーから VLAN 構成を読み取り、インスタンス内のネットワーク インターフェースを構成して正しい VLAN タグを使用します。これにより、インスタンスが意図した論理ネットワークで通信できるようになります。重要な点として、VLAN がプライマリ NIC に関連付けられている場合、
manage_primary_nic
が無効になっていても、ゲスト エージェントは VLAN を構成します。
ネットワーク マネージャーの選択
Linux では、ゲスト エージェントはシステムで使用可能なネットワーク マネージャーを自動的に検出し、それを使用してネットワーク インターフェースを構成します。エージェントは、優先順位の高い順(netplan
から dhclient
)にサポートされているマネージャーを確認します。
次の表に、サポートされているネットワーク マネージャーを、デフォルトで最も関連付けられているオペレーティング システム別に示します。特定のインスタンス構成は異なる場合がありますが、この表には、記載されているオペレーティング システムのデフォルトのネットワーク マネージャーが反映されています。
ネットワーク マネージャー | オペレーティング システム | 構成の場所 | パスの例 | メモ |
---|---|---|---|---|
netplan |
|
/run/netplan/ |
/run/netplan/20-google-guest-agent-eth0.yaml |
エージェントは /etc/systemd/network/ のドロップインの場所を使用することもあります。 |
wicked |
|
/etc/sysconfig/network/ |
/etc/sysconfig/network/ifcfg-eth0 |
既存の ifcfg ファイルは上書きされず、スキップされます。 |
NetworkManager |
|
/etc/NetworkManager/system-connections/ |
/etc/NetworkManager/system-connections/google-guest-agent-eth0.nmconnection |
|
systemd-networkd |
|
/usr/lib/systemd/network/ |
/usr/lib/systemd/network/20-eth0-google-guest-agent.network |
|
dhclient |
|
/run/ |
/run/dhclient.google-guest-agent.eth0.ipv4.pid |
他のネットワーク マネージャーが検出されない場合、ゲスト エージェントはデフォルトで dhclient を使用します。 |
安全なメタデータ サーバー(MDS)の認証情報管理
Shielded VM は、HTTPS エンドポイント https://metadata.google.internal/computeMetadata/v1
を使用してメタデータ サーバーとの安全な通信をサポートするようになりました。この機能強化により、メタデータ アクセス用のより安全なチャネルが提供されます。
この安全な通信を有効にするため、ゲスト エージェントは必要な認証情報を取得してインスタンスのディスクに保存します。これらの認証情報は標準の場所に保存されるため、インスタンスで実行されているすべてのクライアント アプリケーションからアクセスできます。これらの場所を確認するには、証明書の保存場所をご覧ください。
HTTPS MDS 証明書の設定はデフォルトで無効になっています。シールド VM で HTTPS MDS 証明書を自動的に設定するには、インスタンスまたはプロジェクトの disable-https-mds-setup
メタデータキーを false
に設定します。メタデータを設定するには、カスタム メタデータの設定と削除をご覧ください。
ゲスト エージェントによる認証情報の管理には、次のものが含まれます。
- 初回更新: ゲスト エージェント プロセスが開始されるたびに、ルート証明書とクライアント認証情報の両方が更新されます。
- 自動更新: セキュリティを強化するため、ゲスト エージェントは 48 時間ごとにクライアント認証情報を自動的に更新します。
- 重複期間: エージェントは新しい認証情報を生成して保存しますが、古い認証情報は有効なままです。重複期間により、クライアントは古い認証情報の有効期限が切れる前に、新しい認証情報に移行するのに十分な時間を確保できます。この重複期間により、エージェントは失敗した場合に認証情報の取得を再試行できます。これにより、既存の認証情報が無効になる前に有効な認証情報が確実に配置されます。
- 構成: ゲスト エージェントは、クライアント認証情報がクライアント証明書と連結された EC(楕円曲線)秘密鍵で構成されていることを確認します。
- 一意性: ゲスト エージェントは、認証情報がインスタンスに固有であり、他の場所で使用できないようにします。
HTTPS メタデータ サーバー エンドポイントの詳細については、HTTPS メタデータ サーバー エンドポイントについてをご覧ください。
デフォルトでは、ゲスト エージェントは証明書をディスクに直接書き込みます。ただし、証明書をオペレーティング システムの組み込み証明書ストアに統合するようにエージェントを構成できます。この統合を有効にするには、enable-https-mds-native-cert-store
メタデータキーを true
に設定します。メタデータを設定するには、カスタム メタデータの設定と削除をご覧ください。
証明書を OS トラストストアに追加するエージェントの動作は、OS によって次のように異なります。
Linux
ゲスト エージェントは次の手順を実行します。
- MDS ルート証明書をシステムのトラストストアに追加します。具体的なパスは、OS ディストリビューションによって異なります。これらの場所を確認するには、OS トラストストアでのルート証明書の保存をご覧ください。
update-ca-certificates
やupdate-ca-trust
など、OS に適したコマンドを実行して、ローカル トラスト ストアを更新します。
Windows
エージェントは、クライアント認証情報を Cert:\LocalMachine\My
に、ルート証明書を Cert:\LocalMachine\Root
に追加します。
Windows フェイルオーバー クラスタのサポート(Windows のみ)
ゲスト エージェントは、Windows Server フェイルオーバー クラスタ内のアクティブ ノードをモニタリングし、 Google Cloud 内部ロードバランサと連携して、すべてのクラスタ トラフィックを想定されるノードに転送します。
この動作は、インスタンス メタデータまたは instance_configs.cfg
ファイルで次のフィールドを使用して制御できます。
enable-wsfc
:true
に設定すると、エージェントはすべての IP 転送情報を無視し、ヘルスチェック ポートへの応答を開始します。デフォルトの設定はfalse
です。wsfc-agent-port
: エージェントがヘルスチェックに応答するポートを指定します。デフォルトの設定は59998
です。wsfc-addrs
: IP アドレスのカンマ区切りリスト。この詳細設定を使用すると、同じインスタンスに通常の転送 IP とクラスタ IP の両方を使用できます。この設定を行うと、エージェントはこのリスト内の IP の自動構成のみをスキップします。デフォルトでは、この値は設定されていません。
次のステップ
- ゲスト エージェントの管理方法については、ゲスト エージェントを構成するをご覧ください。