创建操作系统政策分配任务

使用操作系统政策,在 Linux 和 Windows 虚拟机实例之间保持一致的软件配置

准备工作

支持的操作系统

如需查看支持操作系统配置管理(操作系统政策)的操作系统和版本的完整列表,请参阅操作系统详细信息

权限

由于您可以使用操作系统政策在虚拟机上安装和管理软件包,因此创建和管理操作系统政策等效于授予对虚拟机的远程代码执行权限。

设置操作系统政策时,系统会使用 IAM 权限来控制对政策资源的访问权限,并记录活动的审核日志。但是,用户仍可以在虚拟机上运行代码,这可能会带来安全风险。为缓解此风险,我们建议您仅向每位用户提供所需的访问权限。

项目的所有者拥有创建和管理操作系统政策分配任务的完整权限。 对于所有其他用户,您需要为其授予权限。您可以授予以下其中一种精细角色:

  • OSPolicyAssignment Admin (roles/osconfig.osPolicyAssignmentAdmin)。包含创建、删除、更新、获取和列出操作系统政策分配的权限。
  • OSPolicyAssignment Editor (roles/osconfig.osPolicyAssignmentEditor)。包含更新、获取和列出操作系统政策分配的权限。
  • OSPolicyAssignment Viewer (roles/osconfig.osPolicyAssignmentViewer)。包含获取和列出操作系统政策分配所需的只读权限。

用于设置权限的示例命令

如需向用户管理员授予对操作系统政策分配的访问权限,请运行以下命令:

    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 用户名。

创建操作系统政策分配任务

如需创建操作系统政策分配任务,请完成以下步骤:

  1. 设置 VM 管理器
  2. 向用户分配所需权限
  3. 查看操作系统政策和操作系统政策分配任务
  4. 创建操作系统政策分配任务。如需创建操作系统政策分配任务,请使用 Google Cloud Console、gcloud 命令行工具Cloud OS Config API

    控制台

    如需创建操作系统政策分配任务,请完成以下步骤:

    1. 在本地客户端上,创建或下载操作系统政策。该文件必须是 JSON 或 YAML 文件。如需详细了解如何创建操作系统政策,或者查看示例操作系统政策,请参阅操作系统政策
    2. 在 Google Cloud Console 中,转到 OS Configuration Management 页面。

      转到“OS Configuration Management”

    3. 点击创建操作系统政策分配

    4. 分配任务 ID 部分中,为操作系统政策分配任务提供一个名称。请参阅资源命名惯例

    5. 操作系统政策部分中,上传操作系统政策文件。

    6. 目标虚拟机实例部分中,指定目标虚拟机。

      • 选择包含您要应用政策的虚拟机的可用区。
      • 选择操作系统系列。
      • 可选:您可以通过指定包含和排除标签来进一步过滤虚拟机。

      例如,您可以在测试环境中选择全部 Ubuntu 虚拟机,并通过指定以下内容来排除运行 Google Kubernetes Engine 的虚拟机:

      • 操作系统系列:ubuntu
      • 包含:env:testenv:staging
      • 排除:goog-gke-node

      选择目标虚拟机。

    7. 指定发布计划。

      • 指定波次规模(也称为中断预算)。例如:10%。
      • 指定等待时间。例如 15 分钟。

        发布配置。

    8. 点击开始发布

    gcloud

    如需在本地客户端上创建操作系统政策分配任务,请完成以下步骤:

    1. 创建操作系统政策分配任务。该文件必须是 JSON 或 YAML 文件。如需详细了解如何创建操作系统政策分配任务,或者查看示例操作系统政策分配任务,请参阅操作系统政策分配任务

    2. 使用 os-config os-policy-assignments create 命令创建操作系统政策分配任务。

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

      请替换以下内容:

      • OS_POLICY_ASSIGNMENT_ID:操作系统政策分配任务的名称。请参阅资源命名惯例
      • ZONE:要在其中创建操作系统政策分配任务的可用区。
      • OS_POLICY_ASSIGNMENT_FILE:包含本地客户端上操作系统政策分配任务文件的文件的绝对路径。

      示例

      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
      

      您可以使用此完全限定资源名称来获取发布的详细信息或者取消发布。请参阅发布

    API

    如需在本地客户端上创建操作系统政策分配任务,请完成以下步骤:

    1. 创建操作系统政策分配任务。该文件必须是 JSON 文件。如需详细了解如何创建操作系统政策分配任务,或者查看示例操作系统政策分配任务,请参阅操作系统政策分配任务

      如果要使用示例 YAML 操作系统政策分配任务,则必须将其转换为 JSON。

    2. 在 API 中,创建对 projects.locations.osPolicyAssignments.create 方法POST 请求。

      在请求正文中,粘贴上一步中的操作系统政策分配任务规范。

      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:操作系统政策分配任务的名称
      • JSON_OS_POLICY:上一步中创建的操作系统政策分配任务规范。此文件必须采用 JSON 格式。 如需详细了解参数和格式,请参阅 Resource: OSPolicyAssignment
      • ZONE:要在其中创建操作系统政策分配任务的可用区

      示例

      例如,如需为 Google Cloud 的运维套件创建操作系统政策分配任务(使用示例操作系统政策分配任务),以在选定的虚拟机上安装监控和日志记录代理,请执行以下步骤:

      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
          }
        }
      }
      }
      

发布

系统会根据发布速率部署操作系统政策分配任务。这意味着针对一组虚拟机的分配任务可以逐步部署,而非立即应用于所有虚拟机。我们将逐步发布更改,以便让您在新更改造成退步时,有机会施加干预并取消发布。

如果对 API 的方法调用可能需要很长时间才能完成,则该 API 会返回长时间运行的操作 (LRO)。如需详细了解 LRO,请参阅长时间运行的操作

每次创建、更新或删除操作系统政策分配任务时,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.

每个创建、更新或删除操作也会生成新的操作系统政策分配修订版本。如需查看操作系统政策分配任务的修订版本,请参阅列出操作系统政策分配任务修订版本

您可以使用 gcloud 命令行工具获取发布详情或取消发布。

获取发布详情

如需获取发布的详细信息,请使用 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 Console 中,转到 OS Configuration Management > 分配页面。

    转到 Cloud Console

  2. 对于要取消发布的操作系统政策分配,请点击操作 () > 取消发布

  3. 点击取消发布

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

如果命令成功,则不会返回任何输出。

后续步骤