您可以利用客机政策,在 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- 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 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 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):2024-12-03。
-