En este documento se explica cómo configurar Active Directory y Compute Engine para que las instancias de máquina virtual (VM) de Windows puedan unirse automáticamente a un dominio de Active Directory.
Automatizar el proceso de unión de máquinas virtuales Windows a Active Directory te ayuda a simplificar el proceso de aprovisionamiento de servidores Windows. Este enfoque también te permite aprovechar el escalado automático sin renunciar a las ventajas de usar Active Directory para gestionar el acceso y la configuración.
Este documento está dirigido a administradores de sistemas y presupone que tienes conocimientos sobre Active Directory y Google Cloud redes Google Cloud .
La configuración que crees siguiendo el procedimiento descrito en este documento puede ser la base de otros trabajos que realices con servidores Windows en Google Cloud. Por ejemplo, después de completar este procedimiento, puedes desplegar aplicaciones ASP.NET con autenticación de Windows en contenedores de Windows.
Si usas Managed Microsoft AD y no necesitas limpiar automáticamente las cuentas de ordenador obsoletas, considera la posibilidad de unir las VMs de Windows mediante la función de unión automática a un dominio. Para obtener más información, consulta Unir automáticamente una VM de Windows a un dominio.
Objetivos
- Despliega una aplicación de Cloud Run que permita que las instancias de VM de los proyectos seleccionados se unan automáticamente a tu dominio de Active Directory.
- Crea una tarea de Cloud Scheduler que analice periódicamente tu dominio de Active Directory para detectar cuentas de ordenador obsoletas y las elimine.
- Prueba la configuración creando un grupo de instancias gestionadas (MIG) con autoescalado de instancias de VM unidas a un dominio.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Las instrucciones de este documento están diseñadas para que el uso de recursos no supere los límites del nivel Always Free de Google Cloud.
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines de usar este documento, puedes evitar que se te siga facturando eliminando los recursos que hayas creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
En este documento se da por hecho que ya has implementado Active Directory en Google Cloud con el servicio gestionado para Microsoft Active Directory (Microsoft AD gestionado) o implementando controladores de dominio autogestionados en Google Cloud.
Para completar los procedimientos, asegúrate de que tienes lo siguiente:
- Acceso de administrador a tu dominio de Active Directory, incluida la posibilidad de crear usuarios, grupos y unidades organizativas (UOs).
- Un intervalo de IP CIDR /28 que no esté en uso en la VPC en la que se hayan implementado los controladores de dominio de Active Directory. Este intervalo de IPs se usa para configurar el acceso a VPC sin servidor.
- Una subred en la que desplegar instancias de Windows. La subred debe configurarse para usar Acceso privado de Google.
Si usas un controlador de dominio autogestionado, también necesitas lo siguiente:
- Una zona de reenvío de DNS privado que reenvía las consultas de DNS a tus controladores de dominio de Active Directory.
Implementar este enfoque
En un entorno local, puede usar archivos de respuesta
(unattend.xml
) y la JoinDomain
personalización
para unir automáticamente nuevos ordenadores a un dominio. Aunque puedes usar el mismo proceso en Google Cloud, este enfoque tiene varias limitaciones:
- Para usar un archivo
unattend.xml
personalizado, debes mantener una imagen de Compute Engine personalizada. Para mantener actualizada una imagen personalizada mediante Windows Update, es necesario realizar un mantenimiento continuo o un trabajo inicial para configurar la automatización. A menos que necesites mantener una imagen personalizada por otros motivos, este esfuerzo adicional podría no estar justificado. - Si se usa la personalización
JoinDomain
, se vincula una imagen a un solo dominio de Active Directory, ya que el nombre de dominio debe especificarse enunattend.xml
. Si mantienes varios dominios o bosques de Active Directory (por ejemplo, para entornos de pruebas y de producción independientes), es posible que tengas que mantener varias imágenes personalizadas para cada dominio. - Para unir un ordenador Windows a un dominio, se necesitan credenciales de usuario que tengan permisos para crear un objeto de ordenador en el directorio. Si usas la personalización de
JoinDomain
enunattend.xml
, debes insertar estas credenciales como texto sin formato enunattend.xml
. Estas credenciales insertadas pueden convertir la imagen en un posible objetivo para los atacantes. Aunque puedes controlar el acceso a la imagen configurando los permisos de Gestión de Identidades y Accesos (IAM) adecuados, gestionar el acceso a una imagen personalizada añade una complejidad innecesaria.
El método que se describe en este documento no utiliza archivos de respuesta y, por lo tanto, no requiere imágenes preparadas especialmente. En su lugar, usa el siguiente fragmento de script de especialización de sysprep cuando crees una instancia de VM:
iex((New-Object System.Net.WebClient).DownloadString('https://DOMAIN'))
Este fragmento de script de sysprep specialize inicia un proceso que se ilustra en el siguiente diagrama.
El proceso es el siguiente:
- Una vez creada la instancia de VM, Windows se inicia por primera vez. Como parte de la fase de configuración especializada,
Windows ejecuta el scriptlet especializado de sysprep. El fragmento de script de especialización invoca la aplicación
register-computer
Cloud Run y descarga una secuencia de comandos de PowerShell que controla el proceso de unión al dominio. - Windows invoca la secuencia de comandos de PowerShell descargada.
- La secuencia de comandos de PowerShell llama al servidor de metadatos para obtener un token de ID que identifica de forma segura la instancia de VM.
- La secuencia de comandos vuelve a llamar a la aplicación
register-computer
y le transfiere el token de ID para autenticarse. - La aplicación valida el token de ID y extrae el nombre, la zona y elGoogle Cloud ID de proyecto de la instancia de VM.
- La aplicación verifica que el dominio de Active Directory esté configurado para permitir que las instancias de VM del proyecto dado se unan al dominio. Para completar esta verificación, la aplicación localiza un controlador de dominio de Active Directory y se conecta a él para buscar una unidad organizativa (UO) cuyo nombre coincida con el ID de proyecto Google Cloud del token de ID. Si se encuentra una unidad organizativa coincidente, las instancias de VM del proyecto estarán autorizadas para unirse al dominio de Active Directory en la unidad organizativa dada.
- La aplicación verifica que el Google Cloud proyecto esté configurado para permitir que las instancias de VM se unan a Active Directory. Para completar esta verificación, la aplicación comprueba si puede acceder a la instancia de VM mediante la API de Compute Engine.
- Si todas las comprobaciones se realizan correctamente, la aplicación preconfigura una cuenta de ordenador en Active Directory. La aplicación guarda el nombre, la zona y el ID de la instancia de VM como atributos en el objeto de cuenta de ordenador para que se pueda asociar a la instancia de VM.
- Con el protocolo de contraseña definida de Kerberos, la aplicación asigna una contraseña aleatoria a la cuenta del ordenador.
- El nombre y la contraseña del ordenador se devuelven a la instancia de Windows a través de un canal seguro con TLS.
- Con la cuenta de ordenador preconfigurada, la secuencia de comandos de PowerShell une el ordenador al dominio.
- Una vez completada la fase de configuración especializada, el equipo se reinicia.
En el resto de este procedimiento se explican los pasos necesarios para configurar la unión automática a un dominio.
Preparar el dominio de Active Directory
Primero, prepara tu dominio de Active Directory. Para completar este paso, necesitas un ordenador que tenga acceso de administrador a tu dominio de Active Directory.
Opcional: Limitar quién puede unir ordenadores al dominio
Puede que quieras restringir quién puede unir ordenadores al dominio. De forma predeterminada, la configuración del objeto de directiva de grupo (GPO) de la directiva predeterminada del controlador de dominio concede el Add workstations to domain
derecho de usuario a todos los usuarios autenticados.
Cualquier persona con ese derecho de usuario puede unir ordenadores al dominio. Como vas a automatizar el proceso de unir ordenadores a tu dominio de Active Directory, conceder este nivel de acceso de forma universal supone un riesgo de seguridad innecesario.
Para limitar quién puede unir ordenadores a tu dominio de Active Directory, cambia la configuración predeterminada del GPO de la política predeterminada del controlador de dominio:
- Con un cliente RDP, inicia sesión en un equipo que tenga acceso de administrador a tu dominio de Active Directory.
- Abre la consola de administración de directivas de grupo (GPMC).
- Ve a Bosque > Dominios > domain-name > Objetos de directiva de grupo, donde domain-name es el nombre de tu dominio de Active Directory.
- Haz clic con el botón derecho en Default Domain Controller Policy (Directiva predeterminada del controlador de dominio) y, a continuación, en Edit (Editar).
- En la consola Editor de administración de directivas de grupo, ve a Configuración del equipo > Directivas > Configuración de Windows > Configuración de seguridad > Directivas locales > Asignación de derechos de usuario.
- Haz doble clic en Añadir estaciones de trabajo al dominio.
- En Propiedades, quite Usuarios autenticados de la lista.
- Para permitir que los administradores se unan al dominio manualmente (opcional), haz clic en Añadir usuario o grupo y, a continuación, añade un grupo de administradores a la lista.
- Haz clic en Aceptar.
Ahora puedes cerrar la consola del Editor de administración de directivas de grupo y GPMC.
Inicializar una estructura de directorios
Ahora, crea una unidad organizativa que sirva de contenedor para todas las unidades organizativas específicas del proyecto:
- Con un cliente RDP, inicia sesión en un equipo que tenga acceso de administrador a tu dominio de Active Directory.
- Abre una sesión de PowerShell con privilegios elevados.
Crea una unidad organizativa:
$ParentOrgUnitPath = (Get-ADDomain).ComputersContainer $ProjectsOrgUnitPath = New-ADOrganizationalUnit ` -Name 'Projects' ` -Path $ParentOrgUnitPath ` -PassThru
Crear una cuenta de usuario de Active Directory
Para acceder a Active Directory y preconfigurar cuentas de ordenador, la aplicación register-computer
necesita una cuenta de usuario de Active Directory:
Crea una cuenta de usuario de Active Directory llamada
register-computer
, asígnale una contraseña aleatoria y colócala en la unidad organizativaProjects
:# Generate a random password $Password = [Guid]::NewGuid().ToString()+"-"+[Guid]::NewGuid().ToString() # Create user $UpnSuffix = (Get-ADDomain).DNSRoot $RegisterComputerUser = New-ADUser ` -Name "register-computer Cloud Run app" ` -GivenName "Register" ` -Surname "Computer" ` -Path $ProjectsOrgUnitPath ` -SamAccountName "register-computer" ` -UserPrincipalName "register-computer@$UpnSuffix" ` -AccountPassword (ConvertTo-SecureString "$Password" -AsPlainText -Force) ` -PasswordNeverExpires $True ` -Enabled $True ` -PassThru
Concede a la cuenta
register-computer
el conjunto mínimo de permisos necesarios para gestionar cuentas y grupos de ordenadores en la unidad organizativaProjects
y sus subunidades organizativas:$AcesForContainerAndDescendents = @( "CCDC;Computer", # Create/delete computers "CCDC;Group" # Create/delete users ) $AcesForDescendents = @( "LC;;Computer" , # List child objects "RC;;Computer" , # Read security information "WD;;Computer" , # Change security information "WP;;Computer" , # Write properties "RP;;Computer" , # Read properties "CA;Reset Password;Computer", # ... "CA;Change Password;Computer", # ... "WS;Validated write to service principal name;Computer", "WS;Validated write to DNS host name;Computer", "LC;;Group", # List child objects "RC;;Group", # Read security information "WD;;Group", # Change security information "WP;;Group", # Write properties "RP;;Group" # Read properties ) $AcesForContainerAndDescendents | % { dsacls.exe $ProjectsOrgUnitPath /G "${RegisterComputerUser}:${_}" /I:T | Out-Null } $AcesForDescendents | % { dsacls.exe $ProjectsOrgUnitPath /G "${RegisterComputerUser}:${_}" /I:S | Out-Null }
El comando puede tardar unos minutos en completarse.
Concede permiso a la cuenta
register-computer
para eliminar registros DNS:Microsoft AD gestionado
Add-ADGroupMember -Identity "Cloud Service DNS Administrators" -Members ${RegisterComputerUser}
Dominio autogestionado
$DnsPartition=(Get-ADDomain).SubordinateReferences | Where-Object {$_.StartsWith('DC=DomainDnsZones')} $DnsContainer="DC=$((Get-ADDomain).DNSRoot),CN=MicrosoftDNS,$DnsPartition" dsacls $DnsContainer /G "${RegisterComputerUser}:SD" /I:S
Muestra la ruta de la unidad organizativa
Projects
y la contraseña generada de la cuenta de usuario de Active Directoryregister-computer
. Anota los valores, ya que los necesitarás más adelante.Write-Host "Password: $Password" Write-Host "Projects OU: $ProjectsOrgUnitPath"
Preparando el Google Cloud proyecto
Ahora, configura tu proyecto de dominio:
- Si usas Microsoft AD gestionado, el proyecto de tu dominio es el proyecto en el que has desplegado Microsoft AD gestionado.
- Si usas Active Directory autogestionado, tu proyecto de dominio es el proyecto que ejecuta tus controladores de dominio de Active Directory. En el caso de una VPC compartida, este proyecto debe ser el mismo que el proyecto host de la VPC.
Puedes usar este proyecto de dominio para hacer lo siguiente:
- Crea un secreto de Secret Manager que contenga la contraseña de la cuenta de usuario de Active Directory
register-computer
. - Despliega la aplicación
register-computer
. - Configura Cloud Scheduler para que active limpiezas de cuentas de ordenador obsoletas.
Te recomendamos que concedas acceso al proyecto de dominio con el principio de privilegio mínimo.
Crear un secreto de Secret Manager
En la Google Cloud consola, abre Cloud Shell.
Inicia PowerShell:
pwsh
Inicializa la siguiente variable y sustituye
domain-project-id
por el ID de tu proyecto de dominio:$DomainProjectId = "
domain-project-id
"Define el proyecto de dominio como proyecto predeterminado:
& gcloud config set project $DomainProjectId
Habilita la API Secret Manager:
& gcloud services enable secretmanager.googleapis.com
Introduce la contraseña de la
register-computer
cuenta de usuario de Active Directory y almacénala en un secreto de Secret Manager:$RegisterComputerCredential = (Get-Credential -Credential 'register-computer') $TempFile = New-TemporaryFile Set-Content $TempFile $($RegisterComputerCredential.GetNetworkCredential().Password) -NoNewLine & gcloud secrets create ad-password --data-file $TempFile Remove-Item $TempFile
Conceder acceso a Kerberos y LDAP
Para gestionar las uniones a dominios, la aplicación register-computer
accede a tus controladores de dominio mediante los siguientes protocolos:
- LDAP (TCP/389) o LDAPS (TCP/636)
- Kerberos (UDP/88, TCP/88)
Cambio de contraseña de Kerberos (UDP/464 y TCP/464)
Microsoft AD gestionado
No es necesario que configures ninguna regla de cortafuegos.
Dominio autogestionado
Crea una regla de cortafuegos que permita el acceso a tus controladores de dominio.
Puedes aplicar la regla en función de una etiqueta de red que hayas asignado a tus controladores de dominio o mediante una cuenta de servicio.
Por etiqueta de red
& gcloud compute firewall-rules create allow-adkrb-from-serverless-to-dc ` --direction INGRESS ` --action allow ` --rules udp:88,tcp:88,tcp:389,tcp:636,udp:464,tcp:464 ` --source-ranges $ServerlessIpRange ` --target-tags dc-tag ` --network $VpcName ` --project vpc-project-id ` --priority 10000
Haz los cambios siguientes:
dc-tag
: la etiqueta de red asignada a tus máquinas virtuales de controlador de dominio.vpc-project-id
: ID del proyecto en el que se define la VPC. Si utilizas una VPC compartida, usa el proyecto host de la VPC. De lo contrario, usa el ID del proyecto de dominio.
Por cuenta de servicio
& gcloud compute firewall-rules create allow-adkrb-from-serverless-to-dc ` --direction INGRESS ` --action allow ` --rules udp:88,tcp:88,tcp:389,tcp:636,udp:464,tcp:464 ` --source-ranges $ServerlessIpRange ` --target-service-accounts dc-sa ` --network $VpcName ` --project vpc-project-id ` --priority 10000
Haz los cambios siguientes:
dc-sa
: la dirección de correo de la cuenta de servicio que usan las VMs de tu controlador de dominio.vpc-project-id
: ID del proyecto en el que se define la VPC. Si utilizas una VPC compartida, usa el proyecto host de la VPC. De lo contrario, usa el ID del proyecto de dominio.
Desplegar la aplicación de Cloud Run
Ahora, configura Cloud Build para desplegar la aplicación register-computer
en Cloud Run:
En Cloud Shell, clona el repositorio de GitHub:
& git clone https://github.com/GoogleCloudPlatform/gce-automated-ad-join.git cd gce-automated-ad-join/ad-joining
Inicializa las siguientes variables:
$ServerlessRegion = "
serverless-region
" $VpcName = "vpc-name
" $VpcSubnet = "subnet-name
" $AdDomain = "dns-domain-name
" $AdNetbiosDomain = "netbios-domain-name
" $ProjectsOrgUnitPath = "projects-ou-distinguished-name
"Haz los cambios siguientes:
serverless-region
: la región en la que se va a desplegar la aplicaciónregister-computer
. No es necesario que la región sea la misma en la que tienes previsto implementar instancias de VM.vpc-name
: nombre de la red de VPC que contiene los controladores de dominio de Active Directory.subnet-name
: la subred devpc-name
que se va a usar para el acceso directo a la VPC. La subred debe estar en la misma región queserverless-region
.dns-domain-name
: nombre de dominio DNS de tu dominio de Active Directory.netbios-domain-name
: nombre NetBIOS de tu dominio de Active Directory.projects-ou-distinguished-name
: nombre distintivo de tu unidad organizativaProjects
.
Habilita las APIs Cloud Run y Cloud Build:
& gcloud services enable run.googleapis.com cloudbuild.googleapis.com
Crea una cuenta de servicio
register-computer-app
para la aplicación de Cloud Run:& gcloud iam service-accounts create register-computer-app ` --display-name="register computer Cloud Run app"
Crea una cuenta de servicio
build-service
para ejecutar activadores de Cloud Build:& gcloud iam service-accounts create build-service ` --display-name="Cloud Build build agent"
Permite que la cuenta de servicio de Cloud Run lea el secreto que contiene la contraseña de Active Directory:
& gcloud secrets add-iam-policy-binding ad-password ` --member "serviceAccount:register-computer-app@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/secretmanager.secretAccessor"
Concede a Cloud Build los permisos necesarios para desplegar en Cloud Run:
$DomainProjectNumber = (gcloud projects describe $DomainProjectId --format='value(projectNumber)') & gcloud iam service-accounts add-iam-policy-binding register-computer-app@$DomainProjectId.iam.gserviceaccount.com ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/iam.serviceAccountUser" & gcloud projects add-iam-policy-binding $DomainProjectId ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role roles/cloudbuild.builds.builder & gcloud projects add-iam-policy-binding $DomainProjectId ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role roles/run.admin
Usa el archivo
cloudbuild.yaml
como plantilla para crear una configuración de compilación de Cloud Run personalizada que se ajuste a tu entorno:$Build = (Get-Content cloudbuild.yaml) $Build = $Build.Replace('__SERVERLESS_REGION__', "$ServerlessRegion") $Build = $Build.Replace('__PROJECTS_DN__', "$ProjectsOrgUnitPath") $Build = $Build.Replace('__AD_DOMAIN__', "$AdDomain") $Build = $Build.Replace('__AD_NETBIOS_DOMAIN__', "$AdNetbiosDomain") $Build = $Build.Replace('__SERVICE_ACCOUNT_EMAIL__', "register-computer-app@$DomainProjectId.iam.gserviceaccount.com") $Build = $Build.Replace('__SERVERLESS_NETWORK__', "$VpcName") $Build = $Build.Replace('__SERVERLESS_SUBNET__', "$VpcSubnet") $Build | Set-Content .\cloudbuild.hydrated.yaml
Compila la aplicación y despliégala en Cloud Run:
& gcloud builds submit . ` --config cloudbuild.hydrated.yaml ` --substitutions _IMAGE_TAG=$(git rev-parse --short HEAD) ` --service-account "projects/$DomainProjectId/serviceAccounts/build-service@$DomainProjectId.iam.gserviceaccount.com" ` --default-buckets-behavior regional-user-owned-bucket
El despliegue puede tardar un par de minutos en completarse.
Determina la URL de la aplicación de Cloud Run:
$RegisterUrl = (gcloud run services describe register-computer ` --platform managed ` --region $ServerlessRegion ` --format=value`(status.url`)) Write-Host $RegisterUrl
Fíjate en la URL. Lo necesitarás siempre que crees una instancia de VM que deba unirse a Active Directory.
Invoca la aplicación de Cloud Run para verificar que el despliegue se ha realizado correctamente:
Invoke-RestMethod $RegisterUrl
Se muestra una secuencia de comandos de PowerShell. La VM ejecuta esta secuencia de comandos durante la fase de especialización, en la que se une al dominio.
Habilitar un proyecto para que los dominios se unan automáticamente
La aplicación register-computer
no permite que las instancias de VM se unan a un dominio de Active Directory a menos que el proyecto de la VM tenga habilitada la unión automática a un dominio. Esta medida de seguridad ayuda a evitar que las VMs conectadas a proyectos no autorizados accedan a tu dominio.
Para habilitar la unión automática a un dominio en un proyecto, debes hacer lo siguiente:
- Crea una unidad organizativa en Active Directory cuyo nombre coincida con tuGoogle Cloud ID de proyecto.
- Da acceso a la aplicación
register-computer
al proyectoGoogle Cloud .
Primero, crea la unidad organizativa:
- Con un cliente RDP, inicia sesión en un equipo que tenga acceso de administrador a tu dominio de Active Directory.
- En el complemento MMC Usuarios y equipos de Active Directory, ve a la unidad organizativa
Projects
. - Haz clic con el botón derecho en la unidad organizativa y selecciona Nueva > Unidad organizativa.
- En el cuadro de diálogo Nuevo objeto, introduce el ID del proyecto en el que quieres implementar tus VMs.Google Cloud
- Haz clic en Aceptar.
A continuación, da acceso a la aplicación register-computer
al proyectoGoogle Cloud :
En Cloud Shell, inicia PowerShell:
pwsh
Inicializa las siguientes variables:
$ProjectId = "
project-id
" $DomainProjectId = "domain-project-id
"Sustituir
project-id
con el ID delGoogle Cloud proyecto en el que desplegar tus VMsdomain-project-id
con el ID de tu proyecto de dominio
Asigna el rol
Compute Viewer
a la cuenta de servicioregister-computer-app
en el proyecto:& gcloud projects add-iam-policy-binding $ProjectId ` --member "serviceAccount:register-computer-app@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/compute.viewer"
Tu proyecto ya está listo para admitir la unión automática a un dominio.
Probar la unión a un dominio
Ahora puedes verificar que la configuración funciona correctamente de las siguientes formas:
- Crear una instancia de VM que se una automáticamente al dominio de Active Directory
- Crear un grupo de instancias gestionado de instancias de VM que se unan automáticamente al dominio de Active Directory
Crear una instancia de VM y unirse a ella
Crea una instancia de VM que se una automáticamente al dominio de Active Directory:
Vuelve a la sesión de PowerShell en Cloud Shell e inicializa las siguientes variables:
$Region = "vpc-region-to-deploy-vm" $Zone = "zone-to-deploy-vm" $Subnet = "vpc-subnet-to-deploy-vm" $ServerlessRegion = "
serverless-region
"Haz los cambios siguientes:
vpc-region-to-deploy-vm
: la región en la que se va a implementar la instancia de VM.vpc-subnet-to-deploy-vm
: la subred en la que se va a implementar la instancia de VM.zone-to-deploy-vm
: la zona en la que se va a desplegar la instancia de VM.serverless-region
: la región en la que has desplegado la aplicación de Cloud Run.
Define el proyecto y la zona predeterminados:
& gcloud config set project $ProjectId & gcloud config set compute/zone $Zone
Vuelve a buscar la URL de la aplicación de Cloud Run:
$RegisterUrl = (gcloud run services describe register-computer ` --platform managed ` --region $ServerlessRegion ` --format value`(status.url`) ` --project $DomainProjectId)
Crea una instancia pasando el scriptlet de especialización que hace que la VM se una al dominio:
VPC compartida
$VpchostProjectId = (gcloud compute shared-vpc get-host-project $ProjectId --format=value`(name`)) & gcloud compute instances create join-01 ` --image-family windows-2019-core ` --image-project windows-cloud ` --machine-type n1-standard-2 ` --no-address ` --subnet projects/$VpchostProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
VPC independiente
& gcloud compute instances create join-01 ` --image-family=windows-2019-core ` --image-project=windows-cloud ` --machine-type=n1-standard-2 ` --no-address ` --subnet $Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Si quieres usar un nombre de host personalizado, añade un parámetro
--hostname
al comando.Si usas una versión de Windows Server anterior a Windows Server 2019, TLS 1.2 podría estar inhabilitado de forma predeterminada, lo que puede provocar que falle el scriptlet especializado. Para habilitar TLS 1.2, usa el siguiente scriptlet:
[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))
Monitoriza el proceso de arranque:
& gcloud compute instances tail-serial-port-output join-01
Después de un minuto aproximadamente, el ordenador se unirá a tu dominio de Active Directory. El resultado debería ser similar al siguiente:
Domain : corp.example.com DomainController : dc-01.corp.example.com. OrgUnitPath : OU=test-project-123,OU=Projects,DC=corp,DC=example,DC=com WARNING: The changes will take effect after you restart the computer Computer successfully joined to domain
Para dejar de observar el proceso de arranque, pulsa
CTRL+C
.
Verificar que la VM se ha unido a Active Directory
- Con un cliente RDP, inicia sesión en un equipo que tenga acceso de administrador a tu dominio de Active Directory.
- Abre el complemento MMC Usuarios y equipos de Active Directory.
- En el menú, comprueba que la opción Ver > Funciones avanzadas esté habilitada.
- Ve a la unidad organizativa con el nombre del Google Cloud ID del proyecto en el que has creado una instancia de VM.
- Haz doble clic en la cuenta
join-01
. En el cuadro de diálogo Propiedades, haga clic en la pestaña Editor de atributos.
La cuenta de ordenador se anota con atributos LDAP adicionales. Estos atributos te permiten hacer un seguimiento de la asociación entre el objeto de ordenador y la instancia de Compute Engine.
Verifica que la lista contenga los siguientes atributos y valores de LDAP.
Atributo de LDAP Valor msDS-cloudExtensionAttribute1
Google Cloud ID de proyecto msDS-cloudExtensionAttribute2
Zona de Compute Engine msDS-cloudExtensionAttribute3
Nombre de la instancia de Compute Engine Los atributos
msDS-cloudExtensionAttribute
son atributos de uso general y no los utiliza Active Directory.
Diagnosticar errores
Si tu instancia de VM no se ha podido unir al dominio, consulta el registro de la aplicación register-computer
:
En la Google Cloud consola, ve a Cloud Run.
Haz clic en la aplicación
register-computer
.En el menú, haz clic en Registros.
Eliminar la instancia
Después de verificar que la instancia de VM se ha unido al dominio de Active Directory, elimina la instancia.
Elimina la instancia:
& gcloud compute instances delete join-01 --quiet
Crear un grupo de instancias gestionado y unirse a él
También puedes verificar que las instancias de un MIG puedan unirse automáticamente a tu dominio.
Crea una plantilla de instancia pasando la secuencia de comandos de especialización que hace que la VM se una al dominio:
VPC compartida
$VpchostProjectId = (gcloud compute shared-vpc get-host-project $ProjectId --format=value`(name`)) & gcloud compute instance-templates create ad-2019core-n1-std-2 ` --image-family windows-2019-core ` --image-project windows-cloud ` --no-address ` --machine-type n1-standard-2 ` --subnet projects/$VpchostProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
VPC independiente
& gcloud compute instance-templates create ad-2019core-n1-std-2 ` --image-family windows-2019-core ` --image-project windows-cloud ` --no-address ` --machine-type n1-standard-2 ` --subnet projects/$ProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Crea un grupo de instancias gestionado que use la plantilla de instancia:
& gcloud compute instance-groups managed create group-01 ` --template ad-2019core-n1-std-2 ` --size=3
Espera unos minutos y, a continuación, usa el complemento MMC Usuarios y equipos de Active Directory para comprobar que se han creado cuatro objetos en Active Directory:
- 3 cuentas de ordenador correspondientes a las 3 instancias de VM del grupo de instancias gestionado.
- Un grupo llamado
group-01
que contiene las tres cuentas de ordenador. Si tienes previsto usar cuentas de servicio gestionadas por grupos (gMSA), puedes usar este grupo para conceder acceso a la gMSA.
Una vez que hayas verificado que las instancias de VM de tus MIGs pueden unirse a tu dominio de Active Directory, puedes eliminar el grupo gestionado y la plantilla de instancia siguiendo estos pasos:
En Cloud Shell, elimina el grupo de instancias:
& gcloud compute instance-groups managed delete group-01 --quiet
Elimina la plantilla de instancia:
& gcloud compute instance-templates delete ad-2019core-n1-std-2 --quiet
Programar la limpieza de cuentas de ordenador obsoletas
Automatizar el proceso de unión de ordenadores al dominio reduce el esfuerzo necesario para configurar nuevos servidores y te permite usar servidores unidos al dominio en grupos de instancias gestionados. Sin embargo, con el tiempo, se pueden acumular cuentas de ordenador obsoletas en el dominio.
Para evitar que se acumulen, te recomendamos que configures la aplicación register-computer
para que analice periódicamente tu dominio de Active Directory, busque y elimine automáticamente las cuentas obsoletas y sus registros DNS asociados.
La aplicación register-computer
puede usar los atributos msDS-cloudExtensionAttribute
de las cuentas de ordenador para identificar qué cuentas de ordenador están obsoletas. Estos atributos contienen el proyecto, la zona y el nombre de la instancia de VM correspondiente en Compute Engine. En cada cuenta de ordenador, la aplicación puede comprobar si la instancia de VM correspondiente sigue disponible. Si no es así, la cuenta del ordenador se considera obsoleta y se elimina.
Para activar una limpieza de cuentas de ordenador, invoca el endpoint /cleanup
de la aplicación Cloud Run. Para evitar que usuarios no autorizados activen una limpieza, esta solicitud debe autenticarse mediante la cuenta de servicio register-computer-app
.
Configurar Cloud Scheduler
En los siguientes pasos se muestra cómo configurar Cloud Scheduler junto con Pub/Sub para activar automáticamente una limpieza cada 24 horas:
En Cloud Shell, habilita la API Cloud Scheduler en tu proyecto de dominio:
& gcloud services enable cloudscheduler.googleapis.com
Asigna a
AppEngineLocation
una ubicación de App Engine válida en la que desplegar Cloud Scheduler:$AppEngineLocation = "
location
"Sustituye
location
por la región de App Engine que hayas seleccionado para tus recursos de VPC. Por ejemplo,us-central
. Si esa región no está disponible como ubicación de App Engine, elige una ubicación que esté cerca geográficamente. Para obtener más información, consulta Regiones y zonas.Inicializa App Engine:
& gcloud app create --region $AppEngineLocation --project $DomainProjectId
Crea una tarea de Cloud Scheduler:
& gcloud scheduler jobs create http cleanup-computer-accounts ` --schedule "every 24 hours" ` --uri "$RegisterUrl/cleanup" ` --oidc-service-account-email register-computer-app@$DomainProjectId.iam.gserviceaccount.com ` --oidc-token-audience "$RegisterUrl/" ` --project $DomainProjectId
Este trabajo llama a la aplicación
register-computer
una vez cada 24 horas y usa la cuenta de servicioregister-computer-app
para la autenticación.
Activar una limpieza
Para verificar la configuración de la limpieza de cuentas de ordenador obsoletas, puedes activar la tarea de Cloud Scheduler manualmente.
En la Google Cloud consola, ve a Cloud Scheduler.
En la tarea
cleanup-computer-accounts
que has creado, haz clic en Ejecutar ahora.Al cabo de unos segundos, en la columna Resultado se mostrará Éxito, lo que indica que la limpieza se ha completado correctamente. Si la columna de resultados no se actualiza automáticamente en unos segundos, haz clic en el botón Actualizar.
Para obtener más información sobre las cuentas que se han limpiado, consulta los registros de la aplicación register-computer
.
En la Google Cloud consola, ve a Cloud Run.
Haz clic en la aplicación
register-computer
.En el menú, haz clic en Registros.
Las entradas de registro indican que las cuentas de ordenador de las instancias de VM que has usado para probar la unión al dominio se han identificado como obsoletas y se han eliminado.
Limpieza
Si usas este documento como base para otras arquitecturas de referencia e implementaciones, consulta los demás documentos para saber cuándo debes ejecutar los pasos de limpieza.
Si no quieres mantener la Google Cloud configuración utilizada en este documento, puedes deshacerla siguiendo estos pasos:
En Cloud Shell, elimina la tarea de Cloud Scheduler:
& gcloud scheduler jobs delete cleanup-computer-accounts ` --project $DomainProjectId
Elimina la aplicación de Cloud Run:
& gcloud run services delete register-computer ` --platform managed ` --project $DomainProjectId ` --region $ServerlessRegion
Elimina el secreto de Secret Manager:
gcloud secrets delete ad-password --project $DomainProjectId
Elimina la regla de cortafuegos para el acceso LDAP y Kerberos:
gcloud compute firewall-rules delete allow-adkrb-from-serverless-to-dc --project=
vpc-project-id
Sustituye
vpc-project-id
por el ID del proyecto en el que se define la VPC. Si utilizas una VPC compartida, usa el proyecto host de la VPC. De lo contrario, usa el ID del proyecto de dominio.
Deshacer cambios de Active Directory
- Con un cliente RDP, inicia sesión en un equipo que tenga acceso de administrador a tu dominio de Active Directory.
- En el complemento MMC Usuarios y equipos de Active Directory, ve a la unidad organizativa
Projects
. - Elimina la
register-computer
cuenta de usuario de Active Directory. - Elimina la unidad organizativa que has creado para probar la unión automática a un dominio.
Siguientes pasos
- Para unir máquinas virtuales Windows a un dominio de Microsoft AD gestionado mediante la unión automática a un dominio, consulta Unir automáticamente una máquina virtual Windows a un dominio.
- Consulta nuestras prácticas recomendadas para desplegar un bosque de recursos de Active Directory en Google Cloud.
- Para ver más arquitecturas de referencia, diagramas y prácticas recomendadas, consulta el centro de arquitectura de Cloud.