ゲストポリシーを使用して、Linux および Windows 仮想マシン(VM)インスタンス全体で一貫したソフトウェア構成を維持します。
一連の VM にゲストポリシーを設定するには、次の手順を実行します。
- ユーザーに必要な権限を割り当てます。
- VM を設定します。
- ゲストポリシーの JSON ファイルまたは YAML ファイルを構成します。
- ゲストポリシーを作成します。
始める前に
- OS Config の割り当てを確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
制限事項
- ターゲット VM の場合、ゲストがサービスにチェックインするたびにゲストポリシーが更新されます。このチェックは 10~15 分ごとに行われます。
- この従来の OS ゲストポリシーで利用できるコンプライアンス ダッシュボード、通知、アラート サービスはありません。OS Config エージェントを実行していない VM はエラーを報告しません。最良の結果を得るには、OS Inventory Management サービスまたはその他のコンプライアンス モニタリング ツールでこの機能を使用します。
特定の名前のソフトウェア レシピは、ゲストポリシーを作成するときに 1 回だけ実行されます。ソフトウェア レシピを再実行するには、次の操作を行う必要があります。
- ソフトウェア レシピの名前を変更します。
- ゲストポリシーを削除し、名前を変更したソフトウェア レシピを使用してゲストポリシーを再作成します。
権限
ゲストポリシーを使用して VM にソフトウェア パッケージをインストールして管理できるため、ゲストポリシーを作成して管理することは VM でリモートコード実行アクセス権を付与することと同等です。
ゲストポリシーを設定すると、IAM 権限を使用してポリシー リソースとアクセスが制御され、アクティビティが監査ログに記録されます。引き続き VM でコードを実行することは可能ですが、これは潜在的なセキュリティ リスクをもたらす可能性があります。この問題を軽減するため、必要なアクセス権のみを各ユーザーに付与することをおすすめします。
プロジェクトのオーナーは、ポリシーを作成して管理するための完全アクセス権を持ちます。それ以外のすべてのユーザーにはアクセス権限を付与する必要があります。次のいずれかの詳細なロールを付与できます。
- GuestPolicy 管理者(
roles/osconfig.guestPolicyAdmin
)。ゲストポリシーを作成、削除、更新、取得、一覧表示する権限を持ちます。 - GuestPolicy 編集者(
roles/osconfig.guestPolicyEditor
)。ゲストポリシーを取得、更新、一覧表示する権限を持ちます。 - GuestPolicy 閲覧者(
roles/osconfig.guestPolicyViewer
)。ゲストポリシーを取得して一覧表示するための読み取り専用アクセス権を持ちます。
たとえば、ユーザー管理者にゲストポリシーへのアクセスを許可するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:USER_ID@gmail.com \ --role roles/osconfig.guestPolicyAdmin
以下を置き換えます。
PROJECT_ID
: プロジェクト ID。USER_ID
: ユーザーの Google Workspace のユーザー名。
VM を設定する
ゲストポリシーを使用するには、VM Manager を設定する必要があります。
ゲストポリシーの YAML ファイルまたは JSON ファイルを構成する
JSON ファイルまたは YAML ファイルを使用してゲストポリシーの仕様を指定する必要があります。サンプル構成を表示するには、ゲストポリシー YAML ファイルの例をご覧ください。
YAML ファイルまたは JSON ファイルには、次の 2 つのメイン セクションがあります。
割り当て
プロジェクト内のすべての VM に対してゲストポリシーを割り当てることができます。または、JSON ファイルや YAML ファイルの assignment
キーを使用し、特定の VM のグループをターゲットにできます。
たとえば、次のいずれかの特性を使用して VM のグループを対象にできます。
- インスタンス名。例 1 をご覧ください。
- インスタンス名のプレフィックス。例 2 をご覧ください。
- インスタンス ラベル。例 3 をご覧ください。
- ゾーン。例 4 をご覧ください。
- OS の名前、バージョン、アーキテクチャを含むオペレーティング システムの情報。例 5 をご覧ください。os-inventory describe コマンドを使用すると、VM の OS 名、バージョン、アーキテクチャを確認できます。
オペレーティング システム情報を使用してゲストポリシーを割り当てるには、OS 構成エージェントが VM のゲスト属性エンドポイントにオペレーティング システム情報を送信する必要があります。プライバシーを確保するため、デフォルトでは VM のオペレーティング システム情報は使用できません。オペレーティング システム情報ごとに VM をグループ化するには、ゲスト属性と OS Inventory Management サービスを有効にしておく必要があります。これらのサービスを有効にするには、VM を設定するをご覧ください。
ゲストポリシーの構成は、割り当てに一致するすべての新しい VM に自動的に適用されます。
必要な構成
必要な構成を行うには、以下の作業のいずれか行うか、以下の作業を複数組み合わせて行います。
- ソフトウェア パッケージをインストール、削除、自動更新する。例 1 をご覧ください。
- ソフトウェア パッケージ リポジトリを構成する。例 1 または例 3 をご覧ください。
- ソフトウェア レシピを使用してソフトウェアをインストールする。
ゲストポリシーの YAML ファイルの例
例 1
最新の状態に保つ必要のあるパッケージ my-package
を VM インスタンス my-instance-1
と my-instance-2
にインストールします。
assignment: instances: - zones/us-east1-c/instances/my-instance-1 - zones/us-east1-c/instances/my-instance-2 packages: - name: "my-package" desiredState: UPDATED
パッケージのゲストポリシーの割り当ての詳細については、パッケージ JSON 表現のリファレンス ドキュメントをご覧ください。
例 2
yum パッケージ管理システムを使用して、インスタンス名のプレフィックス test-instance-
または dev-instance-
を持つすべての VM インスタンスに Cloud Monitoring エージェントをインストールします。
assignment: instanceNamePrefixes: - "test-instance-" - "dev-instance-" packages: - name: "stackdriver-agent" desiredState: INSTALLED manager: YUM packageRepositories: - yum: id: google-cloud-monitoring displayName: "Google Cloud Monitoring Agent Repository" baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el7-x86_64-all gpgKeys: - https://packages.cloud.google.com/yum/doc/yum-key.gpg - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
パッケージ リポジトリのゲストポリシーの割り当ての詳細については、PackageRepository JSON 表現のリファレンス ドキュメントをご覧ください。
例 3
my-package
をインストールし、特定のラベルセットを持つインスタンスから bad-package-1
と bad-package-2
を削除します。apt パッケージ マネージャーと yum パッケージ マネージャーのリポジトリも追加します。
assignment: # Assign to VM instances where `(label.color=red AND label.env=test) OR (label.color=blue AND label.env=test)` groupLabels: - labels: color: red env: test - labels: color: blue env: test packages: - name: "my-package" desiredState: INSTALLED - name: "bad-package-1" desiredState: REMOVED - name: "bad-package-2" desiredState: REMOVED manager: APT # Only apply this to systems with APT. packageRepositories: - apt: # Only apply this to systems with APT. uri: "https://packages.cloud.google.com/apt" archiveType: DEB distribution: cloud-sdk-stretch components: - main - yum: # Only apply this to systems with YUM. id: google-cloud-sdk displayName: "Google Cloud SDK" baseUrl: https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64 gpgKeys: - https://packages.cloud.google.com/yum/doc/yum-key.gpg - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
- パッケージのゲストポリシーの割り当ての詳細については、パッケージ JSON 表現のリファレンス ドキュメントをご覧ください。
- パッケージ リポジトリのゲストポリシーの割り当ての詳細については、PackageRepository JSON 表現のリファレンス ドキュメントをご覧ください。
例 4
Cloud Storage でホストされている MSI から us-east1-b
と us-east1-d
のすべてのインスタンスにソフトウェアをインストールします。
assignment: zones: - us-east1-b - us-east1-d recipes: - name: "swr-msi-gcs" desiredState: INSTALLED artifacts: - id: "the-msi" gcs: bucket: "my-bucket" object: "executable.msi" # full URI gs://my-bucket/executable.msi#nnnnn generation: 1546030865175603 installSteps: - msiInstallation: artifactId: "the-msi"
レシピポリシーの構成の詳細については、SoftwareRecipe JSON 表現のリファレンス ドキュメントをご覧ください。
例 5
次の要件を満たすすべての VM インスタンスでインライン スクリプトを実行して、ソフトウェアをインストールします。
- オペレーティング システム: Red Hat Enterprise Linux 7
- ラベル:
color=red
assignment: osTypes: - osShortName: rhel osVersion: "7" groupLabels: - labels: color: red recipes: - name: recipe-runscript desiredState: INSTALLED installSteps: - scriptRun: script: |- #!/bin/bash touch /TOUCH_FILE
レシピポリシーの構成の詳細については、SoftwareRecipe JSON 表現のリファレンス ドキュメントをご覧ください。
例 6
インスタンス名接頭辞 test-instance-
を持つ実行可能なインストーラを使用して、すべての Windows インスタンスにアプリケーションをインストールします。
assignment: instanceNamePrefixes: - "test-instance-" osTypes: - osShortName: WINDOWS recipes: - name: windows-install-exe-example desiredState: INSTALLED artifacts: - id: installer gcs: bucket: my-bucket generation: '1597013478912389' object: MyApp.Installer.x64.exe installSteps: - fileExec: artifactId: installer args: - /S # Installation must be silent
レシピポリシーの構成の詳細については、SoftwareRecipe JSON 表現のリファレンス ドキュメントをご覧ください。
ゲストポリシーを作成する
ゲストポリシーを作成するときは、ゲストポリシーの名前が次の命名要件を満たしている必要があります。
- 小文字、数字、ハイフンのみを使用する
- 文字から始まる
- 数字または文字で終わる
- 1 から 63 文字である
- 各ポリシー ID がプロジェクト内で一意である
ゲストポリシーを作成するには、次のいずれかの方法を使用します。
gcloud
os-config guest-policies create
コマンドを使用してゲストポリシーを作成します。
gcloud beta compute os-config guest-policies create POLICY_ID \ --file=FILE
以下を置き換えます。
POLICY_ID
: 作成するゲストポリシーの名前。FILE
: ゲストポリシー仕様を含む JSON または YAML ファイル。サンプル構成を表示するには、ゲストポリシー YAML ファイルの例をご覧ください。
REST
API で、projects.guestPolicies.create
メソッドに対する POST
リクエストを作成します。
POST https://osconfig.googleapis.com/v1beta/projects/PROJECT_ID/guestPolicies?guestPolicyId=POLICY_ID { For more information, see Guest policy JSON }
以下を置き換えます。
PROJECT_ID
: プロジェクト ID。POLICY_ID
: ゲストポリシーの名前。
サンプル構成を表示するには、ゲストポリシー YAML ファイルの例をご覧ください。
トラブルシューティング
ゲストポリシーのトラブルシューティングについては、ゲストポリシーのデバッグをご覧ください。
次のステップ
- OS ゲストポリシー(従来)について学習する。
- ゲストポリシーを管理する。