使用政策编排程序管理操作系统政策分配

本页面介绍了如何使用虚拟机管理器中的政策编排程序功能,跨文件夹或组织中的不同项目和可用区创建、更新或删除操作系统政策资源。

准备工作

  • 查看操作系统政策和操作系统政策分配任务
  • 查看 OS Config 配额
  • 确保您满足使用政策编排程序的前提条件
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 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. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

跨项目和可用区创建或更新操作系统政策分配

您可以创建政策编排程序,以将操作系统政策应用于项目、文件夹或组织中所选的资源。

控制台

如需创建政策编排程序并在文件夹中应用操作系统政策分配,请执行以下操作:

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

    转到“操作系统政策”

  3. 点击 Google Cloud 控制台操作栏中的项目选择器,然后选择要在其中创建政策编排程序的项目、文件夹或组织。

  4. 点击创建全局编排程序

  5. 为政策编排程序指定名称和说明。请参阅资源命名惯例。虚拟机管理器会为政策编排程序分配唯一的编排程序 ID。如有需要,您可以修改此 ID。

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

  7. 可选:在状态部分中,选择以下选项之一以指定政策编排程序的行为:

    • ACTIVE:创建后,政策编排程序会立即执行操作。
    • STOPPED:采用此状态创建的政策编排程序不会立即执行任何操作。您以后可以修改政策编排程序以更改其状态。
  8. 操作字段中,选择 UPSERT 操作。

  9. 编排范围部分中,指定要在其中部署操作系统政策的文件夹和项目。您只能在这些字段中输入项目编号和文件夹编号,例如 123456,7654321

  10. 选择包含您要应用操作系统政策的虚拟机的可用区。或者,点击全选,以将操作系统政策更改应用于所有可用区中的资源。

  11. 目标虚拟机实例部分中,指定要应用操作系统政策的目标虚拟机。

    • 选择操作系统系列。
    • 您可以通过指定包含和排除标签来进一步过滤虚拟机。

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

      • 操作系统系列:ubuntu
      • 包含:env:testenv:staging
      • 排除:goog-gke-node
  12. 为操作系统政策分配指定发布计划。

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

gcloud

如需创建政策编排程序,请完成以下步骤:

  1. 创建或下载 JSON 或 YAML 格式的操作系统政策分配资源。如需详细了解此文件和示例政策分配任务,请参阅操作系统政策分配任务

  2. 使用 os-config policy-orchestrators create 命令在指定范围内创建和发布操作系统政策分配任务。

项目

  gcloud compute os-config policy-orchestrators create ORCHESTRATOR_NAME \
    --policy-type=os_policy_assignment_v1 \
    --policy-file=OS_POLICY_ASSIGNMENT_YAML_FILE \
    --policy-id=POLICY_ID

替换以下内容:

  • ORCHESTRATOR_NAME:政策编排程序的名称。 请参阅资源命名惯例
  • OS_POLICY_ASSIGNMENT_FILE:您在上一步中创建的操作系统政策分配文件的绝对路径。
  • POLICY_ID:政策编排程序的唯一 ID。如果您未指定值,政策编排程序会为编排程序资源分配一个唯一 ID。

示例

  gcloud compute os-config policy-orchestrators create my-os-policy-orchestrator \
      --policy-type=os_policy_assignment_v1 \
      --policy-file=/downloads/assignment-config.yaml \
      --policy-id=policy-123

文件夹

  gcloud --billing-project=QUOTA_PROJECT_ID compute os-config policy-orchestrators create ORCHESTRATOR_NAME \
    --folder=FOLDER_NUMBER \
    --policy-type=os_policy_assignment_v1 \
    --policy-file=OS_POLICY_ASSIGNMENT_YAML_FILE \
    --policy-id=POLICY_ID \
    --include-projects=PROJECT_NUMBERS

替换以下内容:

  • QUOTA_PROJECT_ID配额或结算项目的项目 ID。
  • ORCHESTRATOR_NAME:政策编排程序的名称。 请参阅资源命名惯例
  • FOLDER_NUMBER:您要创建政策编排程序的文件夹的编号。
  • OS_POLICY_ASSIGNMENT_FILE:您在上一步中创建的操作系统政策分配文件的绝对路径。
  • POLICY_ID:政策编排程序的唯一 ID。如果您未指定值,政策编排程序会为编排程序资源分配一个唯一 ID。
  • PROJECT_NUMBERS:您要为其应用操作系统政策分配任务的项目列表。您必须指定项目编号,即项目的唯一数字 ID。

示例

  gcloud --billing-project=my-quota-project compute os-config policy-orchestrators create my-os-policy-orchestrator \
      --folder=123456 \
      --policy-type=os_policy_assignment_v1 \
      --policy-file=/downloads/assignment-config.yaml \
      --policy-id=policy-123 \
      --include-projects=87654321,4567890

组织

  gcloud --billing-project=QUOTA_PROJECT_ID compute os-config policy-orchestrators create ORCHESTRATOR_NAME \
    --organization=ORGANIZATION_NUMBER \
    --policy-type=os_policy_assignment_v1 \
    --policy-file=OS_POLICY_ASSIGNMENT_YAML_FILE \
    --policy-id=POLICY_ID \
    --include-projects=PROJECT_NUMBERS

替换以下内容:

  • QUOTA_PROJECT_ID配额或结算项目的项目 ID。
  • ORCHESTRATOR_NAME:政策编排程序的名称。 请参阅资源命名惯例
  • FOLDER_NUMBER:您要创建政策编排程序的文件夹的编号。
  • OS_POLICY_ASSIGNMENT_FILE:您在上一步中创建的操作系统政策分配文件的绝对路径。
  • POLICY_ID:政策编排程序的唯一 ID。如果您未指定值,政策编排程序会为编排程序资源分配一个唯一 ID。
  • PROJECT_NUMBERS:您要为其应用操作系统政策分配任务的项目列表。您必须指定项目编号,即项目的唯一数字 ID。

示例

  gcloud --billing-project=my-quota-project compute os-config policy-orchestrators create my-os-policy-orchestrator \
      --organization=123456 \
      --policy-type=os_policy_assignment_v1 \
      --policy-file=/downloads/assignment-config.yaml \
      --policy-id=policy-123 \
      --include-projects=87654321,4567890

REST

如需创建政策编排程序,请完成以下步骤:

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

  2. 根据您创建政策编排程序的范围,使用以下方法之一:

项目

projects.locations.global.policyOrchestrators.create 方法发送 POST 请求。

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

POST https://osconfig.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/policyOrchestrators

  {
      JSON_OS_POLICY_ORCHESTRATOR
  }

替换以下内容:

  • PROJECT_NUMBER:您要在其中创建政策编排程序的项目的数字 ID。
  • JSON_OS_POLICY_ORCHESTRATOR:JSON 格式的政策编排程序对象,用于定义编排程序范围、编排的资源和编排状态。如需详细了解参数和格式,请参阅 Resource: folders.locations.global.policyOrchestrators

示例

例如,如需创建操作系统政策分配任务(使用示例操作系统政策分配任务),以安装从 Cloud Storage 存储桶下载的 Windows MSI,请完成以下步骤:

  1. 将示例转换为 JSON
  2. 发出以下请求:

    POST https://osconfig.googleapis.com/v2/projects/123456/locations/global/policyOrchestrators
    
    {
    "action": "UPSERT",
    "orchestratedResource": {
      "osPolicyAssignmentV1Payload": {
        "instanceFilter": {
          "inventories": [
            {
              "osShortName": "windows"
            }
          ]
        },
        "osPolicies": [
        {
          "id": "install-msi-policy",
          "mode": "ENFORCEMENT",
          "resourceGroups": [
            {
              "resources": [
                {
                  "id": "install-msi",
                  "pkg": {
                    "desiredState": "INSTALLED",
                    "msi": {
                      "source": {
                        "gcs": {
                          "bucket": "my-bucket",
                          "generation": "1619136883923956",
                          "object": "my-app.msi"
                        }
                      }
                    }
                  }
                }
              ]
            }
          ]
        }
        ],
        "rollout": {
          "disruptionBudget": {
            "fixed": 10
          },
          "minWaitDuration": "300s"
        }
      }
    },
    "orchestrationScope": {
    "selectors": [
      {
         "resourceHierarchySelector": {
            "includedProjects": [
            "projects/87654321",
            "projects/4567890"
            ]
          }
        }
      ]
    },
    "state": "ACTIVE"
    }
    

文件夹

folders.locations.global.policyOrchestrators.create 方法发送 POST 请求。

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

POST https://osconfig.googleapis.com/v2/folders/FOLDER_NUMBER/locations/global/policyOrchestrators
-H "x-goog-user-project: QUOTA_PROJECT_ID"

{
  JSON_OS_POLICY_ORCHESTRATOR
}

替换以下内容:

  • QUOTA_PROJECT_ID配额或结算项目的 ID。
  • FOLDER_NUMBER:您要在其中创建政策编排程序的文件夹的数字 ID。
  • JSON_OS_POLICY_ORCHESTRATOR:JSON 格式的政策编排程序对象,用于定义编排程序范围、编排的资源和编排状态。如需详细了解参数和格式,请参阅 Resource: folders.locations.global.policyOrchestrators

示例

例如,如需创建操作系统政策分配任务(使用示例操作系统政策分配任务),以安装从 Cloud Storage 存储桶下载的 Windows MSI,请完成以下步骤:

  1. 将示例转换为 JSON
  2. 发出以下请求:

    POST https://osconfig.googleapis.com/v2/folders/123456/locations/global/policyOrchestrators \
    -H "x-goog-user-project: my-quota-project
    
    {
    "action": "UPSERT",
    "orchestratedResource": {
      "osPolicyAssignmentV1Payload": {
        "instanceFilter": {
          "inventories": [
            {
              "osShortName": "windows"
            }
          ]
        },
        "osPolicies": [
        {
          "id": "install-msi-policy",
          "mode": "ENFORCEMENT",
          "resourceGroups": [
            {
              "resources": [
                {
                  "id": "install-msi",
                  "pkg": {
                    "desiredState": "INSTALLED",
                    "msi": {
                      "source": {
                        "gcs": {
                          "bucket": "my-bucket",
                          "generation": "1619136883923956",
                          "object": "my-app.msi"
                        }
                      }
                    }
                  }
                }
              ]
            }
          ]
        }
        ],
        "rollout": {
          "disruptionBudget": {
            "fixed": 10
          },
          "minWaitDuration": "300s"
        }
      }
    },
    "orchestrationScope": {
    "selectors": [
      {
         "resourceHierarchySelector": {
            "includedProjects": [
            "projects/87654321",
            "projects/4567890"
            ]
          }
        }
      ]
    },
    "state": "ACTIVE"
    }
    

组织

organizations.locations.global.policyOrchestrators.create 方法发送 POST 请求。

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

POST https://osconfig.googleapis.com/v2/organizations/ORGANIZATION_NUMBER/locations/global/policyOrchestrators \
-H "x-goog-user-project: QUOTA_PROJECT_ID"

  {
      JSON_OS_POLICY_ORCHESTRATOR
  }

替换以下内容:

示例

例如,如需创建操作系统政策分配任务(使用示例操作系统政策分配任务),以安装从 Cloud Storage 存储桶下载的 Windows MSI,请完成以下步骤:

  1. 将示例转换为 JSON
  2. 发出以下请求:

    POST https://osconfig.googleapis.com/v2/organizations/567890/locations/global/policyOrchestrators \
    -H "x-goog-user-project: my-quota-project
    {
    "action": "UPSERT",
    "orchestratedResource": {
      "osPolicyAssignmentV1Payload": {
        "instanceFilter": {
          "inventories": [
            {
              "osShortName": "windows"
            }
          ]
        },
        "osPolicies": [
        {
          "id": "install-msi-policy",
          "mode": "ENFORCEMENT",
          "resourceGroups": [
            {
              "resources": [
                {
                  "id": "install-msi",
                  "pkg": {
                    "desiredState": "INSTALLED",
                    "msi": {
                      "source": {
                        "gcs": {
                          "bucket": "my-bucket",
                          "generation": "1619136883923956",
                          "object": "my-app.msi"
                        }
                      }
                    }
                  }
                }
              ]
            }
          ]
        }
        ],
        "rollout": {
          "disruptionBudget": {
            "fixed": 10
          },
          "minWaitDuration": "300s"
        }
      }
    },
    "orchestrationScope": {
    "selectors": [
      {
         "resourceHierarchySelector": {
            "includedProjects": [
            "projects/87654321",
            "projects/4567890"
            ]
          }
        }
      ]
    },
    "state": "ACTIVE"
    }
    

删除多个项目的操作系统政策分配任务

您可以使用政策编排程序删除文件夹或组织中多个项目的操作系统政策,方法是指定操作系统政策资源的唯一政策 ID。

控制台

如需删除文件夹中的操作系统政策,请执行以下操作:

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

    转到“操作系统政策”

  3. 点击 Google Cloud 控制台操作栏中的项目选择器,然后选择要在其中创建政策编排程序的项目、文件夹或组织。

  4. 点击创建全局编排程序

  5. 为政策编排程序指定名称和说明。请参阅资源命名惯例。虚拟机管理器会为政策编排程序分配唯一的编排程序 ID。如有需要,您可以修改此 ID。

  6. 操作系统政策部分中,选择并上传操作系统政策文件。

  7. 可选:在状态部分中,选择以下选项之一以指定政策编排程序的行为:

    • ACTIVE:创建后,政策编排程序会立即执行操作。
    • STOPPED:采用此状态创建的政策编排程序不会立即执行任何操作。您以后可以修改政策编排程序以更改其状态。
  8. 操作字段中,选择删除操作。

  9. 编排范围部分中,指定要在其中部署操作系统政策的文件夹和项目。您只能在这些字段中输入项目编号和文件夹编号,例如 123456,7654321

  10. 选择包含您要应用操作系统政策的虚拟机的可用区。

  11. 目标虚拟机实例部分中,指定要应用操作系统政策的目标虚拟机。

    • 选择操作系统系列。
    • 您可以通过指定包含和排除标签来进一步过滤虚拟机。

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

      • 操作系统系列:ubuntu
      • 包含:env:testenv:staging
      • 排除:goog-gke-node
  12. 为操作系统政策分配指定发布计划。

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

gcloud

如需使用政策编排程序从多个项目中删除操作系统政策,请使用 os-config policy-orchestrators create 命令,并为与操作系统政策分配相关联的 policy-id 指定操作 delete

项目

  gcloud compute os-config policy-orchestrators create ORCHESTRATOR_NAME \
    --policy-type=os_policy_assignment_v1 \
    --policy-file=OS_POLICY_ASSIGNMENT_FILE \
    --policy-id=POLICY_ID \
    --action=delete

替换以下内容:

  • ORCHESTRATOR_NAME:政策编排程序的名称。
  • OS_POLICY_ASSIGNMENT_FILE:操作系统政策分配文件的绝对路径。
  • POLICY_ID:操作系统政策编排程序资源的政策 ID。

示例

 gcloud compute os-config policy-orchestrators create my-os-policy-orchestrator \
   --policy-type=os_policy_assignment_v1
   --policy-id=my-policy \
   --action=delete

文件夹

  gcloud --billing-project=QUOTA_PROJECT_ID compute os-config policy-orchestrators create ORCHESTRATOR_NAME \
    --policy-type=os_policy_assignment_v1 \
    --policy-id=POLICY_ID \
    --action=delete

替换以下内容:

  • QUOTA_PROJECT_ID配额或结算项目的 ID。
  • ORCHESTRATOR_NAME:政策编排程序的名称。
  • FOLDER_NUMBER:您要从中删除操作系统政策资源的文件夹的数字 ID。
  • POLICY_ID:操作系统政策编排程序资源的政策 ID。

示例

gcloud --billing-project=my-quota-project compute os-config policy-orchestrators create my-os-policy-orchestrator \
  --folder=123456 \
  --policy-type=os_policy_assignment_v1 \
  --policy-id=my-policy \
  --action=delete

组织

gcloud --billing-project=QUOTA_PROJECT_ID compute os-config policy-orchestrators create ORCHESTRATOR_NAME \
  --organization=ORGANIZATION_NUMBER \
  --policy-type=os_policy_assignment_v1 \
  --policy-id=POLICY_ID \
  --action=delete

替换以下内容:

  • QUOTA_PROJECT_ID配额或结算项目的 ID。
  • ORCHESTRATOR_NAME:政策编排程序的名称。
  • ORGANIZATION_NUMBER:您要从中删除操作系统政策资源的组织的数字 ID。
  • POLICY_ID:操作系统政策编排程序资源的政策 ID。

示例

gcloud --billing-project=my-quota-project compute os-config policy-orchestrators create my-os-policy-orchestrator \
  --organization=987654321
  --policy-type=os_policy_assignment_v1
  --policy-id=my-policy \
  --action=delete

REST

如需创建用于从多个项目中删除操作系统政策的政策编排程序,请使用以下方法之一,并将操作指定为 DELETE

项目

projects.locations.global.policyOrchestrators.create 方法发送 POST 请求。

在请求正文中,指定与操作系统政策分配关联的政策 ID。

POST https://osconfig.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/policyOrchestrators

  {
      JSON_OS_POLICY_ORCHESTRATOR
  }

替换以下内容:

  • PROJECT_NUMBER:您要在其中创建政策编排程序的项目的数字 ID。
  • JSON_OS_POLICY_ORCHESTRATOR:JSON 格式的政策编排程序对象,用于定义编排程序范围、编排的资源和编排状态。如需详细了解参数和格式,请参阅 Resource: folders.locations.global.policyOrchestrators

示例

POST https://osconfig.googleapis.com/v2/projects/567890/locations/global/policyOrchestrators

{
    "action": "DELETE",
    "orchestratedResource": {
      "id": "my-policy",
      "osPolicyAssignmentV1Payload": {}
    },
    "orchestrationScope": {
      "selectors": [
        {
          "resourceHierarchySelector": {
            "includedProjects": [
              "projects/87654321",
              "projects/4567890"
            ]
          }
        }
      ]
    },
    "state": "ACTIVE"
  }

文件夹

folders.locations.global.policyOrchestrators.create 方法发送 POST 请求。

在请求正文中,指定与操作系统政策分配关联的政策 ID。

POST https://osconfig.googleapis.com/v2/folders/FOLDER_NUMBER/locations/global/policyOrchestrators
-H "x-goog-user-project: QUOTA_PROJECT_ID"

{
  JSON_OS_POLICY_ORCHESTRATOR
}

替换以下内容:

  • QUOTA_PROJECT_ID配额或结算项目的 ID。
  • FOLDER_NUMBER:您要从中删除操作系统政策资源的文件夹的数字 ID。
  • JSON_OS_POLICY_ORCHESTRATOR:JSON 格式的政策编排程序对象,用于定义政策 ID、编排程序范围、编排的资源和编排状态。如需详细了解参数和格式,请参阅 Resource: folders.locations.global.policyOrchestrators

示例

例如,如需从多个项目中删除操作系统政策资源,请发出以下请求:

 POST https://osconfig.googleapis.com/v2/folders/567890/locations/global/policyOrchestrators
 -H "x-goog-user-project: my-quota-project

 {
    "action": "DELETE",
    "orchestratedResource": {
      "id": "my-policy",
      "osPolicyAssignmentV1Payload": {}
    },
    "orchestrationScope": {
      "selectors": [
        {
          "resourceHierarchySelector": {
            "includedProjects": [
              "projects/87654321",
              "projects/4567890"
            ]
          }
        }
      ]
    },
    "state": "ACTIVE"
  }

组织

organizations.locations.global.policyOrchestrators.create 方法发送 POST 请求。

在请求正文中,指定与操作系统政策分配关联的政策 ID。

POST https://osconfig.googleapis.com/v2/organizations/ORGANIZATION_NUMBER/locations/global/policyOrchestrators
-H "x-goog-user-project: QUOTA_PROJECT_ID"

{
  JSON_OS_POLICY_ORCHESTRATOR
}

替换以下内容:

示例

例如,如需从多个项目中删除操作系统政策资源,请发送以下请求:

POST https://osconfig.googleapis.com/v2/organizations/567890/locations/global/policyOrchestrators
-H "x-goog-user-project: my-quota-project

{
    "action": "DELETE",
    "orchestratedResource": {
      "id": "my-policy",
      "osPolicyAssignmentV1Payload": {}
    },
    "orchestrationScope": {
      "selectors": [
        {
          "resourceHierarchySelector": {
            "includedProjects": [
              "projects/87654321",
              "projects/4567890"
            ]
          }
        }
      ]
    },
    "state": "ACTIVE"
  }

后续步骤