创建客户机政策(旧版)


您可以利用客机政策,在 Linux 和 Windows 虚拟机 (VM) 实例之间保持一致的软件配置

如需针对一组虚拟机设置客机政策,请完成以下步骤:

  1. 向用户分配所需权限
  2. 设置虚拟机
  3. 配置客机政策 JSON 或 YAML 文件
  4. 创建客机政策

准备工作

  • 查看 OS Config 配额
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

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

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

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

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

        gcloud init

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

限制

  • 对于目标虚拟机,每当代理通过服务签入时,客机政策都会更新。此项检查每 10 到 15 分钟进行一次。
  • 没有适用于旧版操作系统客机政策的合规性信息中心、通知或提醒服务。未运行 OS Config 代理的虚拟机不会报告故障。为获得最佳结果,请将此功能与 OS Inventory Management 服务或任何其他合规性监控工具搭配使用。
  • 创建客机政策时,具有特定名称的软件配方仅运行一次。如需重新运行软件配方,您必须执行以下操作:

    1. 重命名软件配方。
    2. 使用重命名的软件配方删除并重新创建客机政策。

权限

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

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

项目的所有者拥有创建和管理政策的完全访问权限。 对于所有其他用户,您需要为其授予权限。您可以授予以下其中一种精细角色:

  • GuestPolicy Admin (roles/osconfig.guestPolicyAdmin)。包含创建、删除、更新、获取和列出客机政策的权限。
  • GuestPolicy Editor (roles/osconfig.guestPolicyEditor)。包含获取、更新和列出客机政策的权限。
  • GuestPolicy Viewer (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 用户名。

设置虚拟机

如需使用客机政策,您需要设置虚拟机管理器

配置客机政策 yaml 或 JSON 文件

您必须使用 JSON 或 YAML 文件提供客机政策规范。如需查看示例配置,请参阅客机政策 YAML 文件示例

YAML 或 JSON 文件包含以下两个主要部分:

作业

您可以将客机政策分配给项目中的所有虚拟机,也可以在 JSON 或 YAML 文件中使用 assignment 键,指定一组特定的虚拟机。

例如,您可以通过使用以下任何特征来指定一组虚拟机:

  • 实例名称。请参阅示例 1
  • 实例名称前缀。请参阅示例 2
  • 实例标签。请参阅示例 3
  • 地区。请参阅示例 4
  • 操作系统信息,包括操作系统名称、版本和架构。请参阅示例 5os-inventory describe 命令可用于确定虚拟机的操作系统名称、版本和架构。

如需使用操作系统信息分配客机政策,OS Configuration 代理必须将操作系统信息发送到虚拟机的客机特性端点。为保护隐私,虚拟机的操作系统信息默认处于不可用状态。如需按操作系统信息进行虚拟机分组,您必须确保已启用客机特性和 OS Inventory Management 服务。如需启用这些服务,请参阅设置虚拟机

客机政策配置会自动应用于与相应分配匹配的所有新虚拟机。

必需配置

您可以通过使用以下任何一种任务或任务组合来完成必需配置:

  • 安装、移除和自动更新软件包。请参阅示例 1
  • 配置软件包代码库。请参阅示例 1示例 3
  • 使用软件配方安装软件。

客机政策 YAML 文件示例

示例 1

在以下虚拟机实例上安装软件包 my-package(必须保持最新状态):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

如需详细了解如何为软件包分配客机政策,请参阅 Package JSON 表示法参考文档。

示例 2

使用 yum 软件包管理器,在具有以下实例名称前缀的所有虚拟机实例上安装 Cloud Monitoring 代理:test-instance-dev-instance-

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

示例 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

在满足以下要求的所有虚拟机实例上运行内嵌脚本来安装软件:

  • 操作系统: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 表示法参考文档。

创建客机政策

当您创建客机政策时,客机政策的名称必须满足以下命名要求:

  • 只能包含小写字母、数字和连字符
  • 以字母开头
  • 以数字或字母结尾
  • 长度介于 1 到 63 个字符之间
  • 每个政策 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 文件示例

REST

在 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 文件示例

问题排查

如需排查客机政策问题,请参阅调试客机政策

后续步骤