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

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

准备工作

  1. 创建托管式 Microsoft AD 网域

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

  3. 确保虚拟机运行的是代管式 Microsoft AD 支持的 Windows 版本

  4. 在托管式 Microsoft AD 网域和虚拟机的网络之间配置网域对等互连,或者将托管式 Microsoft AD 网域和虚拟机放在同一网络中。

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

  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 使用此元数据键指定要加入的代管式 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 OU,请参阅组织部门

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

    如果您在 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,代管式 Microsoft AD 可以重复使用现有计算机账号。

    加入 Windows 虚拟机

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

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

    在创建期间加入 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 访问权限范围。有关详情,请参阅授权

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

    清理未联接的虚拟机

    在以下情况下,我们建议您从受管理的 Microsoft AD 中手动删除计算机账号:

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

    查看调试日志

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

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

    后续步骤