ゲストポリシーを作成する(従来)

ゲストポリシーを使用して、Linux および Windows 仮想マシン(VM)インスタンス全体で一貫したソフトウェア構成を維持します。

一連の VM にゲストポリシーを設定するには、次の手順を実行します。

  1. ユーザーに必要な権限を割り当てます
  2. VM を設定します
  3. ゲストポリシーの JSON ファイルまたは YAML ファイルを構成します。
  4. ゲストポリシーを作成します

始める前に

  • OS Config の割り当てを確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

制限事項

  • ターゲット VM の場合、ゲストがサービスにチェックインするたびにゲストポリシーが更新されます。このチェックは 10~15 分ごとに行われます。
  • この従来の OS ゲストポリシーで利用できるコンプライアンス ダッシュボード、通知、アラート サービスはありません。OS Config エージェントを実行していない VM はエラーを報告しません。最良の結果を得るには、OS Inventory Management サービスまたはその他のコンプライアンス モニタリング ツールでこの機能を使用します。
  • 特定の名前のソフトウェア レシピは、ゲストポリシーを作成するときに 1 回だけ実行されます。ソフトウェア レシピを再実行するには、次の操作を行う必要があります。

    1. ソフトウェア レシピの名前を変更します。
    2. ゲストポリシーを削除し、名前を変更したソフトウェア レシピを使用してゲストポリシーを再作成します。

権限

ゲストポリシーを使用して 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 をご覧ください。
  • ソフトウェア レシピを使用してソフトウェアをインストールする。
    • Linux VM の場合は、例 5 をご覧ください。
    • Windows VM の場合は、例 4 または例 6 をご覧ください。

ゲストポリシーの YAML ファイルの例

例 1

最新の状態に保つ必要のあるパッケージ my-package を VM インスタンス my-instance-1my-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-1bad-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-bus-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 ファイルの例をご覧ください。

トラブルシューティング

ゲストポリシーのトラブルシューティングについては、ゲストポリシーのデバッグをご覧ください。

次のステップ