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


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

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

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

始める前に

制限事項

  • ターゲット 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 表現のリファレンス ドキュメントをご覧ください。

ゲストポリシーを作成する

Google Cloud CLI または OS Config API を使用して、ゲストポリシーを作成できます。

ゲストポリシーを作成するときは、ゲストポリシーの名前が次の命名要件を満たしている必要があります。

  • 小文字、数字、ハイフンのみを使用する
  • 文字から始まる
  • 数字または文字で終わる
  • 1 から 63 文字である
  • 各ポリシー ID がプロジェクト内で一意である

Google Cloud CLI と OS Config API では、ゲストポリシーの名前は POLICY_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 ファイルの例をご覧ください。

API

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 ファイルの例をご覧ください。

トラブルシューティング

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

次のステップ