ゲストポリシーの作成

VM インスタンス間で一貫したソフトウェア構成を維持するには、ゲストポリシーを使用します。

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

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

始める前に

サポートされているオペレーティング システム

  • Debian 9 および 10
  • Ubuntu 16.04、18.04+
  • CentOS 6、7、8
  • Red Hat Enterprise Linux(RHEL)6、7、8
  • Windows Server 2012R2、2016、2019、半年ごとのリリースの 1803、1809、1903
  • SUSE Enterprise Linux Server(SLES)12 および 15、openSUSE Leap 15

制限事項

  • エージェントがサービスにチェックインするたびに、ゲストポリシーの対象となるすべてのインスタンスが更新されます。このチェックは 10~15 分ごとに行われます。
  • このベータ版では、コンプライアンス ダッシュボード、通知、アラート サービスはご利用いただけません。OS Config エージェントを実行していない VM はエラーを報告しません。最良の結果を得るには、OS Inventory Management サービスまたはその他のコンプライアンス モニタリング ツールでこの機能を使用します。

権限

ゲストポリシーを使用して VM にソフトウェア パッケージをインストールして管理できるため、ゲストポリシーを作成して管理することは VM でリモートコード実行アクセス権を付与することと同等です。

ゲストポリシーを使用する場合、アクセスは IAM 権限を使用して制御され、監査ログに記録されます。ただし、VM でコードを実行する機能は、現在でも 1 つの選択肢であり、セキュリティ リスクをもたらす可能性があります。この問題を軽減するため、必要なアクセス権のみを各ユーザーに付与することをおすすめします。

プロジェクトのオーナーは、ポリシーを作成して管理するための完全アクセス権を持ちます。それ以外のすべてのユーザーにはアクセス権限を付与する必要があります。次のいずれかの詳細なロールを付与できます。

  • 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: ユーザーの G Suite ユーザー名。

VM の設定

OS Configuration Management サービスを使用するには、OS Config サービス API を設定し、OS Config エージェントをインストールする必要があります。手順の詳細については、OS Config の設定をご覧ください。

ゲストポリシーの 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 のオペレーティング システム情報は使用できません。オペレーティング システム情報ごとにグループ化するには、ゲスト属性と OS Inventory Management サービスを有効にしておく必要があります。これらのサービスを有効にするには、VM の設定をご覧ください。

ゲストポリシーの構成は、割り当てに一致するすべての新しい VM に自動的に適用されます。

必要な構成

必要な構成を行うには、以下の作業のいずれか行うか、以下の作業を複数組み合わせて行います。

  • ソフトウェア パッケージをインストール、削除、自動更新する。例 1 をご覧ください。
  • ソフトウェア パッケージ リポジトリを構成する。例 1 または例 3 をご覧ください。
  • ソフトウェア レシピを使用してソフトウェアをインストールする。例 4 または例 5 をご覧ください。

ゲストポリシーの 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 表現の参考文書をご覧ください。

ゲストポリシーの作成

gcloud コマンドライン ツールCloud OS Config API を使用してゲストポリシーを作成できます。

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

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

gcloud コマンドライン ツールと Cloud 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 ファイルの例をご覧ください。

次のステップ