您可以利用客机政策,在 Linux 和 Windows 虚拟机 (VM) 实例之间保持一致的软件配置。
如需针对一组虚拟机设置客机政策,请完成以下步骤:
- 向用户分配所需权限。
- 设置虚拟机。
- 配置客机政策 JSON 或 YAML 文件。
- 创建客机政策。
准备工作
- 查看 OS Config 配额。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
- 对于目标虚拟机,每当代理通过服务签入时,客机政策都会更新。此项检查每 10 到 15 分钟进行一次。
- 没有适用于旧版操作系统客机政策的合规性信息中心、通知或提醒服务。未运行 OS Config 代理的虚拟机不会报告故障。为获得最佳结果,请将此功能与 OS Inventory Management 服务或任何其他合规性监控工具搭配使用。
创建客机政策时,具有特定名称的软件配方仅运行一次。如需重新运行软件配方,您必须执行以下操作:
- 重命名软件配方。
- 使用重命名的软件配方删除并重新创建客机政策。
- GuestPolicy Admin (
roles/osconfig.guestPolicyAdmin
)。包含创建、删除、更新、获取和列出客机政策的权限。 - GuestPolicy Editor (
roles/osconfig.guestPolicyEditor
)。包含获取、更新和列出客机政策的权限。 - GuestPolicy Viewer (
roles/osconfig.guestPolicyViewer
)。包含获取和列出客机政策的只读权限。 PROJECT_ID
:项目 ID。USER_ID
:用户的 Google Workspace 用户名。- 实例名称。请参阅示例 1。
- 实例名称前缀。请参阅示例 2。
- 实例标签。请参阅示例 3。
- 地区。请参阅示例 4。
- 操作系统信息,包括操作系统名称、版本和架构。请参阅示例 5。os-inventory describe 命令可用于确定虚拟机的操作系统名称、版本和架构。
- 如需详细了解如何为软件包分配客机政策,请参阅 Package JSON 表示法参考文档。
- 如需详细了解如何为软件包代码库分配客机政策,请参阅 PackageRepository JSON 表示法参考文档。
- 操作系统:Red Hat Enterprise Linux 7
- 标签:
color=red
- 只能包含小写字母、数字和连字符
- 以字母开头
- 以数字或字母结尾
- 长度介于 1 到 63 个字符之间
- 每个政策 ID 在项目中必须是唯一的
POLICY_ID
:您要创建的客机政策的名称。FILE
:包含客机政策规范的 JSON 或 YAML 文件。如需查看示例配置,请参阅客机政策 YAML 文件示例。PROJECT_ID
:您的项目 ID。POLICY_ID
:您的客机政策名称。- 详细了解操作系统客机政策(旧版)。
- 管理客机政策。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
限制
权限
由于您可以使用客机政策在虚拟机上安装和管理软件包,因此创建和管理客机政策等效于授予对虚拟机的远程代码执行权限。
设置客机政策时,系统会使用 IAM 权限来控制对政策资源的访问权限,并记录活动的审核日志。但是,用户仍可以在虚拟机上运行代码,这可能会带来安全风险。为缓解此问题,我们建议您仅向每位用户提供所需的访问权限。
项目的所有者拥有创建和管理政策的完全访问权限。 对于所有其他用户,您需要为其授予权限。您可以授予以下其中一种精细角色:
例如,如需向用户管理员授予对客机政策的访问权限,请运行以下命令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:USER_ID@gmail.com \ --role roles/osconfig.guestPolicyAdmin
替换以下内容:
设置虚拟机
如需使用客机政策,您需要设置虚拟机管理器。
配置客机政策 yaml 或 JSON 文件
您必须使用 JSON 或 YAML 文件提供客机政策规范。如需查看示例配置,请参阅客机政策 YAML 文件示例。
YAML 或 JSON 文件包含以下两个主要部分:
作业
您可以将客机政策分配给项目中的所有虚拟机,也可以在 JSON 或 YAML 文件中使用
assignment
键,指定一组特定的虚拟机。例如,您可以通过使用以下任何特征来指定一组虚拟机:
如需使用操作系统信息分配客机政策,OS Configuration 代理必须将操作系统信息发送到虚拟机的客机特性端点。为保护隐私,虚拟机的操作系统信息默认处于不可用状态。如需按操作系统信息进行虚拟机分组,您必须确保已启用客机特性和 OS Inventory Management 服务。如需启用这些服务,请参阅设置虚拟机。
客机政策配置会自动应用于与相应分配匹配的所有新虚拟机。
必需配置
您可以通过使用以下任何一种任务或任务组合来完成必需配置:
客机政策 YAML 文件示例
示例 1
在以下虚拟机实例上安装软件包
my-package
(必须保持最新状态):my-instance-1
和my-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-1
和bad-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-b
和us-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
在满足以下要求的所有虚拟机实例上运行内嵌脚本来安装软件:
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 表示法参考文档。
创建客机政策
当您创建客机政策时,客机政策的名称必须满足以下命名要求:
使用以下方法之一创建客机政策。
gcloud
使用
os-config guest-policies create
命令创建客机政策。gcloud beta compute os-config guest-policies create POLICY_ID \ --file=FILE
替换以下内容:
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 }
替换以下内容:
如需查看示例配置,请参阅客机政策 YAML 文件示例。
问题排查
如需排查客机政策问题,请参阅调试客机政策。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-06-25。
-