自动将 Windows 虚拟机加入网域

本页面介绍如何使用 Managed Service for Microsoft Active Directory 中的自动网域加入功能将 Windows Compute Engine 虚拟机实例加入网域。

代管式 Microsoft AD 如何将 Windows 虚拟机自动加入网域

如需使用代管式 Microsoft AD 对虚拟机上运行的应用进行身份验证,您需要将虚拟机加入您的代管式 Microsoft AD 网域。网域加入过程通常涉及执行一些手动步骤。

创建或更新 Windows Compute Engine 虚拟机时,您可以使用脚本自动执行手动方法,将虚拟机加入您的代管式 Microsoft AD 网域。但是,如需在 Compute Engine 虚拟机上执行这些脚本,您需要安全存储和维护的 AD 凭据,以及用于预配和运行这些脚本的环境。如果不需要凭据和其他服务,您可以使用 Managed Microsoft AD 提供的现成脚本自动执行网域加入流程。

创建 Compute Engine 虚拟机时,您可以使用脚本将虚拟机自动加入您的代管式 Microsoft AD 网域。在 Compute Engine 创建虚拟机后,Managed Microsoft AD 会发起网域加入请求,并尝试将虚拟机加入您的网域。如果网域加入请求成功,代管式 Microsoft AD 会将创建的虚拟机加入您的网域。如果网域加入请求失败,已创建的虚拟机会继续运行。出于安全或结算目的,您可以自定义此行为,当网域加入请求失败时,Managed Microsoft AD 可以停止虚拟机。

更新 Compute Engine 虚拟机时,您可以使用脚本将现有虚拟机自动加入您的代管式 Microsoft AD 网域。为确保网域加入请求成功,代管式 Microsoft AD 会在运行脚本后重启虚拟机。

准备工作

  1. 创建托管式 Microsoft AD 域

  2. 确保虚拟机名称不超过 15 个字符。

  3. 确保虚拟机在 Managed Microsoft AD 支持的 Windows 版本上运行。

  4. 在 Managed Microsoft AD 网域与虚拟机的网络之间配置网域对等互连,或将 Managed Microsoft AD 网域与虚拟机置于同一网络中。

  5. 在具有 Managed Microsoft AD 网域的项目中创建一个具有 Google Cloud Managed Identities 网域加入 (roles/managedidentities.domainJoin) IAM 角色的服务帐号。如需了解详情,请参阅 Cloud Managed Identities 角色

  6. 对虚拟机设置完整的 cloud-platform 访问权限范围。有关详情,请参阅授权

元数据

您需要以下元数据键才能将 Windows 虚拟机加入网域。

元数据键 说明
windows-startup-script-url 使用此元数据键指定虚拟机在启动过程中执行的 Windows 启动脚本的可公开访问位置。如需使用 Managed Microsoft AD 预先提供的 Windows 启动脚本,您可以输入以下网址:https://raw.githubusercontent.com/GoogleCloudPlatform/managed-microsoft-activedirectory/main/domain_join.ps1

如果虚拟机无法访问此网址,您可以使用任何其他受支持的方法传递启动脚本。如需了解详情,请参阅在 Windows 虚拟机上使用启动脚本
managed-ad-domain 使用此元数据键指定要加入的 Managed Microsoft AD 网域的完整资源名称,格式为 projects/PROJECT_ID/locations/global/domains/DOMAIN_NAME。例如 projects/my-project-123/locations/global/domains/my-domain.example.com
managed-ad-domain-join-failure-stop 可选:默认情况下,即使网域加入请求失败,虚拟机也会继续运行。如果您想在请求失败时停止虚拟机,可以将此元数据键设置为 TRUE。代管式 Microsoft AD 可在您设置此元数据键后停止虚拟机,但不会删除虚拟机。
enable-guest-attributes 可选:默认情况下,虚拟机上的客机特性处于停用状态。如果您想在执行启动脚本后使用虚拟机的客机属性来记录网域加入状态,则可以将此元数据键设置为 TRUE

Managed Microsoft AD 将网域加入状态写入 guest-attributesmanaged-ad 命名空间下的以下键中:
  • domain-join-status:此键提供执行脚本后网域加入请求的状态。
  • domain-join-failure-message:如果网域加入请求失败,则此键会提供错误消息。
  • 获取客机属性后,您可以使用这些命名空间和键查看网域加入状态。
    managed-ad-ou-name 可选:默认情况下,Managed Microsoft AD 会将虚拟机添加到在“Cloud”组织部门下预先创建的“GCE Instances”组织部门 (OU),以便更好地管理政策。如需详细了解“Cloud”组织部门,请参阅组织部门

    如果您想要将虚拟机加入自定义组织部门,则需要在 Managed Microsoft AD 中的 GCE Instances 组织部门或 Cloud 组织部门下创建自定义组织部门,并使用此元数据键指定自定义组织部门。如果您在“Cloud”组织部门或“GCE Instances”组织部门之外创建自定义组织部门,则代管式 Microsoft AD 不支持您在任何其他位置创建的自定义组织部门。

    如果您在“Cloud”组织部门下创建自定义组织部门,请按以下格式指定该自定义组织部门的路径:/cloud/SUB_OU1/SUB_OU2/…/CUSTOM_OU。例如 /cloud/my-sub-ou/my-custom-ou

    如需详细了解如何在 Managed Microsoft AD 中管理 AD 对象,请参阅管理 Active Directory 对象
    managed-ad-force 可选:在您删除已加入某个网域的虚拟机后,该虚拟机的计算机帐号将继续存在于 Managed Microsoft AD 中。当您尝试加入使用同一计算机帐号的其他虚拟机时,默认情况下,网域加入请求会失败。如果您将此元数据键设置为 TRUE,Managed Microsoft AD 可以重复使用现有的计算机帐号。

    加入 Windows 虚拟机

    创建 Windows 虚拟机或更新现有虚拟机时,您可以使用这些元数据键。以下部分说明在创建虚拟机或更新虚拟机时,如何在 gcloud CLI 命令中使用这些元数据键。

    不过,您也可以使用其他可用选项将这些元数据键用于虚拟机。如需详细了解如何在 Windows Compute Engine 虚拟机中使用元数据,请参阅设置自定义元数据

    在创建 Windows 虚拟机期间加入一个 Windows 虚拟机

    如需创建并加入 Windows Compute Engine 虚拟机,请运行以下 gcloud CLI 命令:

    gcloud compute instances create INSTANCE_NAME \
        --metadata=windows-startup-script-url=URL,managed-ad-domain=DOMAIN_RESOURCE_PATH,managed-ad-domain-join-failure-stop=TRUE,enable-guest-attributes=TRUE \
        --service-account=SERVICE_ACCOUNT \
        --scopes=https://www.googleapis.com/auth/cloud-platform \
        --image-project windows-cloud \
        --image-family IMAGE_FAMILY
    

    替换以下内容:

    • INSTANCE_NAME:要创建的 Windows Compute Engine 虚拟机的名称。例如 my-instance-1
    • URL:虚拟机在启动过程中执行的 Windows 启动脚本的可公开访问位置。
    • DOMAIN_RESOURCE_PATH:要加入的代管式 Microsoft AD 网域的完整资源名称。例如 projects/my-project-123/locations/global/domains/my-domain.example.com
    • SERVICE_ACCOUNT:您要挂接到虚拟机的服务帐号。例如 my-sa-123@my-project-123.iam.gserviceaccount.com
    • --scopes:虚拟机中配置的默认访问权限范围会限制网域加入请求。您需要在虚拟机上设置完整的 cloud-platform 访问权限范围。有关详情,请参阅授权
    • --image-project:您需要将此标志设置为 windows-cloud,才能创建 Windows 虚拟机。如需了解详情,请参阅 gcloud compute instances create
    • IMAGE_FAMILY:指定一个公共映像系列,其中包含支持的 Windows 版本的映像。例如 windows-2019-core

    如需详细了解如何在创建虚拟机期间添加元数据,请参阅在创建虚拟机期间设置元数据

    联接现有的 Windows 虚拟机

    您可以更新现有 Windows Compute Engine 虚拟机上的元数据键,并将该虚拟机加入您的网域。将这些元数据键添加到虚拟机后,请重启虚拟机,以便网域加入请求成功。

    如需联接现有的 Windows Compute Engine 虚拟机,请运行以下 gcloud CLI 命令:

    gcloud compute instances add-metadata INSTANCE_NAME \
        --metadata=windows-startup-script-url=URL,managed-ad-domain=DOMAIN_RESOURCE_PATH,managed-ad-domain-join-failure-stop=TRUE,enable-guest-attributes=TRUE \
        --service-account=SERVICE_ACCOUNT \
        --scopes=https://www.googleapis.com/auth/cloud-platform
    

    替换以下内容:

    • INSTANCE_NAME:您要加入的 Windows Compute Engine 虚拟机的名称。例如 my-instance-1
    • URL:虚拟机在重启后执行的 Windows 启动脚本的可公开访问位置。
    • DOMAIN_RESOURCE_PATH:要加入的代管式 Microsoft AD 网域的完整资源名称。例如 projects/my-project-123/locations/global/domains/my-domain.example.com
    • SERVICE_ACCOUNT:您在创建期间挂接了虚拟机的服务帐号。例如 my-sa-123@my-project-123.iam.gserviceaccount.com
    • --scopes:虚拟机中配置的默认访问权限范围会限制网域加入请求。您需要在虚拟机上设置完整的 cloud-platform 访问权限范围。有关详情,请参阅授权

    如需详细了解如何向现有虚拟机添加元数据,请参阅更新正在运行的虚拟机上的元数据

    清理未联接的虚拟机

    在以下情况下,我们建议您从 Managed Microsoft AD 手动删除计算机帐号:

    • 您删除已加入代管式 Microsoft AD 网域的虚拟机。
    • 如果虚拟机未能加入代管式 Microsoft AD 网域。

    查看调试日志

    如果网域加入请求失败,您可以查看启动脚本的日志,以确定问题并排查问题。如需查看启动脚本的日志,您可以查看串行端口 1 输出。如果您在虚拟机上启用了客机特性,则可以获取客机特性来查看日志。

    如需了解将虚拟机加入网域时可能遇到的常见错误,请参阅无法将 Windows 虚拟机自动加入网域

    后续步骤