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

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

准备工作

  1. 创建托管式 Microsoft AD 网域

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

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

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

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

  6. 在虚拟机上设置完整的 cloud-platform 访问权限范围。如需了解详情,请参阅授权

元数据

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

元数据键 说明
windows-startup-script-url 使用此元数据键可指定虚拟机在启动过程中执行的 Windows 启动脚本的可公开访问位置。如需使用由托管式 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

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

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

    如果您在 Cloud OU 下创建自定义 OU,请使用以下格式指定自定义 OU 的路径:/cloud/SUB_OU1/SUB_OU2/…/CUSTOM_OU。例如 /cloud/my-sub-ou/my-custom-ou

    如需详细了解如何在托管式 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 虚拟机自动加入网域

    后续步骤