OS ポリシーの割り当てを作成する

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

始める前に

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

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

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    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. Terraform

      ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      詳細については Set up authentication for a local development environment をご覧ください。

      REST

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

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

        gcloud init

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

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

OS ポリシーをサポートするオペレーティング システムとバージョンの完全なリストについては、オペレーティング システムの詳細をご覧ください。

権限

OS ポリシーを使用して VM にソフトウェア パッケージをインストールして管理できるため、OS ポリシーを作成して管理することは VM でリモートコード実行アクセス権を付与することと同等です。OS ポリシーを設定すると、IAM 権限を使用してポリシー リソースとアクセスが制御され、アクティビティが監査ログに記録されます。

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

  • OSPolicyAssignment 管理者(roles/osconfig.osPolicyAssignmentAdmin)。OS ポリシーの割り当てを作成、削除、更新、取得、一覧取得する権限が含まれます。
  • OSPolicyAssignment 編集者(roles/osconfig.osPolicyAssignmentEditor)。OS ポリシーの割り当てを更新、取得、一覧表示する権限が含まれます。
  • OSPolicyAssignment 閲覧者(roles/osconfig.osPolicyAssignmentViewer)。OS ポリシーの割り当てを取得して一覧表示するための読み取り専用アクセス権が含まれます。

権限を設定するコマンドの例

OS ポリシーを割り当てるための管理者権限をユーザーに付与するには、次のコマンドを実行します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member user:USER_ID@gmail.com \
        --role roles/osconfig.osPolicyAssignmentAdmin

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • USER_ID: ユーザーの Google Workspace のユーザー名。

OS ポリシーの割り当てを作成する

OS ポリシーの割り当てを作成してロールアウトするには、次の手順を行います。

  1. VM Manager を設定します
  2. ユーザーに必要な権限を割り当てます
  3. OS ポリシーとその割り当てを確認します。
  4. OS ポリシー リソースを作成します。
  5. OS ポリシーの割り当てを作成してロールアウトするには、次のいずれかの方法を使用します。

    コンソール

    OS ポリシーの割り当てを作成してロールアウトするには、次の手順を行います。

    1. ローカル クライアントで OS ポリシーを作成またはダウンロードします。これは JSON または YAML ファイルです。OS ポリシーの作成または OS のサンプル ポリシーの表示については、OS ポリシーをご覧ください。
    2. Google Cloud コンソールで、[OS ポリシー] ページに移動します。

      [OS ポリシー] に移動

    3. [OS ポリシーの割り当ての作成] をクリックします。

    4. [割り当て ID] セクションで、OS ポリシーの割り当ての名前を入力します。リソースの命名規則をご覧ください。

    5. [OS ポリシー] セクションで、OS ポリシー ファイルをアップロードします。

    6. [ターゲット VM インスタンス] セクションで、ターゲット VM を指定します。

      • ポリシーを適用する VM を含むゾーンを選択します。
      • OS ファミリーを選択します。
      • (省略可)対象ラベルまたは除外ラベルを指定して、VM をさらにフィルタリングできます。

      たとえば、テスト環境のすべての Ubuntu VM を選択して、Google Kubernetes Engine を実行している VM を除外できます。

      • OS ファミリー: ubuntu
      • 対象: env:testenv:staging
      • 除外: goog-gke-node

      ターゲット VM を選択します。

    7. ロールアウト プランを指定します。

      • ウェーブサイズ(停止予算)を指定します。例: 10%。
      • 待ち時間を指定します。例: 15 分。

        構成のロールアウト。

    8. [ロールアウトを開始] をクリックします。

    gcloud

    ゾーンに OS ポリシーの割り当てを作成してロールアウトするには、次の手順を行います。

    1. JSON または YAML 形式で OS ポリシー割り当てリソースを作成します。このファイルは、VM に適用する OS ポリシー、ポリシーを適用するターゲット VM、OS ポリシーを適用するロールアウト スピードを定義します。このファイルとサンプル割り当ての詳細については、OS ポリシーの割り当てをご覧ください。

    2. os-config os-policy-assignments create コマンドを使用して、指定したロケーションに OS ポリシーの割り当てを作成してロールアウトします。

      gcloud compute os-config os-policy-assignments create OS_POLICY_ASSIGNMENT_ID \
         --location=ZONE \
         --file=OS_POLICY_ASSIGNMENT_FILE \
         --async
      

      次のように置き換えます。

      • OS_POLICY_ASSIGNMENT_ID: OS ポリシー割り当ての名前。リソースの命名規則をご覧ください。
      • ZONE: OS ポリシーの割り当てを作成するゾーン。
      • OS_POLICY_ASSIGNMENT_FILE: 前の手順で作成した OS ポリシー割り当てファイルの絶対パス。

      gcloud compute os-config os-policy-assignments create my-os-policy-assignment \
          --location=asia-south1-a \
          --file=/downloads/assignment-config.yaml \
          --async
      

      出力は次のようになります。

      Create request issued for: [my-os-policy-assignment]
      Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.
      
    3. オペレーションの完全修飾リソース名をメモします。上述の例では、完全修飾リソース名は次のようになります。

      projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa
      

      この完全修飾リソース名は、ロールアウトの詳細取得やキャンセルに使用できます。ロールアウトをご覧ください。

    Terraform

    OS ポリシーの割り当てを作成するには、google_os_config_os_policy_assignment リソースを使用します。

    次の例では、CentOS VM で Apache ウェブサーバーが実行されているかどうかを確認します。

    resource "google_os_config_os_policy_assignment" "my_os_policy_assignment" {
    
      name        = "my-os-policy-assignment"
      location    = "us-west1-a"
      description = "An OS policy assignment that verifies if the Apache web server is running on CentOS VMs."
    
      instance_filter {
        # filter to select VMs
        all = false
    
        exclusion_labels {
          labels = {
            label-one = "goog-gke-node"
          }
        }
    
        inclusion_labels {
          labels = {
            env = "test",
          }
        }
    
        inventories {
          os_short_name = "centos"
          os_version    = "7*"
        }
      }
    
      os_policies {
        #list of OS policies to be applied to VMs
        id   = "apache-always-up-policy"
        mode = "ENFORCEMENT"
    
        resource_groups { #list of resource groups for the policy
          resources {
            id = "ensure-apache-is-up"
    
            exec {
              validate {
                interpreter = "SHELL"
                script      = "if systemctl is-active --quiet httpd; then exit 100; else exit 101; fi"
              }
    
              enforce {
                interpreter = "SHELL"
                script      = "systemctl start httpd && exit 100"
              }
            }
          }
    
          inventory_filters {
            os_short_name = "centos"
            os_version    = "7*"
          }
        }
    
        allow_no_resource_group_match = false #OS policy compliance status
        description                   = "An OS policy that verifies if the Apache web server is running on Linux VMs."
      }
    
      rollout {
        #define rollout parameters
        disruption_budget {
          fixed = 1
        }
        min_wait_duration = "3.5s"
      }
    }

    Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

    REST

    ローカル クライアントで OS ポリシーの割り当てを作成するには、次の操作を行います。

    1. OS ポリシーの割り当てを作成します。これは JSON ファイルである必要があります。OS ポリシーの割り当ての作成、サンプルの OS ポリシー割り当ての表示については、OS ポリシーの割り当てをご覧ください。

      サンプル YAML OS ポリシーの割り当てを使用する場合は、JSON に変換する必要があります。

    2. API で、projects.locations.osPolicyAssignments.create メソッドに対する POST リクエストを作成します。

      リクエスト本文に、前の手順でコピーした OS ポリシーの割り当てを貼り付けます。

      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/OSPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
       JSON_OS_POLICY
      }
      

      次のように置き換えます。

      • PROJECT_ID: プロジェクト ID
      • OS_POLICY_ASSIGNMENT_ID: OS ポリシー割り当ての名前
      • JSON_OS_POLICY: 前の手順で作成した OS ポリシーの割り当ての仕様。JSON 形式にする必要があります。パラメータと形式の詳細については、Resource: OSPolicyAssignment をご覧ください。
      • ZONE: OS ポリシーの割り当てを作成するゾーン

      たとえば、サンプル OS ポリシーの割り当てを使用して、特定の VM に Monitoring エージェントと Logging エージェントをインストールする Google Cloud Observability の OS ポリシーの割り当てを作成するには、次の操作を行います。

      1. サンプルを JSON に変換します。
      2. 次のリクエストを行います。
      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/OSPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
        "osPolicies": [
          {
            "id": "setup-repo-and-install-package-policy",
            "mode": "ENFORCEMENT",
            "resourceGroups": [
              {
                "resources": [
                  {
                    "id": "setup-repo",
                    "repository": {
                      "yum": {
                        "id": "google-cloud-monitoring",
                        "displayName": "Google Cloud Monitoring Agent Repository",
                        "baseUrl": "https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el8-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"
                        ]
                      }
                    }
                  },
                  {
                    "id": "install-pkg",
                    "pkg": {
                      "desiredState": "INSTALLED",
                      "yum": {
                        "name": "stackdriver-agent"
                      }
                    }
                  }
                ]
              }
            ]
          }
        ],
        "instanceFilter": {
          "inclusionLabels": [
            {
              "labels": {
                "used_for": "testing"
              }
            }
          ]
        },
        "rollout": {
          "disruptionBudget": {
            "fixed": 10
          },
          "minWaitDuration": {
            "seconds": 300
          }
        }
      }
      

ロールアウト

OS ポリシーの割り当ては、ロールアウト率に従ってデプロイされます。つまり、一連の VM をターゲットとする割り当ては段階的にデプロイでき、すべての VM にすぐに適用されるわけではありません。変更は段階的にロールアウトされます。新しい変更で問題が発生した場合は、ロールアウトをキャンセルして元に戻すことができます。

API がメソッド呼び出しの完了に時間がかかる場合、API は長時間実行オペレーション(LRO)を返します。LRO の詳細については、長時間実行オペレーションをご覧ください。

OS ポリシーの割り当てを作成、更新、削除するたびに、OS Config Service API が LRO を作成します。各 LRO はオペレーション リソースを返します。このオペレーション リソースは次のようになります。

Create request issued for: [my-os-policy-assignment]
Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.

作成、更新、削除の各オペレーションでも、OS ポリシー割り当ての新しいバージョンが生成されます。OS ポリシーの割り当てのリビジョンを表示するには、OS ポリシー割り当てのリビジョンの一覧表示をご覧ください。

Google Cloud CLI を使用して、ロールアウトの詳細を取得することや、ロールアウトをキャンセルできます。

ロールアウトの詳細を取得する

ロールアウトの詳細を取得するには、os-config os-policy-assignments operations describe コマンドを使用します。

gcloud compute os-config os-policy-assignments operations describe FULLY_QUALIFIED_OPERATION_NAME

FULLY_QUALIFIED_OPERATION_NAME は、作成、更新、削除の各オペレーションで返される完全修飾リソース名に置き換えます。

gcloud compute os-config os-policy-assignments operations describe \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

出力例

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignmentOperationMetadata
  apiMethod: CREATE
  osPolicyAssignment: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment@cfb78790-41d8-40d1-b8a1-1eaf6011b909
  rolloutStartTime: '2021-04-15T00:53:52.963569Z'
  rolloutState: SUCCEEDED
  rolloutUpdateTime: '2021-04-15T00:53:53.094041Z'
name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/cfb78790-41d8-40d1-b8a1-1eaf6011b909
response:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignment
  baseline: true
  description: My test policy
  instanceFilter:
    inclusionLabels:
    - labels:
        label-key-not-targeting-instances: label-value-not-targeting-instances
  name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment
  osPolicies:
  - id: q-test-policy
    mode: ENFORCEMENT
    resourceGroups:
    - osFilter:
        osShortName: centos
        osVersion: '7'
      resources:
      - id: add-repo
        repository:
          yum:
            baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el7-x86_64-all

ロールアウトのキャンセル

コンソール

  1. Google Cloud コンソールで、[OS ポリシー] ページに移動します。

    [OS ポリシー] に移動

  2. [OS ポリシーの割り当て] タブをクリックします。

  3. ロールアウトをキャンセルする OS ポリシーの割り当てで、[アクション()] > [ロールアウトをキャンセル] をクリックします。

  4. [ロールアウトをキャンセル] をクリックします。

gcloud

ロールアウトをキャンセルするには、gcloud compute os-config os-policy-assignments operations cancel コマンドを使用します。

gcloud compute os-config os-policy-assignments operations cancel FULLY_QUALIFIED_OPERATION_NAME

FULLY_QUALIFIED_OPERATION_NAME は、作成、更新、削除の各オペレーションで返される完全修飾リソース名に置き換えます。

gcloud compute os-config os-policy-assignments operations cancel \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

コマンドが成功した場合、出力は返されません。

次のステップ